On Fri, Sep 13, 2024 at 11:36 AM Jakub Kicinski [off-list ref] wrote:
On Fri, 13 Sep 2024 09:27:17 -0700 Mina Almasry wrote:
quoted
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h
index 5769fe6e4950..ea4005d2d1a9 100644
--- a/include/linux/page-flags.h
+++ b/include/linux/page-flags.h
@@ -239,8 +239,8 @@ static inline unsigned long _compound_head(const
struct page *page)
{
unsigned long head = READ_ONCE(page->compound_head);
- if (unlikely(head & 1))
- return head - 1;
+ if (unlikely(head & 1UL))
+ return head & ~1UL;
return (unsigned long)page_fixed_fake_head(page);
}
Other than that I think this is a correct fix. Jakub, what to do here.
Do I send this fix to the mm tree or to net-next?
Yes, please, send this out and CC all the relevant people.
We can decide which tree it will go into once its reviewed.
Stephen, would you be willing to slap this on top of linux-next for now?
I can't think of a better bandaid we could put in net-next,
and it'd be sad to revert a major feature because of a compiler bug(?)
Change, got NAKed:
https://lore.kernel.org/netdev/ZuSQ9BT9Vg7O2kXv@casper.infradead.org/ (local)
But AFAICT we don't really need to do this inside of mm, affecting
things like compound_head. This equivalent change also makes the build
pass. Does this look good?
diff --git a/include/net/netmem.h b/include/net/netmem.h
index 8a6e20be4b9d..58f2120cd392 100644
--- a/include/net/netmem.h
+++ b/include/net/netmem.h
@@ -100,7 +100,15 @@ static inline netmem_ref net_iov_to_netmem(struct
net_iov *niov)
static inline netmem_ref page_to_netmem(struct page *page)
{
- return (__force netmem_ref)page;
+ /* page* exported from the mm stack would not have the LSB set, but the
+ * GCC 14 powerpc compiler will optimize reads into this pointer into
+ * unaligned reads as it sees address arthemetic in _compound_head().
+ *
+ * Explicitly clear the LSB until what looks like a GCC compiler issue
+ * is resolved.
+ */
+ DEBUG_NET_WARN_ON_ONCE((unsigned long)page & 1UL);
+ return (__force netmem_ref)page & ~1UL;
}
--
Thanks,
Mina