Re: [PATCH 3/7] x86: make CX8 usage unconditional
From: David Gow
Date: Fri Nov 06 2026 - 10:46:10 EST
Le 06/11/2026 à 00:34, Arnd Bergmann a écrit :
From: Arnd Bergmann <arnd@xxxxxxxx>
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@xxxxxxxx>
---
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.oCheers,
subarch-y += ../kernel/sys_ia32.o
diff --git a/lib/atomic64_test.c b/lib/atomic64_test.c
index d726068358c7..37af41df3e6a 100644
-- David
[1]: https://lore.kernel.org/all/20240720063937.2311958-2-davidgow@xxxxxxxxxx/