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

Ingo Molnar posted 15 patches 9 months, 2 weeks ago
There is a newer version of this series
Documentation/admin-guide/kernel-parameters.txt |    4 -
arch/x86/Kconfig                                |   71 +-
arch/x86/Kconfig.cpu                            |   95 +-
arch/x86/Kconfig.cpufeatures                    |    2 -
arch/x86/Makefile                               |    1 -
arch/x86/Makefile_32.cpu                        |    8 -
arch/x86/include/asm/asm-prototypes.h           |    4 -
arch/x86/include/asm/atomic64_32.h              |   17 +-
arch/x86/include/asm/cmpxchg_32.h               |   86 +-
arch/x86/include/asm/fpu/api.h                  |    6 -
arch/x86/include/asm/percpu.h                   |    6 +-
arch/x86/include/asm/timex.h                    |    3 +-
arch/x86/include/asm/trace_clock.h              |    8 -
arch/x86/include/asm/tsc.h                      |   13 +-
arch/x86/include/asm/vermagic.h                 |   12 -
arch/x86/kernel/Makefile                        |    4 +-
arch/x86/kernel/cpu/common.c                    |    7 -
arch/x86/kernel/cpu/umc.c                       |   26 -
arch/x86/kernel/fpu/core.c                      |    5 -
arch/x86/kernel/fpu/init.c                      |    9 +-
arch/x86/kernel/i8253.c                         |    2 +-
arch/x86/kernel/traps.c                         |   21 -
arch/x86/kernel/tsc.c                           |   13 -
arch/x86/lib/Makefile                           |    4 -
arch/x86/lib/atomic64_386_32.S                  |  195 ---
arch/x86/lib/cmpxchg8b_emu.S                    |   97 --
arch/x86/math-emu/Makefile                      |   30 -
arch/x86/math-emu/README                        |  427 ------
arch/x86/math-emu/control_w.h                   |   46 -
arch/x86/math-emu/div_Xsig.S                    |  367 -----
arch/x86/math-emu/div_small.S                   |   48 -
arch/x86/math-emu/errors.c                      |  686 ----------
arch/x86/math-emu/exception.h                   |   51 -
arch/x86/math-emu/fpu_arith.c                   |  153 ---
arch/x86/math-emu/fpu_asm.h                     |   32 -
arch/x86/math-emu/fpu_aux.c                     |  267 ----
arch/x86/math-emu/fpu_emu.h                     |  218 ---
arch/x86/math-emu/fpu_entry.c                   |  718 ----------
arch/x86/math-emu/fpu_etc.c                     |  136 --
arch/x86/math-emu/fpu_proto.h                   |  157 ---
arch/x86/math-emu/fpu_system.h                  |  130 --
arch/x86/math-emu/fpu_tags.c                    |  116 --
arch/x86/math-emu/fpu_trig.c                    | 1649 -----------------------
arch/x86/math-emu/get_address.c                 |  401 ------
arch/x86/math-emu/load_store.c                  |  322 -----
arch/x86/math-emu/mul_Xsig.S                    |  179 ---
arch/x86/math-emu/poly.h                        |  115 --
arch/x86/math-emu/poly_2xm1.c                   |  146 --
arch/x86/math-emu/poly_atan.c                   |  209 ---
arch/x86/math-emu/poly_l2.c                     |  245 ----
arch/x86/math-emu/poly_sin.c                    |  379 ------
arch/x86/math-emu/poly_tan.c                    |  213 ---
arch/x86/math-emu/polynom_Xsig.S                |  137 --
arch/x86/math-emu/reg_add_sub.c                 |  334 -----
arch/x86/math-emu/reg_compare.c                 |  479 -------
arch/x86/math-emu/reg_constant.c                |  123 --
arch/x86/math-emu/reg_constant.h                |   26 -
arch/x86/math-emu/reg_convert.c                 |   47 -
arch/x86/math-emu/reg_divide.c                  |  183 ---
arch/x86/math-emu/reg_ld_str.c                  | 1220 -----------------
arch/x86/math-emu/reg_mul.c                     |  116 --
arch/x86/math-emu/reg_norm.S                    |  150 ---
arch/x86/math-emu/reg_round.S                   |  711 ----------
arch/x86/math-emu/reg_u_add.S                   |  169 ---
arch/x86/math-emu/reg_u_div.S                   |  474 -------
arch/x86/math-emu/reg_u_mul.S                   |  150 ---
arch/x86/math-emu/reg_u_sub.S                   |  274 ----
arch/x86/math-emu/round_Xsig.S                  |  142 --
arch/x86/math-emu/shr_Xsig.S                    |   89 --
arch/x86/math-emu/status_w.h                    |   68 -
arch/x86/math-emu/version.h                     |   12 -
arch/x86/math-emu/wm_shrx.S                     |  207 ---
arch/x86/math-emu/wm_sqrt.S                     |  472 -------
arch/x86/xen/Kconfig                            |    2 +-
drivers/cpufreq/Kconfig.x86                     |   26 -
drivers/cpufreq/Makefile                        |    2 -
drivers/cpufreq/elanfreq.c                      |  227 ----
drivers/cpufreq/sc520_freq.c                    |  137 --
drivers/watchdog/Kconfig                        |    2 +-
lib/atomic64_test.c                             |    4 +-
80 files changed, 38 insertions(+), 14104 deletions(-)
delete mode 100644 arch/x86/kernel/cpu/umc.c
delete mode 100644 arch/x86/lib/atomic64_386_32.S
delete mode 100644 arch/x86/lib/cmpxchg8b_emu.S
delete mode 100644 arch/x86/math-emu/Makefile
delete mode 100644 arch/x86/math-emu/README
delete mode 100644 arch/x86/math-emu/control_w.h
delete mode 100644 arch/x86/math-emu/div_Xsig.S
delete mode 100644 arch/x86/math-emu/div_small.S
delete mode 100644 arch/x86/math-emu/errors.c
delete mode 100644 arch/x86/math-emu/exception.h
delete mode 100644 arch/x86/math-emu/fpu_arith.c
delete mode 100644 arch/x86/math-emu/fpu_asm.h
delete mode 100644 arch/x86/math-emu/fpu_aux.c
delete mode 100644 arch/x86/math-emu/fpu_emu.h
delete mode 100644 arch/x86/math-emu/fpu_entry.c
delete mode 100644 arch/x86/math-emu/fpu_etc.c
delete mode 100644 arch/x86/math-emu/fpu_proto.h
delete mode 100644 arch/x86/math-emu/fpu_system.h
delete mode 100644 arch/x86/math-emu/fpu_tags.c
delete mode 100644 arch/x86/math-emu/fpu_trig.c
delete mode 100644 arch/x86/math-emu/get_address.c
delete mode 100644 arch/x86/math-emu/load_store.c
delete mode 100644 arch/x86/math-emu/mul_Xsig.S
delete mode 100644 arch/x86/math-emu/poly.h
delete mode 100644 arch/x86/math-emu/poly_2xm1.c
delete mode 100644 arch/x86/math-emu/poly_atan.c
delete mode 100644 arch/x86/math-emu/poly_l2.c
delete mode 100644 arch/x86/math-emu/poly_sin.c
delete mode 100644 arch/x86/math-emu/poly_tan.c
delete mode 100644 arch/x86/math-emu/polynom_Xsig.S
delete mode 100644 arch/x86/math-emu/reg_add_sub.c
delete mode 100644 arch/x86/math-emu/reg_compare.c
delete mode 100644 arch/x86/math-emu/reg_constant.c
delete mode 100644 arch/x86/math-emu/reg_constant.h
delete mode 100644 arch/x86/math-emu/reg_convert.c
delete mode 100644 arch/x86/math-emu/reg_divide.c
delete mode 100644 arch/x86/math-emu/reg_ld_str.c
delete mode 100644 arch/x86/math-emu/reg_mul.c
delete mode 100644 arch/x86/math-emu/reg_norm.S
delete mode 100644 arch/x86/math-emu/reg_round.S
delete mode 100644 arch/x86/math-emu/reg_u_add.S
delete mode 100644 arch/x86/math-emu/reg_u_div.S
delete mode 100644 arch/x86/math-emu/reg_u_mul.S
delete mode 100644 arch/x86/math-emu/reg_u_sub.S
delete mode 100644 arch/x86/math-emu/round_Xsig.S
delete mode 100644 arch/x86/math-emu/shr_Xsig.S
delete mode 100644 arch/x86/math-emu/status_w.h
delete mode 100644 arch/x86/math-emu/version.h
delete mode 100644 arch/x86/math-emu/wm_shrx.S
delete mode 100644 arch/x86/math-emu/wm_sqrt.S
delete mode 100644 drivers/cpufreq/elanfreq.c
delete mode 100644 drivers/cpufreq/sc520_freq.c
[RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Ingo Molnar 9 months, 2 weeks ago
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

================>
Ingo Molnar (15):
  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
  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
  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
  x86/cpu: Make CONFIG_X86_TSC unconditional
  x86: Remove !CONFIG_X86_TSC code
  x86/cpu: Make CONFIG_X86_CX8 unconditional
  x86/percpu: Remove !CONFIG_X86_CX8 methods
  x86/atomics: Remove !CONFIG_X86_CX8 methods

 Documentation/admin-guide/kernel-parameters.txt |    4 -
 arch/x86/Kconfig                                |   71 +-
 arch/x86/Kconfig.cpu                            |   95 +-
 arch/x86/Kconfig.cpufeatures                    |    2 -
 arch/x86/Makefile                               |    1 -
 arch/x86/Makefile_32.cpu                        |    8 -
 arch/x86/include/asm/asm-prototypes.h           |    4 -
 arch/x86/include/asm/atomic64_32.h              |   17 +-
 arch/x86/include/asm/cmpxchg_32.h               |   86 +-
 arch/x86/include/asm/fpu/api.h                  |    6 -
 arch/x86/include/asm/percpu.h                   |    6 +-
 arch/x86/include/asm/timex.h                    |    3 +-
 arch/x86/include/asm/trace_clock.h              |    8 -
 arch/x86/include/asm/tsc.h                      |   13 +-
 arch/x86/include/asm/vermagic.h                 |   12 -
 arch/x86/kernel/Makefile                        |    4 +-
 arch/x86/kernel/cpu/common.c                    |    7 -
 arch/x86/kernel/cpu/umc.c                       |   26 -
 arch/x86/kernel/fpu/core.c                      |    5 -
 arch/x86/kernel/fpu/init.c                      |    9 +-
 arch/x86/kernel/i8253.c                         |    2 +-
 arch/x86/kernel/traps.c                         |   21 -
 arch/x86/kernel/tsc.c                           |   13 -
 arch/x86/lib/Makefile                           |    4 -
 arch/x86/lib/atomic64_386_32.S                  |  195 ---
 arch/x86/lib/cmpxchg8b_emu.S                    |   97 --
 arch/x86/math-emu/Makefile                      |   30 -
 arch/x86/math-emu/README                        |  427 ------
 arch/x86/math-emu/control_w.h                   |   46 -
 arch/x86/math-emu/div_Xsig.S                    |  367 -----
 arch/x86/math-emu/div_small.S                   |   48 -
 arch/x86/math-emu/errors.c                      |  686 ----------
 arch/x86/math-emu/exception.h                   |   51 -
 arch/x86/math-emu/fpu_arith.c                   |  153 ---
 arch/x86/math-emu/fpu_asm.h                     |   32 -
 arch/x86/math-emu/fpu_aux.c                     |  267 ----
 arch/x86/math-emu/fpu_emu.h                     |  218 ---
 arch/x86/math-emu/fpu_entry.c                   |  718 ----------
 arch/x86/math-emu/fpu_etc.c                     |  136 --
 arch/x86/math-emu/fpu_proto.h                   |  157 ---
 arch/x86/math-emu/fpu_system.h                  |  130 --
 arch/x86/math-emu/fpu_tags.c                    |  116 --
 arch/x86/math-emu/fpu_trig.c                    | 1649 -----------------------
 arch/x86/math-emu/get_address.c                 |  401 ------
 arch/x86/math-emu/load_store.c                  |  322 -----
 arch/x86/math-emu/mul_Xsig.S                    |  179 ---
 arch/x86/math-emu/poly.h                        |  115 --
 arch/x86/math-emu/poly_2xm1.c                   |  146 --
 arch/x86/math-emu/poly_atan.c                   |  209 ---
 arch/x86/math-emu/poly_l2.c                     |  245 ----
 arch/x86/math-emu/poly_sin.c                    |  379 ------
 arch/x86/math-emu/poly_tan.c                    |  213 ---
 arch/x86/math-emu/polynom_Xsig.S                |  137 --
 arch/x86/math-emu/reg_add_sub.c                 |  334 -----
 arch/x86/math-emu/reg_compare.c                 |  479 -------
 arch/x86/math-emu/reg_constant.c                |  123 --
 arch/x86/math-emu/reg_constant.h                |   26 -
 arch/x86/math-emu/reg_convert.c                 |   47 -
 arch/x86/math-emu/reg_divide.c                  |  183 ---
 arch/x86/math-emu/reg_ld_str.c                  | 1220 -----------------
 arch/x86/math-emu/reg_mul.c                     |  116 --
 arch/x86/math-emu/reg_norm.S                    |  150 ---
 arch/x86/math-emu/reg_round.S                   |  711 ----------
 arch/x86/math-emu/reg_u_add.S                   |  169 ---
 arch/x86/math-emu/reg_u_div.S                   |  474 -------
 arch/x86/math-emu/reg_u_mul.S                   |  150 ---
 arch/x86/math-emu/reg_u_sub.S                   |  274 ----
 arch/x86/math-emu/round_Xsig.S                  |  142 --
 arch/x86/math-emu/shr_Xsig.S                    |   89 --
 arch/x86/math-emu/status_w.h                    |   68 -
 arch/x86/math-emu/version.h                     |   12 -
 arch/x86/math-emu/wm_shrx.S                     |  207 ---
 arch/x86/math-emu/wm_sqrt.S                     |  472 -------
 arch/x86/xen/Kconfig                            |    2 +-
 drivers/cpufreq/Kconfig.x86                     |   26 -
 drivers/cpufreq/Makefile                        |    2 -
 drivers/cpufreq/elanfreq.c                      |  227 ----
 drivers/cpufreq/sc520_freq.c                    |  137 --
 drivers/watchdog/Kconfig                        |    2 +-
 lib/atomic64_test.c                             |    4 +-
 80 files changed, 38 insertions(+), 14104 deletions(-)
 delete mode 100644 arch/x86/kernel/cpu/umc.c
 delete mode 100644 arch/x86/lib/atomic64_386_32.S
 delete mode 100644 arch/x86/lib/cmpxchg8b_emu.S
 delete mode 100644 arch/x86/math-emu/Makefile
 delete mode 100644 arch/x86/math-emu/README
 delete mode 100644 arch/x86/math-emu/control_w.h
 delete mode 100644 arch/x86/math-emu/div_Xsig.S
 delete mode 100644 arch/x86/math-emu/div_small.S
 delete mode 100644 arch/x86/math-emu/errors.c
 delete mode 100644 arch/x86/math-emu/exception.h
 delete mode 100644 arch/x86/math-emu/fpu_arith.c
 delete mode 100644 arch/x86/math-emu/fpu_asm.h
 delete mode 100644 arch/x86/math-emu/fpu_aux.c
 delete mode 100644 arch/x86/math-emu/fpu_emu.h
 delete mode 100644 arch/x86/math-emu/fpu_entry.c
 delete mode 100644 arch/x86/math-emu/fpu_etc.c
 delete mode 100644 arch/x86/math-emu/fpu_proto.h
 delete mode 100644 arch/x86/math-emu/fpu_system.h
 delete mode 100644 arch/x86/math-emu/fpu_tags.c
 delete mode 100644 arch/x86/math-emu/fpu_trig.c
 delete mode 100644 arch/x86/math-emu/get_address.c
 delete mode 100644 arch/x86/math-emu/load_store.c
 delete mode 100644 arch/x86/math-emu/mul_Xsig.S
 delete mode 100644 arch/x86/math-emu/poly.h
 delete mode 100644 arch/x86/math-emu/poly_2xm1.c
 delete mode 100644 arch/x86/math-emu/poly_atan.c
 delete mode 100644 arch/x86/math-emu/poly_l2.c
 delete mode 100644 arch/x86/math-emu/poly_sin.c
 delete mode 100644 arch/x86/math-emu/poly_tan.c
 delete mode 100644 arch/x86/math-emu/polynom_Xsig.S
 delete mode 100644 arch/x86/math-emu/reg_add_sub.c
 delete mode 100644 arch/x86/math-emu/reg_compare.c
 delete mode 100644 arch/x86/math-emu/reg_constant.c
 delete mode 100644 arch/x86/math-emu/reg_constant.h
 delete mode 100644 arch/x86/math-emu/reg_convert.c
 delete mode 100644 arch/x86/math-emu/reg_divide.c
 delete mode 100644 arch/x86/math-emu/reg_ld_str.c
 delete mode 100644 arch/x86/math-emu/reg_mul.c
 delete mode 100644 arch/x86/math-emu/reg_norm.S
 delete mode 100644 arch/x86/math-emu/reg_round.S
 delete mode 100644 arch/x86/math-emu/reg_u_add.S
 delete mode 100644 arch/x86/math-emu/reg_u_div.S
 delete mode 100644 arch/x86/math-emu/reg_u_mul.S
 delete mode 100644 arch/x86/math-emu/reg_u_sub.S
 delete mode 100644 arch/x86/math-emu/round_Xsig.S
 delete mode 100644 arch/x86/math-emu/shr_Xsig.S
 delete mode 100644 arch/x86/math-emu/status_w.h
 delete mode 100644 arch/x86/math-emu/version.h
 delete mode 100644 arch/x86/math-emu/wm_shrx.S
 delete mode 100644 arch/x86/math-emu/wm_sqrt.S
 delete mode 100644 drivers/cpufreq/elanfreq.c
 delete mode 100644 drivers/cpufreq/sc520_freq.c

-- 
2.45.2
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Pavel Machek 9 months, 2 weeks ago
Hi!

> 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.

We have open-source 486 cores, such as
https://github.com/MiSTer-devel/ao486_MiSTer . I'm not aware of
open-source 586 cores... so this is a bit sad.

Best regards,
									Pavel
-- 
I don't work for Nazis and criminals, and neither should you.
Boycott Putin, Trump, and Musk!
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Arnd Bergmann 9 months, 2 weeks ago
On Fri, Apr 25, 2025, at 10:41, Ingo Molnar wrote:
> 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.

Looks all good to me, thanks for including my earlier feedback.

Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Maciej W. Rozycki 9 months, 1 week ago
On Fri, 25 Apr 2025, Ingo Molnar wrote:

>  > 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.

 FWIW I'm not happy about that at the very least because this will prevent 
me from using my 486 box for EISA defxx driver maintenance.  What exactly 
is the problem with 486?

 I know the lack of TSC has security implications, but don't use the 
machine in a way for which it would be an issue and I don't expect anyone 
doing otherwise.  We have non-x86 platforms that lack a high-resolution 
timer and nobody's going to drop them.

 We also have platforms that lack atomics, let alone double-precision ones 
and they're fine too, so why is x86 different?

  Maciej
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Linus Torvalds 9 months, 1 week ago
On Mon, 5 May 2025 at 01:53, Maciej W. Rozycki <macro@orcam.me.uk> wrote:
>
>  We also have platforms that lack atomics, let alone double-precision ones
> and they're fine too, so why is x86 different?

So I don't know if you saw this thread:

   https://lore.kernel.org/all/202504211553.3ba9400-lkp@intel.com/

where I initially thought that it was the lack of TSC, but it looks
like it's the CMPXCHG8B code that ends up causing problems.

And the core issue boils down to "there's no point in wasting time on
even debugging this".

So basically, the support for i486 costs us more than it is worth.

             Linus
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Maciej W. Rozycki 9 months, 1 week ago
On Mon, 5 May 2025, Linus Torvalds wrote:

> >  We also have platforms that lack atomics, let alone double-precision ones
> > and they're fine too, so why is x86 different?
> 
> So I don't know if you saw this thread:
> 
>    https://lore.kernel.org/all/202504211553.3ba9400-lkp@intel.com/
> 
> where I initially thought that it was the lack of TSC, but it looks
> like it's the CMPXCHG8B code that ends up causing problems.

 I did glance over (in my effort to process outstanding 40k mailing list 
messages in two days), but haven't spotted CMPXCHG8B being the culprit; 
thanks for the pointer.

> And the core issue boils down to "there's no point in wasting time on
> even debugging this".

 Sadly I tend to agree, being unable, owing to time constraints, to commit 
myself to doing such debugging (NB glibc verification crashes i386 Linux 
reliably on Pentium MMX, apparently due to FP context corruption, and I 
need to prioritise debugging that, once I've figured out which actual test 
case triggers it, as due to the oddity of the glibc test system it's quite 
tough getting the logs matched between the host and the target system).

> So basically, the support for i486 costs us more than it is worth.

 So the cost has to be reduced and just as I proposed on the previous 
iteration last year this can be solved quite easily without sacrificing 
i486 support by adding #UD handler for CMPXCHG8B, just as we did for 
analogous stuff with some RISC platforms years if not decades ago.

 I was told in said discussion that decoding x86 address modes was not as
easy as with RISC modes (thank you, Captain Obvious!), but still that 
boils down to indexing into registers by ModR/M and SIB bit-fields, with a 
couple of corner cases, which ought to be less than a screenful of code.  
If objdump(1) can do it, so can we.

 No i486 has ever run Linux SMP.  Back in the day I tried hard to chase by 
the spec a single i486 system built around the APIC and Intel MP Spec and 
could not find any.  Compaq had some proprietary stuff (Corollary bus?) we 
never had support for.  And we discarded support for the discrete i82489DX 
APIC years ago anyway that some Pentium systems used too for the original 
P5 microarchitecture or to go beyond dual.  So said emulation would have 
to handle the UP case only, which ought to be straightforward and well 
contained.

 Thoughts?

  Maciej
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by H. Peter Anvin 9 months, 1 week ago
On May 6, 2025 6:53:34 AM PDT, "Maciej W. Rozycki" <macro@orcam.me.uk> wrote:
>On Mon, 5 May 2025, Linus Torvalds wrote:
>
>> >  We also have platforms that lack atomics, let alone double-precision ones
>> > and they're fine too, so why is x86 different?
>> 
>> So I don't know if you saw this thread:
>> 
>>    https://lore.kernel.org/all/202504211553.3ba9400-lkp@intel.com/
>> 
>> where I initially thought that it was the lack of TSC, but it looks
>> like it's the CMPXCHG8B code that ends up causing problems.
>
> I did glance over (in my effort to process outstanding 40k mailing list 
>messages in two days), but haven't spotted CMPXCHG8B being the culprit; 
>thanks for the pointer.
>
>> And the core issue boils down to "there's no point in wasting time on
>> even debugging this".
>
> Sadly I tend to agree, being unable, owing to time constraints, to commit 
>myself to doing such debugging (NB glibc verification crashes i386 Linux 
>reliably on Pentium MMX, apparently due to FP context corruption, and I 
>need to prioritise debugging that, once I've figured out which actual test 
>case triggers it, as due to the oddity of the glibc test system it's quite 
>tough getting the logs matched between the host and the target system).
>
>> So basically, the support for i486 costs us more than it is worth.
>
> So the cost has to be reduced and just as I proposed on the previous 
>iteration last year this can be solved quite easily without sacrificing 
>i486 support by adding #UD handler for CMPXCHG8B, just as we did for 
>analogous stuff with some RISC platforms years if not decades ago.
>
> I was told in said discussion that decoding x86 address modes was not as
>easy as with RISC modes (thank you, Captain Obvious!), but still that 
>boils down to indexing into registers by ModR/M and SIB bit-fields, with a 
>couple of corner cases, which ought to be less than a screenful of code.  
>If objdump(1) can do it, so can we.
>
> No i486 has ever run Linux SMP.  Back in the day I tried hard to chase by 
>the spec a single i486 system built around the APIC and Intel MP Spec and 
>could not find any.  Compaq had some proprietary stuff (Corollary bus?) we 
>never had support for.  And we discarded support for the discrete i82489DX 
>APIC years ago anyway that some Pentium systems used too for the original 
>P5 microarchitecture or to go beyond dual.  So said emulation would have 
>to handle the UP case only, which ought to be straightforward and well 
>contained.
>
> Thoughts?
>
>  Maciej

However, building a #UD instruction emulator is a project in itself that someone would have to take on. It isn't inherently simpler – quite the opposite – than the alternatives calling to a stub function than we have now.

We have the tools to do it; there is now a full x86 instruction decoder in the kernel that one could use to do this, but...

a. Someone would have to take it on;
b. It will need continuous testing;
c. That someone would *also* have to go through the additional effort of keeping the mainline code clean for the maintainers of the modern hardware.

And at some point we will be at a point where we were with i386 that the only users are occasional testers.

With regards to EISA, you still haven't clarified if there is a true use case or if this is a museum/nostalgia project. There isn't anything *wrong* with museum projects, not at all (I recently got to play SPACEWAR! on a real PDP-1; it was amazing) but imposing a maintenance burden on the mainline developers of one of the most heavily used architecture on the planet is not practical.

If someone really wanted to, they could maybe fork off, say, arch/i486 and maintain the a version of the kernel limited to these old machines, but it would require someone being willing to do the work. 
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Maciej W. Rozycki 9 months ago
On Tue, 6 May 2025, H. Peter Anvin wrote:

> > No i486 has ever run Linux SMP.  Back in the day I tried hard to chase by 
> >the spec a single i486 system built around the APIC and Intel MP Spec and 
> >could not find any.  Compaq had some proprietary stuff (Corollary bus?) we 
> >never had support for.  And we discarded support for the discrete i82489DX 
> >APIC years ago anyway that some Pentium systems used too for the original 
> >P5 microarchitecture or to go beyond dual.  So said emulation would have 
> >to handle the UP case only, which ought to be straightforward and well 
> >contained.
> 
> However, building a #UD instruction emulator is a project in itself that 
> someone would have to take on. It isn't inherently simpler – quite the 
> opposite – than the alternatives calling to a stub function than we have 
> now.

 Perhaps my RISC background makes me view instruction emulation as simpler 
than patching code.  It has been common throughout computing history too.  
In any case it would contain all the handling in a single function called 
from the generic #UD exception handler, something that could be `if 
(IS_ENABLED(CONFIG_M486))' and therefore completely ignored for all the 
newer platforms, and leaving the rest of the kernel code exactly the same 
as we now have for CMPXCHG8B platforms.

 My x86-fu is a bit rusty and surely I'm not familiar with all the recent 
features, however I retain my 20+ years of past experience, most recently 
with interfacing Atom systems via a JTAG probe to GDB over the remote 
serial protocol (which did include writing instruction emulation in the 
debug stub, specifically for MOV to/from debug registers or you wouldn't 
be able to run e.g. BIOS initialisation with the debugger attached due to 
the general-detect fault), and the i486/Pentium stuff is contemporary to 
my experience, so writing such an emulation handler shouldn't be a big 
deal to me.

 Note that we'll only have to emulate it for the kernel itself, so the 
emulation won't have to handle all the obscure corner cases, such as 
16-bit address modes, odd segment prefixes, or VM86 mode.

> We have the tools to do it; there is now a full x86 instruction decoder 
> in the kernel that one could use to do this, but...
> 
> a. Someone would have to take it on;
> b. It will need continuous testing;
> c. That someone would *also* have to go through the additional effort of 
>    keeping the mainline code clean for the maintainers of the modern 
>    hardware.

 I'd expect instruction emulation code to be zero-maintenance effort.  We 
have had such bits in the MIPS platform and they haven't been touched in 
decades.  It's not like machine instruction interpretation is ever going 
to change.  And none of the x86 maintainters will have to care whether it 
actually works, as nobody will see any adverse effect *unless* they build 
an i486 kernel *and* actually run it on an i486 both at a time.  Anything 
newer just won't ever trigger it.

> And at some point we will be at a point where we were with i386 that the 
> only users are occasional testers.

 I agree that the lack of the WP bit with the original i386 CPU was a real 
showstopper and a maintenance nightmare, and still having code to handle 
that misfeature would surely be a security hell nowadays too, so it had to 
go as soon as feasible.  As a nice side effect it let us get rid of the 
287/387 PC/AT-specific handling mess.

> With regards to EISA, you still haven't clarified if there is a true use 
> case or if this is a museum/nostalgia project. There isn't anything 
> *wrong* with museum projects, not at all (I recently got to play 
> SPACEWAR! on a real PDP-1; it was amazing) but imposing a maintenance 
> burden on the mainline developers of one of the most heavily used 
> architecture on the planet is not practical.

 There is no commercial value and no use case beyond making sure all the 
pieces involved continue to run.  You can call it a museum/nostalgia 
project if you prefer; for me it's the usual engineering challenge as 
with everything I do around Linux.

 As already stated in my reply to Borislav I don't want to put any burden 
on any maintainers and I'm trying to reduce it to zero while not losing 
the features.  The lone presence of a piece of code isn't a burden unless 
you actually have to do anything about it.

 I realise it's easier done with a niche kernel architecture than with one 
of the mainstream ones.

> If someone really wanted to, they could maybe fork off, say, arch/i486 
> and maintain the a version of the kernel limited to these old machines, 
> but it would require someone being willing to do the work.

 There's willingness and there's the availability of resources.  If it's 
say 2KiB worth of source code difference that you don't have to look at 
unless you run the platform that needs it, I'd argue I could maintain it, 
but question whether it's worth forking in the first place rather than 
keeping it in the main repo.

  Maciej
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Linus Torvalds 9 months, 1 week ago
On Tue, 6 May 2025 at 09:44, H. Peter Anvin <hpa@zytor.com> wrote:
>
> a. Someone would have to take it on;
> b. It will need continuous testing;
> c. That someone would *also* have to go through the additional effort of keeping the mainline code clean for the maintainers of the modern hardware.

I think the main issue is "when problems happen, people who
*shouldn't* have to care get reports".

I really think that the way forward is basically what we did for ia64:
get rid of i486 support in mainline, and people who care about i486
can maintain a smallish patch that basically keeps it alive for them.

Because I suspect that the "patch to keep it working in practice" is
likely going to remain pretty small: it's the silly cmpxchg helper
wrappers, it's disabling ARCH_USE_CMPXCHG_LOCKREF, and probably a few
X86_FEATURE_CX8 tests.

And it probably (a) works fine and (b) won't be code that changs very
much upstream, so maintaining it outside the main tree is likely not a
lot of work.

But because it's outside of the main tree, it won't cause pointless
noise from 0day bots etc, and won't affect people who care about
modern machines. And it can do various hacky things because the patch
would *only* be used by people who actually run on an i486-class
machine.

(Ok, if you actually care about the i486SX, the patch will be much
bigger, because it will have that whole FPU emulation code in it)

             Linus
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Maciej W. Rozycki 9 months ago
On Tue, 6 May 2025, Linus Torvalds wrote:

> > a. Someone would have to take it on;
> > b. It will need continuous testing;
> > c. That someone would *also* have to go through the additional effort of keeping the mainline code clean for the maintainers of the modern hardware.
> 
> I think the main issue is "when problems happen, people who
> *shouldn't* have to care get reports".

 FWIW I can't agree more here.

> I really think that the way forward is basically what we did for ia64:
> get rid of i486 support in mainline, and people who care about i486
> can maintain a smallish patch that basically keeps it alive for them.
> 
> Because I suspect that the "patch to keep it working in practice" is
> likely going to remain pretty small: it's the silly cmpxchg helper
> wrappers, it's disabling ARCH_USE_CMPXCHG_LOCKREF, and probably a few
> X86_FEATURE_CX8 tests.

 Why would these have to be disabled if we have CMPXCHG8B emulation?  Yes,
performance won't be stellar, but we talked it through already in the 
context of my recent EV4 Alpha effort.  People ran FPU emulation back in 
the day too rather than using soft-float, which would have surely reduced 
the handling overhead.

> And it probably (a) works fine and (b) won't be code that changs very
> much upstream, so maintaining it outside the main tree is likely not a
> lot of work.

 Conversely dropping support for a subtarget in the kernel will likely 
prompt the removal on the userland side, namely glibc, which will only 
complicate things.

> But because it's outside of the main tree, it won't cause pointless
> noise from 0day bots etc, and won't affect people who care about
> modern machines. And it can do various hacky things because the patch
> would *only* be used by people who actually run on an i486-class
> machine.

 This is a fair point, although I'm not sure why the bots are expected to 
complain about a piece of code once it's settled and does not change.  I 
can't recall any mailing list traffic about MIPS instruction emulation for 
legacy systems (and we made it a part of the uABI even) in what? -- 20 
years or so.

 And I'd prefer to stay away from hacks even at the cost of performance.  
I don't find the emulation of CMPXCHG8B and maybe RDTSC if really needed 
(possibly in a trivial way, such as returning an incrementing software 
counter) a hack, but evolution.  It has happened before.

> (Ok, if you actually care about the i486SX, the patch will be much
> bigger, because it will have that whole FPU emulation code in it)

 FWIW I'm fine to see FPU emulation code go, especially as it's something 
that can be sorted in the userland for the so inclined.  Or you can run a 
soft-float userland, for example in the form of a GCC multilib just as 
done with numerous targets.

  Maciej
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by H. Peter Anvin 9 months, 1 week ago
On May 6, 2025 10:11:04 AM PDT, Linus Torvalds <torvalds@linux-foundation.org> wrote:
>On Tue, 6 May 2025 at 09:44, H. Peter Anvin <hpa@zytor.com> wrote:
>>
>> a. Someone would have to take it on;
>> b. It will need continuous testing;
>> c. That someone would *also* have to go through the additional effort of keeping the mainline code clean for the maintainers of the modern hardware.
>
>I think the main issue is "when problems happen, people who
>*shouldn't* have to care get reports".
>
>I really think that the way forward is basically what we did for ia64:
>get rid of i486 support in mainline, and people who care about i486
>can maintain a smallish patch that basically keeps it alive for them.
>
>Because I suspect that the "patch to keep it working in practice" is
>likely going to remain pretty small: it's the silly cmpxchg helper
>wrappers, it's disabling ARCH_USE_CMPXCHG_LOCKREF, and probably a few
>X86_FEATURE_CX8 tests.
>
>And it probably (a) works fine and (b) won't be code that changs very
>much upstream, so maintaining it outside the main tree is likely not a
>lot of work.
>
>But because it's outside of the main tree, it won't cause pointless
>noise from 0day bots etc, and won't affect people who care about
>modern machines. And it can do various hacky things because the patch
>would *only* be used by people who actually run on an i486-class
>machine.
>
>(Ok, if you actually care about the i486SX, the patch will be much
>bigger, because it will have that whole FPU emulation code in it)
>
>             Linus

Yes, the patch will be bigger, but it's just a bunch of highly static code copied straight out of the current kernel with very few touch points to the rest of the kernel (which is why we didn't axe it together with i386 support. Now that one was ugly, with touch points all over the place.)

