On Sat, 15 Mar 2025 16:06:22 +0800 Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> wrote: > Use the system-wide zero page instead of a custom zero page. > I'll assume the MD maintainers will process this. > --- a/include/linux/raid/pq.h > +++ b/include/linux/raid/pq.h > @@ -11,8 +11,9 @@ > #ifdef __KERNEL__ > > #include <linux/blkdev.h> > +#include <linux/mm.h> > > -extern const char raid6_empty_zero_page[PAGE_SIZE]; > +#define raid6_empty_zero_page ((const char *)page_address(ZERO_PAGE(0))) This will of course meet the aligned(256) requirement. I do think it would be nicer to write this as a real inlined C function and to convert usage sites to raid6_empty_zero_page(). IOW, let's tell the truth rather than pretending that raid6_empty_zero_page is a global variable. > #else /* ! __KERNEL__ */ > /* Used for testing in user space */ > diff --git a/lib/raid6/algos.c b/lib/raid6/algos.c > index cd2e88ee1f14..03f1a8c179f7 100644 > --- a/lib/raid6/algos.c > +++ b/lib/raid6/algos.c > @@ -18,9 +18,6 @@ > #else > #include <linux/module.h> > #include <linux/gfp.h> > -/* In .bss so it's zeroed */ > -const char raid6_empty_zero_page[PAGE_SIZE] __attribute__((aligned(256))); > -EXPORT_SYMBOL(raid6_empty_zero_page); > #endif Is there any possibility that the MD drivers will point DMA hardware at the global zero page, thereby invalidating that page from CPU caches in some manner?