Exception 15

Leonard N. Zubkoff (lnz@dandelion.com)
Sun, 3 Nov 1996 18:54:53 -0800


Well, wouldn't you know that I'd finally get hit by the spurious exception 15
bug today myself. Here's a new patch that ignores only exception 15.

Leonard

--- linux/arch/i386/kernel/traps.c- Sat Oct 5 04:25:51 1996
+++ linux/arch/i386/kernel/traps.c Sun Nov 3 11:19:43 1996
@@ -81,6 +81,7 @@
asmlinkage void coprocessor_error(void);
asmlinkage void reserved(void);
asmlinkage void alignment_check(void);
+asmlinkage void spurious_interrupt_bug(void);

int kstack_depth_to_print = 24;

@@ -173,8 +174,8 @@
DO_ERROR(10, SIGSEGV, "invalid TSS", invalid_TSS, current)
DO_ERROR(11, SIGBUS, "segment not present", segment_not_present, current)
DO_ERROR(12, SIGBUS, "stack segment", stack_segment, current)
-DO_ERROR(15, SIGSEGV, "reserved", reserved, current)
DO_ERROR(17, SIGSEGV, "alignment check", alignment_check, current)
+DO_ERROR(18, SIGSEGV, "reserved", reserved, current)

asmlinkage void do_general_protection(struct pt_regs * regs, long error_code)
{
@@ -258,6 +259,12 @@
math_error();
}

+asmlinkage void do_spurious_interrupt_bug(struct pt_regs * regs,
+ long error_code)
+{
+ printk("Ignoring P6 Local APIC Spurious Interrupt Bug...\n");
+}
+
/*
* 'math_state_restore()' saves the current math information in the
* old math state array, and gets the new ones from the current task
@@ -343,7 +350,7 @@
set_trap_gate(12,&stack_segment);
set_trap_gate(13,&general_protection);
set_trap_gate(14,&page_fault);
- set_trap_gate(15,&reserved);
+ set_trap_gate(15,&spurious_interrupt_bug);
set_trap_gate(16,&coprocessor_error);
set_trap_gate(17,&alignment_check);
for (i=18;i<48;i++)
--- linux/arch/i386/kernel/entry.S- Wed Jul 17 02:33:25 1996
+++ linux/arch/i386/kernel/entry.S Sun Nov 3 11:17:52 1996
@@ -503,6 +503,11 @@
pushl $ SYMBOL_NAME(do_page_fault)
jmp error_code

+ENTRY(spurious_interrupt_bug)
+ pushl $0
+ pushl $ SYMBOL_NAME(do_spurious_interrupt_bug)
+ jmp error_code
+
.data
ENTRY(sys_call_table)
.long SYMBOL_NAME(sys_setup) /* 0 */