It is basically the same idea as the arch/i486 I suggested, just in a separate git tree (although I guess I don't really see how this is fundamentally different than, say, arch/m68k.)

An i486/i586 retroport can presumably also axe a bunch of things like side channel mitigations; most of them aren't applicable to the in-order i486/586 pipelines and the rest ... well, on a machine that slow, you are unlikely to be running the kind of workloads that care. 

Similarly, you should be able to simply unsupport the things that make the entry/exit code a nightmare, like SYSENTER and fancy NMI hacks (the latter requires an APIC.)

As far as I know, Transmeta Crusoe was the only i586-class CPU which supported SYSENTER (if that version of the firmware even shipped, I'm not sure), and Crusoe was "almost" i686 class in terms of ISA (mainly lacking PAE and NOPL, and having P5-like flags behavior.)

There is a huge gap then to the i686, with the i686 being the direct ancestor of the x86-64 systems in terms of systems architecture (APIC, PAE*, etc; SYSENTER in the second iteration; a general tightening of the ISA definition; PCI universal by then...)

But again, this is all academic unless someone steps up and wants to take on such a project.

   -hpa

* – I believe there was one version of the Pentium M which didn't have PAE, at least officially, although I understand that if you flipped the CR4 bit it actually worked. I am guessing, without any concrete evidence, that there was a timing path and that it would fail at the highest operating temperatures on some subset of chips.
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Maciej W. Rozycki 9 months ago
On Tue, 6 May 2025, H. Peter Anvin wrote:

> An i486/i586 retroport can presumably also axe a bunch of things like 
> side channel mitigations; most of them aren't applicable to the in-order 
> i486/586 pipelines and the rest ... well, on a machine that slow, you 
> are unlikely to be running the kind of workloads that care.
> 
> Similarly, you should be able to simply unsupport the things that make 
> the entry/exit code a nightmare, like SYSENTER and fancy NMI hacks (the 
> latter requires an APIC.)

 I do have a dual i586 with an APIC; used it to work on some NMI watchdog 
stuff that landed in mainline 25+ years ago.  Back in the day such systems 
were pretty common, built around the NX or later the HX chipset, so it's 
not that APIC support is irrelevent could be dropped.  If we were to go 
for a separate port, than stuff could potentially be resurrected too that 
was previously removed, such as discrete i82489DX APIC support.

 NB that box actually still runs some server software I need for my lab 
(MOP daemon, needed to netboot various DEC equipment) that I haven't 
ported to POWER9 owing to higher priority items.

> There is a huge gap then to the i686, with the i686 being the direct 
> ancestor of the x86-64 systems in terms of systems architecture (APIC, 
> PAE*, etc; SYSENTER in the second iteration; a general tightening of the 
> ISA definition; PCI universal by then...)

 I suspect eventually we'll want to drop all IA-32 support from mainline; 
isn't it of no commercial relevance already?  Hasn't even the embedded x86 
ecosystem switched to 64-bit Atom and the like?

 Actually I think a project to maintain the whole IA-32 platform alive 
rather than just the i486 subtarget might attract more attention and 
people beyond just myself and Adrian.  So far I've committed to support 
across the board (Linux where applicable and the GNU toolchain) for DEC 
Alpha, MIPS and VAX platforms plus a couple of small pieces such as the 
defxx driver and I can hardly cope already, so taking on another large 
project just won't work if I were alone with it.

> But again, this is all academic unless someone steps up and wants to 
> take on such a project.

 Correct, I just want to keep support to the minimum at the moment.

  Maciej
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by H. Peter Anvin 9 months, 1 week ago
On May 5, 2025 1:53:04 AM PDT, "Maciej W. Rozycki" <macro@orcam.me.uk> wrote:
>On Fri, 25 Apr 2025, Ingo Molnar wrote:
>
>>  > 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.
>
> FWIW I'm not happy about that at the very least because this will prevent 
>me from using my 486 box for EISA defxx driver maintenance.  What exactly 
>is the problem with 486?
>
> I know the lack of TSC has security implications, but don't use the 
>machine in a way for which it would be an issue and I don't expect anyone 
>doing otherwise.  We have non-x86 platforms that lack a high-resolution 
>timer and nobody's going to drop them.
>
> We also have platforms that lack atomics, let alone double-precision ones 
>and they're fine too, so why is x86 different?
>
>  Maciej

Why is x86 different? Because it is a tightly integrated platform with code shared across a very large number of generations, without "silly embedded nonsense hacks."

I think if you have a use case, you need to speak up about it, rather than for people to guess.
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Maciej W. Rozycki 9 months, 1 week ago
On Mon, 5 May 2025, H. Peter Anvin wrote:

> >>  > 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.
> >
> > FWIW I'm not happy about that at the very least because this will prevent 
> >me from using my 486 box for EISA defxx driver maintenance.  What exactly 
> >is the problem with 486?
> >
> > I know the lack of TSC has security implications, but don't use the 
> >machine in a way for which it would be an issue and I don't expect anyone 
> >doing otherwise.  We have non-x86 platforms that lack a high-resolution 
> >timer and nobody's going to drop them.
> >
> > We also have platforms that lack atomics, let alone double-precision ones 
> >and they're fine too, so why is x86 different?
> 
> Why is x86 different? Because it is a tightly integrated platform with 
> code shared across a very large number of generations, without "silly 
> embedded nonsense hacks."

 Thank you for the clarification.  By "silly embedded nonsense hacks" I 
suppose you refer to missing instruction emulation, which some platforms 
do so as to contain legacy support in a single place and let the rest of 
the code base assume the required feature is there, relieving maintainers 
from extra burden, correct?

> I think if you have a use case, you need to speak up about it, rather 
> than for people to guess.

 Which I just did; I think that's exactly what an RFC is about, isn't it?

  Maciej
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by H. Peter Anvin 9 months, 1 week ago
On May 5, 2025 6:04:12 AM PDT, "Maciej W. Rozycki" <macro@orcam.me.uk> wrote:
>On Mon, 5 May 2025, H. Peter Anvin wrote:
>
>> >>  > 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.
>> >
>> > FWIW I'm not happy about that at the very least because this will prevent 
>> >me from using my 486 box for EISA defxx driver maintenance.  What exactly 
>> >is the problem with 486?
>> >
>> > I know the lack of TSC has security implications, but don't use the 
>> >machine in a way for which it would be an issue and I don't expect anyone 
>> >doing otherwise.  We have non-x86 platforms that lack a high-resolution 
>> >timer and nobody's going to drop them.
>> >
>> > We also have platforms that lack atomics, let alone double-precision ones 
>> >and they're fine too, so why is x86 different?
>> 
>> Why is x86 different? Because it is a tightly integrated platform with 
>> code shared across a very large number of generations, without "silly 
>> embedded nonsense hacks."
>
> Thank you for the clarification.  By "silly embedded nonsense hacks" I 
>suppose you refer to missing instruction emulation, which some platforms 
>do so as to contain legacy support in a single place and let the rest of 
>the code base assume the required feature is there, relieving maintainers 
>from extra burden, correct?
>
>> I think if you have a use case, you need to speak up about it, rather 
>> than for people to guess.
>
> Which I just did; I think that's exactly what an RFC is about, isn't it?
>
>  Maciej

No, with "silly embedded nonsense hacks" (Google for it) I mean ad hoc hacks breaking the notion of a common platform.

As far as EISA is concerned, could you go into more detail? What are the remaining users of EISA? One thing that happened with i386 was that we found out that the only remaining "users" were people dragging out an old machine to test if the kernel still booted. With bigsmp we had similar experiences – in at least one case we ended up maintaining support for a system of which there were no machines left in existence...
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Maciej W. Rozycki 9 months, 1 week ago
On Mon, 5 May 2025, H. Peter Anvin wrote:

> >> I think if you have a use case, you need to speak up about it, rather 
> >> than for people to guess.
> >
> > Which I just did; I think that's exactly what an RFC is about, isn't it?
> 
> No, with "silly embedded nonsense hacks" (Google for it) I mean ad hoc 
> hacks breaking the notion of a common platform.

 I don't feel like I'm the right person to talk about such stuff.  I've 
always cared about portability and standardisation.

 In fact running old hardware is one aspect of portability verification, 
for example I run PCIe stuff off my Pentium MMX and Alpha hardware, and 
conversely I run conventional PCI stuff off my POWER9 (no port I/O!) and 
RISC-V hardware.  That has triggered numerous bugs, fixed over the years.

> As far as EISA is concerned, could you go into more detail? What are the 
> remaining users of EISA? One thing that happened with i386 was that we 
> found out that the only remaining "users" were people dragging out an 
> old machine to test if the kernel still booted. With bigsmp we had 
> similar experiences – in at least one case we ended up maintaining 
> support for a system of which there were no machines left in 
> existence...

 Well, my i486 box is plain EISA, so naturally I need EISA support to run 
it:

platform eisa.0: Probing EISA bus 0
eisa 00:00: EISA: Mainboard AEI0401 detected
eisa 00:05: EISA: slot 5: DEC3002 detected
defxx: v1.12 2021/03/10  Lawrence V. Stefani and others
00:05: DEFEA at I/O addr = 0x5000, IRQ = 10, Hardware addr = 00-00-f8-xx-yy-zz
00:05: registered as fddi0
eisa 00:06: EISA: slot 6: NPI0303 detected
eisa 00:08: EISA: slot 8: TCM5094 detected
eth0: 3c5x9 found at 0x8000, 10baseT port, address 00:a0:24:xx:yy:zz, IRQ 12.
platform eisa.0: EISA: Detected 3 cards

(fddi0 is the fast intranet interface, eth0 is the slow external one).  
It's a luggable integrated computer BTW, a Dolch PAC 60, very nice and 
compact, previously used by a field engineer for network fault isolation.

 I've already mentioned the maintenance of the defxx driver (it is also an 
exercise in portability, with defxx supporting 3 host bus attachments).

 This is also my backup box for GNU toolchain (GCC/glibc/GDB) verification 
for the i386 target.  It has actually proved recently to still have some 
commercial relevance (again, for portability verification), but who says 
the use of Linux is supposed to be solely commercial even nowadays?

 The origin of Linux is obvious and I wouldn't be around at all let alone 
for so many years if not for my enthusiasm solely for the technical merit 
of Linux (following my earlier passion for processors and systems) 
accompanied by the fairness of the GNU GPL, with any commercial aspect 
being at most distantly relevant and a late comer into the game.

 So yes, count me in as a passionate systems software engineer with a 
fondness for running odd configurations for the sake of experimentation 
(and consequently a portability exercise) and please do not deprive me of 
my enthusiasm.

  Maciej
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by John Paul Adrian Glaubitz 9 months, 1 week ago
On Tue, 2025-05-06 at 14:48 +0100, Maciej W. Rozycki wrote:
>  In fact running old hardware is one aspect of portability verification, 
> for example I run PCIe stuff off my Pentium MMX and Alpha hardware, and 
> conversely I run conventional PCI stuff off my POWER9 (no port I/O!) and 
> RISC-V hardware.  That has triggered numerous bugs, fixed over the years.

I agree with that stance. Building and running Debian on various architectures
has enabled use to find obscure bugs that did not trigger easily on x86_64
or arm64.

I remember one nasty bug in the DMA code that initially showed on ia64 only
and it was only when someone finally ran into the same problem on x86_64 that
it was actually fixed.

> 
> (fddi0 is the fast intranet interface, eth0 is the slow external one).  
> It's a luggable integrated computer BTW, a Dolch PAC 60, very nice and 
> compact, previously used by a field engineer for network fault isolation.
> 
>  I've already mentioned the maintenance of the defxx driver (it is also an 
> exercise in portability, with defxx supporting 3 host bus attachments).
> 
>  This is also my backup box for GNU toolchain (GCC/glibc/GDB) verification 
> for the i386 target.  It has actually proved recently to still have some 
> commercial relevance (again, for portability verification), but who says 
> the use of Linux is supposed to be solely commercial even nowadays?

