[PATCH -v3 0/15] x86: Remove support for TSC-less and CX8-less CPUs

Ingo Molnar
2025-12-14T08:47:23Z

Changes in -v3:

- Port to v6.19-rc1

Changes in -v2:

- Rebase to v6.15-rc6 + the relevant x86 tree branch

- Use proper asm() constraints in the simplified CX8 methods (Uros Bizjak)

- Remove stray family-4 default (suggested by Arnd Bergmann)

- Simplify CX8 test (suggested by Uros Bizjak)

- Add review tags

The latest version of this series can be found at:

git://git.kernel.org/pub/scm/linux/kernel/git/mingo/tip.git WIP.x86/cpu

Thanks,

Ingo

=============>

Original -v1 announcement:

In the x86 architecture we have various complicated hardware emulation
facilities on x86-32 to support ancient 32-bit CPUs that very very few
people are using with modern kernels. This compatibility glue is sometimes
even causing problems that people spend time to resolve, which time could
be spent on other things.

As Linus recently remarked:

> I really get the feeling that it's time to leave i486 support behind.
> There's zero real reason for anybody to waste one second of
> development effort on this kind of issue.

This series increases minimum kernel support features to include TSC and
CX8 (CMPXCHG8B) hardware support, which removes 486 (and derivatives) support
and early-586 (and derivatives) support.

Doing this allows the removal of a fair amount of code:

80 files changed, 38 insertions(+), 14104 deletions(-)

Much of which is the math-emu/ library - but even without math-emu,
the simplification is substantial:

33 files changed, 38 insertions(+), 1081 deletions(-)

This series has 5 main parts:

1) Removal of the main CPU options and their dependencies in the Kconfig space:

x86/cpu: Remove M486/M486SX/ELAN support
x86/cpu: Remove CONFIG_MWINCHIP3D/MWINCHIPC6
x86/cpu: Remove CPU_SUP_UMC_32 support
x86/cpu: Remove TSC-less CONFIG_M586 support

2) Remove platform support for chips that weren't carried forward
after these CPUs:

x86/cpu, x86/platform, watchdog: Remove CONFIG_X86_RDC321X support
x86/cpu: Remove the CONFIG_X86_INVD_BUG quirk
x86/cpu, cpufreq: Remove AMD ELAN support

3) Remove math-emu/ support:

x86/fpu: Remove MATH_EMULATION and related glue code
x86/fpu: Remove the 'no387' boot option
x86/fpu: Remove the math-emu/ FPU emulation library

4) Make CONFIG_X86_TSC unconditional and simplify the build-time TSC variances:

x86/cpu: Make CONFIG_X86_TSC unconditional
x86: Remove !CONFIG_X86_TSC code

Note that runtime TSC disabling is still kept in its various forms.

Also note that I kept CONFIG_X86_TSC itself, which is a proxy for
a few drivers for 'sane x86', and which might be used in changes
still in-flight. There's very little cost to keep this Kconfig option
going forward, even though it's always-enabled.

5) Make CONFIG_X86_CX8 unconditional and remove build-time complications:

x86/cpu: Make CONFIG_X86_CX8 unconditional
x86/percpu: Remove !CONFIG_X86_CX8 methods
x86/atomics: Remove !CONFIG_X86_CX8 methods

Note that CONFIG_X86_CX8 is still kept, but not used by anything
anymore. We can probably remove it entirely and there's no expectation
of pending/outside code having dependency on this.

Note that there's still some stray references to removed platforms in
the main x86 Kconfig and Kconfig.x86, and the entire vector of CPU
options is probably overly complicated and should probably be replaced
with a single option - I'll clean that all up once there's rough
agreement about the scope of this RFC series.

The tree can also be found in my tree:

git://git.kernel.org/pub/scm/linux/kernel/git/mingo/tip.git WIP.x86/cpu

Lightly tested.

Thanks,

Ingo

================>