]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
x86/fpu: Remove MATH_EMULATION and related glue code
authorIngo Molnar <mingo@kernel.org>
Thu, 15 May 2025 08:28:27 +0000 (10:28 +0200)
committerIngo Molnar <mingo@kernel.org>
Fri, 8 May 2026 05:33:03 +0000 (07:33 +0200)
Now that support for 486 CPUs is gone upstream, remove
the x86 mathemu code integration.

Signed-off-by: Ingo Molnar <mingo@kernel.org>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: https://lore.kernel.org/r/20250425084216.3913608-9-mingo@kernel.org
arch/x86/Kconfig
arch/x86/Kconfig.cpufeatures
arch/x86/Makefile
arch/x86/include/asm/fpu/api.h
arch/x86/kernel/fpu/core.c
arch/x86/kernel/fpu/init.c
arch/x86/kernel/traps.c

index 68654712e9fc213ea5880377e1af408475c952e7..f67af156fc1953c81cfc4c66970c8651d7cda462 100644 (file)
@@ -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 <file:arch/x86/math-emu/README>.
-
-         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
index 532cbc276b1e31c3b8627faa1c28bc9a8d371dfb..89cbf8f572aeec02b13866714aa6bfd220dc1c79 100644 (file)
@@ -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
index 46fec0b08487abf931bba0aa5e1d7d8b0a49f011..96bfa137a82b9614498a5b7820d7f570f50f7a0a 100644 (file)
@@ -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
index cd6f194a912bf082f2b79af342326fccd67f0224..90c63fe19c0fb8b1904c8f5d22d19cda6ddd3f2d 100644 (file)
@@ -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);
index 608983806fd7fb685d6cc4f39620b1106d10e956..584fb9913be4270313684ecf2fcd6083d46397df 100644 (file)
@@ -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))
index ff988b9ea39f0daddab94535d2b7d4052cc1ea34..0d33c217b71c1a5fce45d20b7510b2710345957f 100644 (file)
@@ -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
 }
 
 /*
index 52177bce08025798362782e8c2eda84664268290..30aa8369957e9214aab14816ba3e69d7390bb307 100644 (file)
@@ -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. */