I fully agree with this. Cross-architecture testing really helps finding hidden
bugs and it's also fun ;-).

>  The origin of Linux is obvious and I wouldn't be around at all let alone 
> for so many years if not for my enthusiasm solely for the technical merit 
> of Linux (following my earlier passion for processors and systems) 
> accompanied by the fairness of the GNU GPL, with any commercial aspect 
> being at most distantly relevant and a late comer into the game.
> 
>  So yes, count me in as a passionate systems software engineer with a 
> fondness for running odd configurations for the sake of experimentation 
> (and consequently a portability exercise) and please do not deprive me of 
> my enthusiasm.

Count me in as well.

PS: No, we don't have to bring back ia64 for that matter ;-).

Adrian

-- 
 .''`.  John Paul Adrian Glaubitz
: :' :  Debian Developer
`. `'   Physicist
  `-    GPG: 62FF 8A75 84E0 2956 9546  0006 7426 3B37 F5B5 F913
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Borislav Petkov 9 months, 1 week ago
On Mon, May 05, 2025 at 12:57:40PM -0700, H. Peter Anvin wrote:
> One thing that happened with i386 was that we found out that the only
> remaining "users" were people dragging out an old machine to test if the
> kernel still booted.

Follow this thread:

https://lore.kernel.org/r/CANpbe9Wm3z8fy9HbgS8cuhoj0TREYEEkBipDuhgkWFvqX0UoVQ@mail.gmail.com

