Hi,

Peter Waltenberg told me that for his system the attached patch 
should work. 

The main thing is that the printk's are removed from the "critical
path" in the apic_error_interrupt. Peter just removed them
alltogether, I just moved them to below the actual "workings" of the
routine, so that we continue to have feedback on the APIC errors.

Oh, I just created this patch. It's quite possible that it doesn't
even compile: My bp6 runs stable now, so I'm not motivated to reboot
into 2.4.0-test.

                        Roger.


diff -ur linux-2.4.0-test2.clean/arch/i386/kernel/apic.c 
linux-2.4.0-test2.bp6/arch/i386/kernel/apic.c
--- linux-2.4.0-test2.clean/arch/i386/kernel/apic.c     Sun Jul  2 11:25:53 2000
+++ linux-2.4.0-test2.bp6/arch/i386/kernel/apic.c       Tue Jul  4 08:42:09 2000
@@ -709,46 +709,26 @@
  * This interrupt should never happen with our APIC/SMP architecture
  */
 
-static spinlock_t err_lock = SPIN_LOCK_UNLOCKED;
-
 asmlinkage void smp_error_interrupt(void)
 {
-       unsigned long v;
-
-       spin_lock(&err_lock);
+       unsigned long v, v1;
 
        v = apic_read(APIC_ESR);
-       printk(KERN_INFO "APIC error interrupt on CPU#%d, should never happen.\n",
-                       smp_processor_id());
-       printk(KERN_INFO "... APIC ESR0: %08lx\n", v);
-
        apic_write(APIC_ESR, 0);
-       v |= apic_read(APIC_ESR);
-       printk(KERN_INFO "... APIC ESR1: %08lx\n", v);
-       /*
-        * Be a bit more verbose. (multiple bits can be set)
-        */
-       if (v & 0x01)
-               printk(KERN_INFO "... bit 0: APIC Send CS Error (hw problem).\n");
-       if (v & 0x02)
-               printk(KERN_INFO "... bit 1: APIC Receive CS Error (hw problem).\n");
-       if (v & 0x04)
-               printk(KERN_INFO "... bit 2: APIC Send Accept Error.\n");
-       if (v & 0x08)
-               printk(KERN_INFO "... bit 3: APIC Receive Accept Error.\n");
-       if (v & 0x10)
-               printk(KERN_INFO "... bit 4: Reserved!.\n");
-       if (v & 0x20)
-               printk(KERN_INFO "... bit 5: Send Illegal Vector (kernel bug).\n");
-       if (v & 0x40)
-               printk(KERN_INFO "... bit 6: Received Illegal Vector.\n");
-       if (v & 0x80)
-               printk(KERN_INFO "... bit 7: Illegal Register Address.\n");
-
+       v1 = apic_read(APIC_ESR);
        ack_APIC_irq();
-
        irq_err_count++;
 
-       spin_unlock(&err_lock);
+       printk (KERN_INFO, "APIC error: %02x(%02x): ", v, v1);
+       v |= v1;
+       if (v & 0x01) printk ("SEND CS, ");
+       if (v & 0x02) printk ("REC CS, ");
+       if (v & 0x04) printk ("SEND AC, ");
+       if (v & 0x08) printk ("REC AC, ");
+       if (v & 0x10) printk ("reserved, ");
+       if (v & 0x20) printk ("send illegal vec, ");
+       if (v & 0x40) printk ("rec illegal vec, ");
+       if (v & 0x80) printk ("illegal reg, ");
+       printk ("\n");
 }
 


-- 
** [EMAIL PROTECTED] ** http://www.BitWizard.nl/ ** +31-15-2137555 **
*-- BitWizard writes Linux device drivers for any device you may have! --*
*       Common sense is the collection of                                *
******  prejudices acquired by age eighteen.   -- Albert Einstein ********
--
=-          To unsubscribe, email [EMAIL PROTECTED] with the       -=
=-                body of "unsubscribe linux-abit".                 -=

Reply via email to