Messages in this thread Patch in this message | | | Date | Tue, 5 Nov 1996 15:19:37 -0800 | From | "Leonard N. Zubkoff" <> | Subject | Re: Kernel oops in ethernet code |
| |
Date: Mon, 4 Nov 96 22:19:39 EST From: David Ngo <dngo@icarus.rutgers.edu>
I'm running a Micron PPro 200 with an Adaptec 2940UW, a generic NE2000 card, and 2.1.7. I've been getting oopses when I transfer a significant amount of data over the network. This problem seems kernel independent - it's appeared on kernels ranging from 2.0.18 to 2.1.7. It also doesn't seem to matter what other options I choose for the kernel.
Here's raw output from klogd and output from ksymoops:
klogd:
Nov 4 19:24:11 daedalus kernel: reserved: 0000
>>EIP: c01aa9fe <ei_start_xmit+122/2f4>
Code: c01aa9fe <ei_start_xmit+122/2f4> outb %al,$0x80 Code: c01aaa00 <ei_start_xmit+124/2f4> movb 0x1a(%ebp),%al Code: c01aaa03 <ei_start_xmit+127/2f4> testb %al,%al Code: c01aaa05 <ei_start_xmit+129/2f4> je c01aaa30 <ei_start_xmit+154/2f4> Code: c01aaa07 <ei_start_xmit+12b/2f4> movl 0x0(%ebp),%edx Code: c01aaa0a <ei_start_xmit+12e/2f4> movl %edx,0x18(%esp,1) Code: c01aaa0e <ei_start_xmit+132/2f4> pushl %edx Code: c01aaa0f <ei_start_xmit+133/2f4> pushl $0x90003098 Code: c01aaa14 <ei_start_xmit+138/2f4> nop Code: c01aaa15 <ei_start_xmit+139/2f4> nop
When it rains it pours... Try the following patch. You'll get kernel messages when the trap occurs, but the system won't be harmed.
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 */
| |