People booting latest kernel on 486 without CPUID support. 

I can't find it in me to care for that old rust and yet I did it again. :-\

So yeah, +1 for removing old code which ain't worth maintaining.

There's stable and older kernels, those folks can use those and that's it.

Thx.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Maciej W. Rozycki 9 months, 1 week ago
On Mon, 5 May 2025, Borislav Petkov wrote:

> > One thing that happened with i386 was that we found out that the only
> > remaining "users" were people dragging out an old machine to test if the
> > kernel still booted.
> 
> Follow this thread:
> 
> https://lore.kernel.org/r/CANpbe9Wm3z8fy9HbgS8cuhoj0TREYEEkBipDuhgkWFvqX0UoVQ@mail.gmail.com
> 
> People booting latest kernel on 486 without CPUID support. 

 No such hardware here:

processor	: 0
vendor_id	: GenuineIntel
cpu family	: 4
model		: 3
model name	: 486 DX/2
stepping	: 5
fdiv_bug	: no
f00f_bug	: no
coma_bug	: no
fpu		: yes
fpu_exception	: yes
cpuid level	: 1
wp		: yes
flags		: fpu vme cpuid
bugs		: itlb_multihit
bogomips	: 32.56
clflush size	: 32
cache_alignment	: 32
address sizes	: 32 bits physical, 32 bits virtual
power management:

