Re: [PATCH 18/25] x86: move the XOR code to lib/raid/

Eric Biggers
2026-02-27T23:55:39Z

On Fri, Feb 27, 2026 at 03:30:16PM +0100, Peter Zijlstra wrote:
> On Thu, Feb 26, 2026 at 07:10:30AM -0800, Christoph Hellwig wrote:
> > Move the optimized XOR code out of line into lib/raid.
> >
> > Signed-off-by: Christoph Hellwig <hch@lst.de>
> > ---
> > arch/x86/include/asm/xor.h | 518 ++----------------
> > arch/x86/include/asm/xor_64.h | 32 --
> > lib/raid/xor/Makefile | 8 +
> > .../xor_avx.h => lib/raid/xor/x86/xor-avx.c | 14 +-
> > .../xor_32.h => lib/raid/xor/x86/xor-mmx.c | 60 +-
> > lib/raid/xor/x86/xor-sse.c | 476 ++++++++++++++++
>
> I gotta ask, why lib/raid/xor/$arch/ instead of something like
> arch/$arch/lib/xor ?

Similar to lib/crypto/ and lib/crc/, it allows the translation units
(either .c or .S files) containing architecture-optimized XOR code to be
included directly in the xor.ko module, where they should be.

Previously, these were always built into the core kernel even if
XOR_BLOCKS was 'n' or 'm', or they were built into a separate module
xor-neon.ko which xor.ko depended on. So either the code was included
unnecessarily, or there was an extra module.

Technically we could instead have the lib makefile compile stuff in
arch/, but that would be unusual. It's much cleaner to have the
directory structure match the build system.

If we made this code always built-in, like memcpy(), then we could put
it anywhere. But (like many of the crypto and CRC algorithms) many
kernels don't need this code, and even if they do it may be needed only
by 'm' code. So it makes sense to support tristate.

- Eric