x86/math-emu: Limit MATH_EMULATION to 486SX compatibles
The FPU emulation code is old and fragile in places, try to limit its use to builds for CPUs that actually use it. As far as I can tell, this is only true for i486sx compatibles, including the Cyrix 486SLC, AMD Am486SX and ÉLAN SC410, UMC U5S amd DM&P VortexSX86, all of which were relatively short-lived and got replaced with i486DX compatible processors soon after introduction, though some of the embedded versions remained available much longer. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Borislav Petkov <bp@suse.de> Reviewed-by: Kees Cook <keescook@chromium.org> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Bill Metzenthen <billm@melbpc.org.au> Cc: Ingo Molnar <mingo@redhat.com> Cc: Masahiro Yamada <yamada.masahiro@socionext.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: x86-ml <x86@kernel.org> Link: https://lkml.kernel.org/r/20191001142344.1274185-2-arnd@arndb.de
This commit is contained in:
parent
e6b44ce192
commit
87d6021b81
|
@ -1751,7 +1751,7 @@ config X86_RESERVE_LOW
|
||||||
config MATH_EMULATION
|
config MATH_EMULATION
|
||||||
bool
|
bool
|
||||||
depends on MODIFY_LDT_SYSCALL
|
depends on MODIFY_LDT_SYSCALL
|
||||||
prompt "Math emulation" if X86_32
|
prompt "Math emulation" if X86_32 && (M486SX || MELAN)
|
||||||
---help---
|
---help---
|
||||||
Linux can emulate a math coprocessor (used for floating point
|
Linux can emulate a math coprocessor (used for floating point
|
||||||
operations) if you don't have one. 486DX and Pentium processors have
|
operations) if you don't have one. 486DX and Pentium processors have
|
||||||
|
|
|
@ -50,12 +50,19 @@ choice
|
||||||
See each option's help text for additional details. If you don't know
|
See each option's help text for additional details. If you don't know
|
||||||
what to do, choose "486".
|
what to do, choose "486".
|
||||||
|
|
||||||
|
config M486SX
|
||||||
|
bool "486SX"
|
||||||
|
depends on X86_32
|
||||||
|
---help---
|
||||||
|
Select this for an 486-class CPU without an FPU such as
|
||||||
|
AMD/Cyrix/IBM/Intel SL/SLC/SLC2/SLC3/SX/SX2 and UMC U5S.
|
||||||
|
|
||||||
config M486
|
config M486
|
||||||
bool "486"
|
bool "486DX"
|
||||||
depends on X86_32
|
depends on X86_32
|
||||||
---help---
|
---help---
|
||||||
Select this for an 486-class CPU such as AMD/Cyrix/IBM/Intel
|
Select this for an 486-class CPU such as AMD/Cyrix/IBM/Intel
|
||||||
486DX/DX2/DX4 or SL/SLC/SLC2/SLC3/SX/SX2 and UMC U5D or U5S.
|
486DX/DX2/DX4 and UMC U5D.
|
||||||
|
|
||||||
config M586
|
config M586
|
||||||
bool "586/K5/5x86/6x86/6x86MX"
|
bool "586/K5/5x86/6x86/6x86MX"
|
||||||
|
@ -312,20 +319,20 @@ config X86_L1_CACHE_SHIFT
|
||||||
int
|
int
|
||||||
default "7" if MPENTIUM4 || MPSC
|
default "7" if MPENTIUM4 || MPSC
|
||||||
default "6" if MK7 || MK8 || MPENTIUMM || MCORE2 || MATOM || MVIAC7 || X86_GENERIC || GENERIC_CPU
|
default "6" if MK7 || MK8 || MPENTIUMM || MCORE2 || MATOM || MVIAC7 || X86_GENERIC || GENERIC_CPU
|
||||||
default "4" if MELAN || M486 || MGEODEGX1
|
default "4" if MELAN || M486SX || M486 || MGEODEGX1
|
||||||
default "5" if MWINCHIP3D || MWINCHIPC6 || MCRUSOE || MEFFICEON || MCYRIXIII || MK6 || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || M586 || MVIAC3_2 || MGEODE_LX
|
default "5" if MWINCHIP3D || MWINCHIPC6 || MCRUSOE || MEFFICEON || MCYRIXIII || MK6 || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || M586 || MVIAC3_2 || MGEODE_LX
|
||||||
|
|
||||||
config X86_F00F_BUG
|
config X86_F00F_BUG
|
||||||
def_bool y
|
def_bool y
|
||||||
depends on M586MMX || M586TSC || M586 || M486
|
depends on M586MMX || M586TSC || M586 || M486SX || M486
|
||||||
|
|
||||||
config X86_INVD_BUG
|
config X86_INVD_BUG
|
||||||
def_bool y
|
def_bool y
|
||||||
depends on M486
|
depends on M486SX || M486
|
||||||
|
|
||||||
config X86_ALIGNMENT_16
|
config X86_ALIGNMENT_16
|
||||||
def_bool y
|
def_bool y
|
||||||
depends on MWINCHIP3D || MWINCHIPC6 || MCYRIXIII || MELAN || MK6 || M586MMX || M586TSC || M586 || M486 || MVIAC3_2 || MGEODEGX1
|
depends on MWINCHIP3D || MWINCHIPC6 || MCYRIXIII || MELAN || MK6 || M586MMX || M586TSC || M586 || M486SX || M486 || MVIAC3_2 || MGEODEGX1
|
||||||
|
|
||||||
config X86_INTEL_USERCOPY
|
config X86_INTEL_USERCOPY
|
||||||
def_bool y
|
def_bool y
|
||||||
|
@ -378,7 +385,7 @@ config X86_MINIMUM_CPU_FAMILY
|
||||||
|
|
||||||
config X86_DEBUGCTLMSR
|
config X86_DEBUGCTLMSR
|
||||||
def_bool y
|
def_bool y
|
||||||
depends on !(MK6 || MWINCHIPC6 || MWINCHIP3D || MCYRIXIII || M586MMX || M586TSC || M586 || M486) && !UML
|
depends on !(MK6 || MWINCHIPC6 || MWINCHIP3D || MCYRIXIII || M586MMX || M586TSC || M586 || M486SX || M486) && !UML
|
||||||
|
|
||||||
menuconfig PROCESSOR_SELECT
|
menuconfig PROCESSOR_SELECT
|
||||||
bool "Supported processor vendors" if EXPERT
|
bool "Supported processor vendors" if EXPERT
|
||||||
|
@ -402,7 +409,7 @@ config CPU_SUP_INTEL
|
||||||
config CPU_SUP_CYRIX_32
|
config CPU_SUP_CYRIX_32
|
||||||
default y
|
default y
|
||||||
bool "Support Cyrix processors" if PROCESSOR_SELECT
|
bool "Support Cyrix processors" if PROCESSOR_SELECT
|
||||||
depends on M486 || M586 || M586TSC || M586MMX || (EXPERT && !64BIT)
|
depends on M486SX || M486 || M586 || M586TSC || M586MMX || (EXPERT && !64BIT)
|
||||||
---help---
|
---help---
|
||||||
This enables detection, tunings and quirks for Cyrix processors
|
This enables detection, tunings and quirks for Cyrix processors
|
||||||
|
|
||||||
|
@ -470,7 +477,7 @@ config CPU_SUP_TRANSMETA_32
|
||||||
config CPU_SUP_UMC_32
|
config CPU_SUP_UMC_32
|
||||||
default y
|
default y
|
||||||
bool "Support UMC processors" if PROCESSOR_SELECT
|
bool "Support UMC processors" if PROCESSOR_SELECT
|
||||||
depends on M486 || (EXPERT && !64BIT)
|
depends on M486SX || M486 || (EXPERT && !64BIT)
|
||||||
---help---
|
---help---
|
||||||
This enables detection, tunings and quirks for UMC processors
|
This enables detection, tunings and quirks for UMC processors
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ else
|
||||||
tune = $(call cc-option,-mcpu=$(1),$(2))
|
tune = $(call cc-option,-mcpu=$(1),$(2))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
cflags-$(CONFIG_M486SX) += -march=i486
|
||||||
cflags-$(CONFIG_M486) += -march=i486
|
cflags-$(CONFIG_M486) += -march=i486
|
||||||
cflags-$(CONFIG_M586) += -march=i586
|
cflags-$(CONFIG_M586) += -march=i586
|
||||||
cflags-$(CONFIG_M586TSC) += -march=i586
|
cflags-$(CONFIG_M586TSC) += -march=i586
|
||||||
|
|
|
@ -15,6 +15,8 @@ struct mod_arch_specific {
|
||||||
|
|
||||||
#ifdef CONFIG_X86_64
|
#ifdef CONFIG_X86_64
|
||||||
/* X86_64 does not define MODULE_PROC_FAMILY */
|
/* X86_64 does not define MODULE_PROC_FAMILY */
|
||||||
|
#elif defined CONFIG_M486SX
|
||||||
|
#define MODULE_PROC_FAMILY "486SX "
|
||||||
#elif defined CONFIG_M486
|
#elif defined CONFIG_M486
|
||||||
#define MODULE_PROC_FAMILY "486 "
|
#define MODULE_PROC_FAMILY "486 "
|
||||||
#elif defined CONFIG_M586
|
#elif defined CONFIG_M586
|
||||||
|
|
Loading…
Reference in New Issue