Sadly it's not one with 4MiB page support (that would be stepping 6).

> There's stable and older kernels, those folks can use those and that's it.

 Doesn't work for ongoing driver maintenance (and yes, distractions such 
as this only keep me from taking care of outstanding stuff, like figuring 
out why the defxx driver reproducibly crashes with my POWER9 box running 
glibc verification remotely for my RISC-V box; it's all intertwined and an 
issue in one place affects other ones, sigh).

  Maciej
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Borislav Petkov 9 months, 1 week ago
On Tue, May 06, 2025 at 02:51:51PM +0100, Maciej W. Rozycki wrote:
>  Doesn't work for ongoing driver maintenance

Dunno, I'd concentrate my efforts on something, a *little* *bit* more modern.
At some point this is old rusty hw no matter from which way you look at it and
it might as well be left to rest in its sunset days.

But I certainly am not trying to tell you what to do with your time.

What I have problem with is wasting my time maintaining old, ancient hw which
is not worth the electricity it needs to run. Especially if you can get
something orders of magnitudes better in *any* aspect you can think of, and
actually get some real work done.

:-P

Thx.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Maciej W. Rozycki 9 months ago
On Tue, 6 May 2025, Borislav Petkov wrote:

> >  Doesn't work for ongoing driver maintenance
> 
> Dunno, I'd concentrate my efforts on something, a *little* *bit* more modern.
> At some point this is old rusty hw no matter from which way you look at it and
> it might as well be left to rest in its sunset days.

 One doesn't exclude the other.  I do POWER9 or RISC-V stuff too.  Isn't 
