[PATCH 3/7] x86: make CX8 usage unconditional
David Gow
david at davidgow.net
Fri Nov 6 07:43:17 PST 2026
Le 06/11/2026 à 00:34, Arnd Bergmann a écrit :
> From: Arnd Bergmann <arnd at arndb.de>
>
> All supported CPUs now provide the cmpxchg8b instruction, so remove
> all compile-time and runtime checks for its presence and the fallback
> implementation, to assume it just works.
>
> Signed-off-by: Arnd Bergmann <arnd at arndb.de>
> ---
Hi Arnd,
As-is, this breaks 32-bit UML, as atomic64_cx8_32.S is removed from the
Makefile. With that reinstated, 32-bit UML at least builds and passes
some basic KUnit tests here (though I haven't tried it on actual 586+
class hardware yet, and building with CONFIG_M586TSC still fails the
checksum tests[1]).
Reproduces with:
make O=.tmpuml ARCH=um SUBARCH=i386
or
./tools/testing/kunit/kunit.py run --arch um --kconfig_add CONFIG_64BIT=n
> arch/um/include/asm/asm-prototypes.h | 4
> arch/x86/Kconfig.cpu | 3 -
> arch/x86/Kconfig.cpufeatures | 6 +-
> arch/x86/include/asm/asm-prototypes.h | 4 -
> arch/x86/include/asm/atomic64_32.h | 15 --
> arch/x86/include/asm/cmpxchg_32.h | 76 +---------
> arch/x86/include/asm/percpu.h | 14 +-
> arch/x86/lib/Makefile | 4 -
> arch/x86/lib/atomic64_386_32.S | 195 --------------------------
> arch/x86/lib/cmpxchg8b_emu.S | 97 -------------
> arch/x86/um/Kconfig | 2 +-
> arch/x86/um/Makefile | 3 +-
> lib/atomic64_test.c | 7 +-
> 13 files changed, 13 insertions(+), 417 deletions(-)
> delete mode 100644 arch/x86/lib/atomic64_386_32.S
> delete mode 100644 arch/x86/lib/cmpxchg8b_emu.S
>
...snip...
> diff --git a/arch/x86/um/Kconfig b/arch/x86/um/Kconfig
> index 44b12e45f9a0..5b78440a78b9 100644
> --- a/arch/x86/um/Kconfig
> +++ b/arch/x86/um/Kconfig
> @@ -13,7 +13,7 @@ config UML_X86
> select ARCH_USE_QUEUED_SPINLOCKS
> select DCACHE_WORD_ACCESS
> select HAVE_EFFICIENT_UNALIGNED_ACCESS
> - select UML_SUBARCH_SUPPORTS_SMP if X86_CX8
> + select UML_SUBARCH_SUPPORTS_SMP
>
> config 64BIT
> bool "64-bit kernel" if "$(SUBARCH)" = "x86"
> diff --git a/arch/x86/um/Makefile b/arch/x86/um/Makefile
> index 100b68f601f9..716da7b1e3e9 100644
> --- a/arch/x86/um/Makefile
> +++ b/arch/x86/um/Makefile
> @@ -19,8 +19,7 @@ ifeq ($(CONFIG_X86_32),y)
>
> obj-y += syscalls_32.o
>
> -subarch-y = ../lib/string_32.o ../lib/atomic64_32.o ../lib/atomic64_cx8_32.o
> -subarch-y += ../lib/cmpxchg8b_emu.o ../lib/atomic64_386_32.o
> +subarch-y = ../lib/string_32.o ../lib/atomic64_32.o
Reinstate ../lib/atomic64_cx8_32.o here!
> subarch-y += ../lib/checksum_32.o
> subarch-y += ../kernel/sys_ia32.o
>
> diff --git a/lib/atomic64_test.c b/lib/atomic64_test.c
> index d726068358c7..37af41df3e6a 100644
Cheers,
-- David
[1]:
https://lore.kernel.org/all/20240720063937.2311958-2-davidgow@google.com/
More information about the linux-um
mailing list