diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-19 16:02:23 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-19 16:02:23 -0500 |
commit | 1bd12c91de35756129b8ffe28a4fe45177b86381 (patch) | |
tree | 4217aef46c19c963b44b202382beeddd3063fa5a /arch/x86 | |
parent | 3dbff0d5e8ec9e6d0834ea889d496bc724743dfd (diff) | |
parent | bc3eba60682750dd7b45ea616d65c926fc3b8be8 (diff) |
Merge branch 'x86/nuke386' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull one final 386 removal patch from Peter Anvin.
IRQ 13 FPU error handling is gone. That was not one of the proudest
moments in PC history.
* 'x86/nuke386' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86, 386 removal: Remove support for IRQ 13 FPU error reporting
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/kernel/cpu/proc.c | 7 | ||||
-rw-r--r-- | arch/x86/kernel/irqinit.c | 40 | ||||
-rw-r--r-- | arch/x86/kernel/traps.c | 6 |
3 files changed, 1 insertions, 52 deletions
diff --git a/arch/x86/kernel/cpu/proc.c b/arch/x86/kernel/cpu/proc.c index fbd895562292..3286a92e662a 100644 --- a/arch/x86/kernel/cpu/proc.c +++ b/arch/x86/kernel/cpu/proc.c | |||
@@ -26,11 +26,6 @@ static void show_cpuinfo_core(struct seq_file *m, struct cpuinfo_x86 *c, | |||
26 | #ifdef CONFIG_X86_32 | 26 | #ifdef CONFIG_X86_32 |
27 | static void show_cpuinfo_misc(struct seq_file *m, struct cpuinfo_x86 *c) | 27 | static void show_cpuinfo_misc(struct seq_file *m, struct cpuinfo_x86 *c) |
28 | { | 28 | { |
29 | /* | ||
30 | * We use exception 16 if we have hardware math and we've either seen | ||
31 | * it or the CPU claims it is internal | ||
32 | */ | ||
33 | int fpu_exception = c->hard_math && (ignore_fpu_irq || cpu_has_fpu); | ||
34 | seq_printf(m, | 29 | seq_printf(m, |
35 | "fdiv_bug\t: %s\n" | 30 | "fdiv_bug\t: %s\n" |
36 | "hlt_bug\t\t: %s\n" | 31 | "hlt_bug\t\t: %s\n" |
@@ -45,7 +40,7 @@ static void show_cpuinfo_misc(struct seq_file *m, struct cpuinfo_x86 *c) | |||
45 | c->f00f_bug ? "yes" : "no", | 40 | c->f00f_bug ? "yes" : "no", |
46 | c->coma_bug ? "yes" : "no", | 41 | c->coma_bug ? "yes" : "no", |
47 | c->hard_math ? "yes" : "no", | 42 | c->hard_math ? "yes" : "no", |
48 | fpu_exception ? "yes" : "no", | 43 | c->hard_math ? "yes" : "no", |
49 | c->cpuid_level, | 44 | c->cpuid_level, |
50 | c->wp_works_ok ? "yes" : "no"); | 45 | c->wp_works_ok ? "yes" : "no"); |
51 | } | 46 | } |
diff --git a/arch/x86/kernel/irqinit.c b/arch/x86/kernel/irqinit.c index 6e03b0d69138..7dc4e459c2b3 100644 --- a/arch/x86/kernel/irqinit.c +++ b/arch/x86/kernel/irqinit.c | |||
@@ -42,39 +42,6 @@ | |||
42 | * (these are usually mapped into the 0x30-0xff vector range) | 42 | * (these are usually mapped into the 0x30-0xff vector range) |
43 | */ | 43 | */ |
44 | 44 | ||
45 | #ifdef CONFIG_X86_32 | ||
46 | /* | ||
47 | * Note that on a 486, we don't want to do a SIGFPE on an irq13 | ||
48 | * as the irq is unreliable, and exception 16 works correctly | ||
49 | * (ie as explained in the intel literature). On a 386, you | ||
50 | * can't use exception 16 due to bad IBM design, so we have to | ||
51 | * rely on the less exact irq13. | ||
52 | * | ||
53 | * Careful.. Not only is IRQ13 unreliable, but it is also | ||
54 | * leads to races. IBM designers who came up with it should | ||
55 | * be shot. | ||
56 | */ | ||
57 | |||
58 | static irqreturn_t math_error_irq(int cpl, void *dev_id) | ||
59 | { | ||
60 | outb(0, 0xF0); | ||
61 | if (ignore_fpu_irq || !boot_cpu_data.hard_math) | ||
62 | return IRQ_NONE; | ||
63 | math_error(get_irq_regs(), 0, X86_TRAP_MF); | ||
64 | return IRQ_HANDLED; | ||
65 | } | ||
66 | |||
67 | /* | ||
68 | * New motherboards sometimes make IRQ 13 be a PCI interrupt, | ||
69 | * so allow interrupt sharing. | ||
70 | */ | ||
71 | static struct irqaction fpu_irq = { | ||
72 | .handler = math_error_irq, | ||
73 | .name = "fpu", | ||
74 | .flags = IRQF_NO_THREAD, | ||
75 | }; | ||
76 | #endif | ||
77 | |||
78 | /* | 45 | /* |
79 | * IRQ2 is cascade interrupt to second interrupt controller | 46 | * IRQ2 is cascade interrupt to second interrupt controller |
80 | */ | 47 | */ |
@@ -242,13 +209,6 @@ void __init native_init_IRQ(void) | |||
242 | setup_irq(2, &irq2); | 209 | setup_irq(2, &irq2); |
243 | 210 | ||
244 | #ifdef CONFIG_X86_32 | 211 | #ifdef CONFIG_X86_32 |
245 | /* | ||
246 | * External FPU? Set up irq13 if so, for | ||
247 | * original braindamaged IBM FERR coupling. | ||
248 | */ | ||
249 | if (boot_cpu_data.hard_math && !cpu_has_fpu) | ||
250 | setup_irq(FPU_IRQ, &fpu_irq); | ||
251 | |||
252 | irq_ctx_init(smp_processor_id()); | 212 | irq_ctx_init(smp_processor_id()); |
253 | #endif | 213 | #endif |
254 | } | 214 | } |
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index eb8586693e0b..ecffca11f4e9 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c | |||
@@ -69,9 +69,6 @@ | |||
69 | 69 | ||
70 | asmlinkage int system_call(void); | 70 | asmlinkage int system_call(void); |
71 | 71 | ||
72 | /* Do we ignore FPU interrupts ? */ | ||
73 | char ignore_fpu_irq; | ||
74 | |||
75 | /* | 72 | /* |
76 | * The IDT has to be page-aligned to simplify the Pentium | 73 | * The IDT has to be page-aligned to simplify the Pentium |
77 | * F0 0F bug workaround. | 74 | * F0 0F bug workaround. |
@@ -564,9 +561,6 @@ void math_error(struct pt_regs *regs, int error_code, int trapnr) | |||
564 | 561 | ||
565 | dotraplinkage void do_coprocessor_error(struct pt_regs *regs, long error_code) | 562 | dotraplinkage void do_coprocessor_error(struct pt_regs *regs, long error_code) |
566 | { | 563 | { |
567 | #ifdef CONFIG_X86_32 | ||
568 | ignore_fpu_irq = 1; | ||
569 | #endif | ||
570 | exception_enter(regs); | 564 | exception_enter(regs); |
571 | math_error(regs, error_code, X86_TRAP_MF); | 565 | math_error(regs, error_code, X86_TRAP_MF); |
572 | exception_exit(regs); | 566 | exception_exit(regs); |