it modern enough?

> What I have problem with is wasting my time maintaining old, ancient hw which
> is not worth the electricity it needs to run. Especially if you can get
> something orders of magnitudes better in *any* aspect you can think of, and
> actually get some real work done.

 I don't want you let alone expect to waste time on anything you're not 
interested in.  I'm trying to find a solution that saves you from that 
while preferably keeping everyone happy enough, including myself.

 Real work?  I find engineering challenges enjoyable regardless of the age 
of hardware involved and I don't want to take away anyone's daily bread 
(including mine) by spending my free time on a project someone might have 
commercial interest in and should pay for.  An obsolete platform is ideal 
for this purpose.

 And what's better and what's not is subjective.  I don't find all the new 
stuff better, just as I don't all the old stuff.  At least the old gear 
tends to be sturdy (once you've contained issues with the PSU) and likely 
won't suffer from electromigration in a few years' time.  It can be easier 
to repair too if a component does fail.

 NB people also fancy old cars, or boats, or trains even, not because 
they're faster, more comfortable, or have any real advantage over modern 
alternatives.

  Maciej
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Borislav Petkov 9 months ago
On May 8, 2025 4:51:27 PM GMT+02:00, "Maciej W. Rozycki" <macro@orcam.me.uk> wrote:
>On Tue, 6 May 2025, Borislav Petkov wrote:
>
>> >  Doesn't work for ongoing driver maintenance
>> 
>> Dunno, I'd concentrate my efforts on something, a *little* *bit* more modern.
>> At some point this is old rusty hw no matter from which way you look at it and
>> it might as well be left to rest in its sunset days.
>
> One doesn't exclude the other.  I do POWER9 or RISC-V stuff too.  Isn't 
>it modern enough?
>
>> What I have problem with is wasting my time maintaining old, ancient hw which
>> is not worth the electricity it needs to run. Especially if you can get
>> something orders of magnitudes better in *any* aspect you can think of, and
>> actually get some real work done.
>
> I don't want you let alone expect to waste time on anything you're not 
>interested in.  I'm trying to find a solution that saves you from that 
>while preferably keeping everyone happy enough, including myself.
>
> Real work?  I find engineering challenges enjoyable regardless of the age 
>of hardware involved and I don't want to take away anyone's daily bread 
>(including mine) by spending my free time on a project someone might have 
>commercial interest in and should pay for.  An obsolete platform is ideal 
>for this purpose.
>
> And what's better and what's not is subjective.  I don't find all the new 
>stuff better, just as I don't all the old stuff.  At least the old gear 
>tends to be sturdy (once you've contained issues with the PSU) and likely 
>won't suffer from electromigration in a few years' time.  It can be easier 
>to repair too if a component does fail.
>
> NB people also fancy old cars, or boats, or trains even, not because 
>they're faster, more comfortable, or have any real advantage over modern 
>alternatives.


This fits very well, IMO, with Linus' suggestion to support this stuff out of tree. I think this solution is the optimal one for all parties involved...

-- 
Sent from a small device: formatting sucks and brevity is inevitable.
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Maciej W. Rozycki 9 months ago
On Thu, 8 May 2025, Borislav Petkov wrote:

> > NB people also fancy old cars, or boats, or trains even, not because 
> >they're faster, more comfortable, or have any real advantage over modern 
> >alternatives.
> 
> 
> This fits very well, IMO, with Linus' suggestion to support this stuff 
> out of tree. I think this solution is the optimal one for all parties 
> involved...

 Would kernel.org git infrastructure be available for such a project?

  Maciej
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Borislav Petkov 9 months ago
On Mon, May 12, 2025 at 01:55:35PM +0100, Maciej W. Rozycki wrote:
> On Thu, 8 May 2025, Borislav Petkov wrote:
> 
> > > NB people also fancy old cars, or boats, or trains even, not because 
> > >they're faster, more comfortable, or have any real advantage over modern 
> > >alternatives.
> > 
> > 
> > This fits very well, IMO, with Linus' suggestion to support this stuff 
> > out of tree. I think this solution is the optimal one for all parties 
> > involved...
> 
>  Would kernel.org git infrastructure be available for such a project?

as in hosting your repo there?

I don't see why not:

https://korg.docs.kernel.org/accounts.html

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Maciej W. Rozycki 9 months ago
On Mon, 12 May 2025, Borislav Petkov wrote:

> >  Would kernel.org git infrastructure be available for such a project?
> 
> as in hosting your repo there?
> 
> I don't see why not:
> 
> https://korg.docs.kernel.org/accounts.html

 Thank you.  It seems it'll be tough for me though to fulfil the GPG key 
trustability requirement.  While I've used PGP/GPG since 1995, I haven't 
been active collecting signatures with my more recent keys/IDs and neither 
I have appeared in public among Linux kernel developers often enough for 
me to be identified by face over a video call.  Oh well...

  Maciej
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Linus Torvalds 9 months ago
On Mon, May 12, 2025 at 10:29 AM Maciej W. Rozycki <macro@orcam.me.uk> wrote:
>
>  Thank you.  It seems it'll be tough for me though to fulfil the GPG key
> trustability requirement.  While I've used PGP/GPG since 1995, I haven't
> been active collecting signatures with my more recent keys/IDs and neither
> I have appeared in public among Linux kernel developers often enough for
> me to be identified by face over a video call.  Oh well...

I don't think this has been insurmountable before, particularly for
anybody who has been around for as long as you have.  Even your
current email goes back to at least the beginnings of git.

If "two decades+ of active kernel development involvement using the
same email address" doesn't make you eligible for a kernel.org
account, we're doing something wrong.

                Linus
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by John Paul Adrian Glaubitz 9 months ago
Hi,

On Mon, 2025-05-12 at 19:00 -0700, Linus Torvalds wrote:
> On Mon, May 12, 2025 at 10:29 AM Maciej W. Rozycki <macro@orcam.me.uk> wrote:
> > 
> >  Thank you.  It seems it'll be tough for me though to fulfil the GPG key
> > trustability requirement.  While I've used PGP/GPG since 1995, I haven't
> > been active collecting signatures with my more recent keys/IDs and neither
> > I have appeared in public among Linux kernel developers often enough for
> > me to be identified by face over a video call.  Oh well...
> 
> I don't think this has been insurmountable before, particularly for
> anybody who has been around for as long as you have.  Even your
> current email goes back to at least the beginnings of git.
> 
> If "two decades+ of active kernel development involvement using the
> same email address" doesn't make you eligible for a kernel.org
> account, we're doing something wrong.

I agree. Maciej does a fantastic job saving old junk^W^Wretro hardware ;-).

I'm sure there should be anyone in Maciej's area that could sign his keys.

Adrian

-- 
 .''`.  John Paul Adrian Glaubitz
: :' :  Debian Developer
`. `'   Physicist
  `-    GPG: 62FF 8A75 84E0 2956 9546  0006 7426 3B37 F5B5 F913
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Maciej W. Rozycki 8 months, 4 weeks ago
On Tue, 13 May 2025, John Paul Adrian Glaubitz wrote:

> > >  Thank you.  It seems it'll be tough for me though to fulfil the GPG key
> > > trustability requirement.  While I've used PGP/GPG since 1995, I haven't
> > > been active collecting signatures with my more recent keys/IDs and neither
> > > I have appeared in public among Linux kernel developers often enough for
> > > me to be identified by face over a video call.  Oh well...
> > 
> > I don't think this has been insurmountable before, particularly for
> > anybody who has been around for as long as you have.  Even your
> > current email goes back to at least the beginnings of git.

 Hmm, a .mailmap artifact perhaps; I actually only switched to my current 
e-mail address back in 2021 once linux-mips.org has lost all the remaining 
credibility in my eyes.  There's exactly one "Patch-dusted-off-by:" commit 
using my yet earlier personal address, plus a bunch using my various old 
work addresses too.

 All the earlier work has been buried either in the linux-mips.org git 
repo, going back via conversion from CVS to:

commit 1513ff9b7899ab588401c89db0e99903dbf5f886
Author: Ralf Baechle <ralf@linux-mips.org>
Date:   Mon Nov 28 11:59:19 1994 +0000

    Import of Linus's Linux 1.1.68

(which I still do hope to fully recover and for which kernel.org seems to 
be the right ultimate haven), or in LKML and other mailing list archives.

 None of this however proves any GPG key offered is actually mine.

> > If "two decades+ of active kernel development involvement using the
> > same email address" doesn't make you eligible for a kernel.org
> > account, we're doing something wrong.
> 
> I agree. Maciej does a fantastic job saving old junk^W^Wretro hardware ;-).

 Thank you.  That makes two of us; the rest has switched to NetBSD.

