lkml.org 
[lkml]   [1996]   [Nov]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: 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 */
\
 
 \ /
  Last update: 2005-03-22 13:38    [W:0.037 / U:0.280 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site