Hi there,
hi Dave,
I'm running 2.5.60 and get a strange APIC error (dmesg appended).
These errors don't stop, so I tried to limit them with that
simple code below in arch/i386/kernel/apic.c to get the first
offender and to get sth. else as printk() done. It seems, that
somehow value 0x40 gets written there, which is not documented.
What effects that has for the machine - I don't know, so I didn't
test further.
I always ran 2.4.x with the "noapic" option, which is not
possible for 2.5.60.
Whats going on here?
Regards
Ingo Oeser
asmlinkage void smp_error_interrupt(void)
{
unsigned long v, v1, t_cpu = 0;
static unsigned long ov = ~0, ov1 = ~0;
static unsigned int on_cpu = 0;
irq_enter();
/* First tickle the hardware, only then report what went on. -- REW */
v = apic_read(APIC_ESR);
apic_write(APIC_ESR, 0);
v1 = apic_read(APIC_ESR);
ack_APIC_irq();
atomic_inc(&irq_err_count);
/* Here is what the APIC error bits mean:
0: Send CS error
1: Receive CS error
2: Send accept error
3: Receive accept error
4: Reserved
5: Send illegal vector
6: Received illegal vector
7: Illegal register address
*/
/* Print only, if the error changes */
/* new value? */
if (unlikely(v != ov) && unlikely(v1 != ov1))
goto print_error;
else t_cpu = 1 << smp_processor_id();
/* No seen? */
if (on_cpu & (~t_cpu)) goto print_error;
out:
irq_exit();
return;
print_error:
printk (KERN_INFO "APIC error on CPU%d: %02lx(%02lx)\n",
smp_processor_id(), v , v1);
ov1=v1; ov=v; on_cpu|=t_cpu;
mb();
goto out;
}
-- Science is what we can tell a computer. Art is everything else. --- D.E.Knuth
This archive was generated by hypermail 2b29 : Sat Feb 15 2003 - 22:00:47 EST