> I'm sure there should be anyone in Maciej's area that could sign his keys.

 Undoubtedly, but finding someone local who has a kernel.org account and 
can actually tell I am who I claim I am will be rather tough, and trusting 
a government-issued ID alone may be questionable nowadays, as correctly 
observed in <https://korg.docs.kernel.org/accounts.html#pgp-web-of-trust>.

  Maciej
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Linus Torvalds 8 months, 4 weeks ago
On Tue, 13 May 2025 at 14:55, Maciej W. Rozycki <macro@orcam.me.uk> wrote:
>
>  Hmm, a .mailmap artifact perhaps

Ahh, indeed. I was looking at commit feea1db26e5b ("[PATCH] defxx: Use
irqreturn_t for the interrupt handler") from 2005, but yes, the raw
commit information has your linux-mips address, and it's just that
"git log" will translate it to something much newer...

But I really don't think we've ever been *so* strict about pgp keys
having all the proper pgp key signature chains. Yes, it's the normal
rule and the regular way people identify themselves, but nothing
should ever be mindlessly black-and-white.

               Linus
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by Maciej W. Rozycki 8 months, 4 weeks ago
On Tue, 13 May 2025, Linus Torvalds wrote:

> But I really don't think we've ever been *so* strict about pgp keys
> having all the proper pgp key signature chains. Yes, it's the normal
> rule and the regular way people identify themselves, but nothing
> should ever be mindlessly black-and-white.

 I agree about being reasonable.  However times are such that we need to 
be extremely vigilant.  I wish we were back in the 1990s when the worst 
threat online seemed to be unsolicited offers received via e-mail for 
various enlargement treatments; sadly not for the brain.

  Maciej
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by H. Peter Anvin 8 months, 4 weeks ago
On 5/13/25 15:02, Linus Torvalds wrote:
> On Tue, 13 May 2025 at 14:55, Maciej W. Rozycki <macro@orcam.me.uk> wrote:
>>
>>   Hmm, a .mailmap artifact perhaps
> 
> Ahh, indeed. I was looking at commit feea1db26e5b ("[PATCH] defxx: Use
> irqreturn_t for the interrupt handler") from 2005, but yes, the raw
> commit information has your linux-mips address, and it's just that
> "git log" will translate it to something much newer...
> 
> But I really don't think we've ever been *so* strict about pgp keys
> having all the proper pgp key signature chains. Yes, it's the normal
> rule and the regular way people identify themselves, but nothing
> should ever be mindlessly black-and-white.

Having the discussion with Maciej offlist.

The issue here is obviously not that Maciej is qualified to have a 
kernel.org account (I consider that to be a given), but that we need to 
avoid a "Jia Tan" incident.

	-hpa
Re: [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs
Posted by H. Peter Anvin 9 months ago
On May 12, 2025 7:00:55 PM PDT, Linus Torvalds <torvalds@linux-foundation.org> wrote:
>On Mon, May 12, 2025 at 10:29 AM Maciej W. Rozycki <macro@orcam.me.uk> wrote:
>>
>>  Thank you.  It seems it'll be tough for me though to fulfil the GPG key
>> trustability requirement.  While I've used PGP/GPG since 1995, I haven't
>> been active collecting signatures with my more recent keys/IDs and neither
>> I have appeared in public among Linux kernel developers often enough for
>> me to be identified by face over a video call.  Oh well...
>
>I don't think this has been insurmountable before, particularly for
>anybody who has been around for as long as you have.  Even your
>current email goes back to at least the beginnings of git.
>
>If "two decades+ of active kernel development involvement using the
>same email address" doesn't make you eligible for a kernel.org
>account, we're doing something wrong.
>
>                Linus
>

Yeah, we have dealt with this before :)