From: Ingo Molnar Date: Thu, 15 May 2025 08:28:27 +0000 (+0200) Subject: x86/fpu: Remove MATH_EMULATION and related glue code X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=ab05214025ee2af262591cd48df17883648bdb1a;p=thirdparty%2Fkernel%2Flinux.git x86/fpu: Remove MATH_EMULATION and related glue code Now that support for 486 CPUs is gone upstream, remove the x86 mathemu code integration. Signed-off-by: Ingo Molnar Reviewed-by: Arnd Bergmann Acked-by: Dave Hansen Cc: Linus Torvalds Link: https://lore.kernel.org/r/20250425084216.3913608-9-mingo@kernel.org --- diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 68654712e9fc2..f67af156fc195 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -1633,33 +1633,6 @@ config X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK Set whether the default state of memory_corruption_check is on or off. -config MATH_EMULATION - bool - depends on MODIFY_LDT_SYSCALL - prompt "Math emulation" if X86_32 && (M486SX || MELAN) - help - Linux can emulate a math coprocessor (used for floating point - operations) if you don't have one. 486DX and Pentium processors have - a math coprocessor built in, 486SX and 386 do not, unless you added - a 487DX or 387, respectively. (The messages during boot time can - give you some hints here ["man dmesg"].) Everyone needs either a - coprocessor or this emulation. - - If you don't have a math coprocessor, you need to say Y here; if you - say Y here even though you have a coprocessor, the coprocessor will - be used nevertheless. (This behavior can be changed with the kernel - command line option "no387", which comes handy if your coprocessor - is broken. Try "man bootparam" or see the documentation of your boot - loader (lilo or loadlin) about how to pass options to the kernel at - boot time.) This means that it is a good idea to say Y here if you - intend to use this kernel on different machines. - - More information about the internals of the Linux math coprocessor - emulation can be found in . - - If you are not sure, say Y; apart from resulting in a 66 KB bigger - kernel, it won't hurt. - config MTRR def_bool y prompt "MTRR (Memory Type Range Register) support" if EXPERT diff --git a/arch/x86/Kconfig.cpufeatures b/arch/x86/Kconfig.cpufeatures index 532cbc276b1e3..89cbf8f572aee 100644 --- a/arch/x86/Kconfig.cpufeatures +++ b/arch/x86/Kconfig.cpufeatures @@ -70,7 +70,6 @@ config X86_REQUIRED_FEATURE_UP config X86_REQUIRED_FEATURE_FPU def_bool y - depends on !MATH_EMULATION config X86_REQUIRED_FEATURE_PAE def_bool y diff --git a/arch/x86/Makefile b/arch/x86/Makefile index 46fec0b08487a..96bfa137a82b9 100644 --- a/arch/x86/Makefile +++ b/arch/x86/Makefile @@ -276,7 +276,6 @@ archprepare: $(cpufeaturemasks.hdr) libs-y += arch/x86/lib/ # drivers-y are linked after core-y -drivers-$(CONFIG_MATH_EMULATION) += arch/x86/math-emu/ drivers-$(CONFIG_PCI) += arch/x86/pci/ # suspend and hibernation support diff --git a/arch/x86/include/asm/fpu/api.h b/arch/x86/include/asm/fpu/api.h index cd6f194a912bf..90c63fe19c0fb 100644 --- a/arch/x86/include/asm/fpu/api.h +++ b/arch/x86/include/asm/fpu/api.h @@ -119,12 +119,6 @@ extern void fpu__init_system(void); extern void fpu__init_check_bugs(void); extern void fpu__resume_cpu(void); -#ifdef CONFIG_MATH_EMULATION -extern void fpstate_init_soft(struct swregs_state *soft); -#else -static inline void fpstate_init_soft(struct swregs_state *soft) {} -#endif - /* State tracking */ DECLARE_PER_CPU(bool, kernel_fpu_allowed); DECLARE_PER_CPU(struct fpu *, fpu_fpregs_owner_ctx); diff --git a/arch/x86/kernel/fpu/core.c b/arch/x86/kernel/fpu/core.c index 608983806fd7f..584fb9913be42 100644 --- a/arch/x86/kernel/fpu/core.c +++ b/arch/x86/kernel/fpu/core.c @@ -558,11 +558,6 @@ static inline void fpstate_init_fstate(struct fpstate *fpstate) */ void fpstate_init_user(struct fpstate *fpstate) { - if (!cpu_feature_enabled(X86_FEATURE_FPU)) { - fpstate_init_soft(&fpstate->regs.soft); - return; - } - xstate_init_xcomp_bv(&fpstate->regs.xsave, fpstate->xfeatures); if (cpu_feature_enabled(X86_FEATURE_FXSR)) diff --git a/arch/x86/kernel/fpu/init.c b/arch/x86/kernel/fpu/init.c index ff988b9ea39f0..0d33c217b71c1 100644 --- a/arch/x86/kernel/fpu/init.c +++ b/arch/x86/kernel/fpu/init.c @@ -36,12 +36,7 @@ static void fpu__init_cpu_generic(void) write_cr0(cr0); /* Flush out any pending x87 state: */ -#ifdef CONFIG_MATH_EMULATION - if (!boot_cpu_has(X86_FEATURE_FPU)) - ; - else -#endif - asm volatile ("fninit"); + asm volatile ("fninit"); } /* @@ -86,13 +81,11 @@ static void __init fpu__init_system_early_generic(void) setup_clear_cpu_cap(X86_FEATURE_FPU); } -#ifndef CONFIG_MATH_EMULATION if (!test_cpu_cap(&boot_cpu_data, X86_FEATURE_FPU)) { pr_emerg("x86/fpu: Giving up, no FPU found and no math emulation present\n"); for (;;) asm volatile("hlt"); } -#endif } /* diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index 52177bce08025..30aa8369957e9 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c @@ -1543,20 +1543,6 @@ DEFINE_IDTENTRY(exc_device_not_available) if (handle_xfd_event(regs)) return; -#ifdef CONFIG_MATH_EMULATION - if (!boot_cpu_has(X86_FEATURE_FPU) && (cr0 & X86_CR0_EM)) { - struct math_emu_info info = { }; - - cond_local_irq_enable(regs); - - info.regs = regs; - math_emulate(&info); - - cond_local_irq_disable(regs); - return; - } -#endif - /* This should not happen. */ if (WARN(cr0 & X86_CR0_TS, "CR0.TS was set")) { /* Try to fix it up and carry on. */