x86/apic changes for v2.6.40
Linus,
Please pull the latest x86-apic-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git x86-apic-for-linus
Thanks,
Ingo
------------------>
Youquan Song (1):
x86, apic: Print verbose error interrupt reason on apic=debug
arch/x86/kernel/apic/apic.c | 41 ++++++++++++++++++++++++++--------------- 1 files changed, 26 insertions(+), 15 deletions(-)
arch/x86/kernel/apic/apic.c +26 -15
@@ -1812,30 +1812,41 @@ void smp_spurious_interrupt(struct pt_regs *regs)*/ void smp_error_interrupt (struct pt_regs *regs) { -u32 v, v1; +u32 v0, v1; +u32 i =0 ; +static const char *const error_interrupt_reason[] = { +"Send CS error" ,/* APIC Error Bit 0 */ +"Receive CS error" ,/* APIC Error Bit 1 */ +"Send accept error" ,/* APIC Error Bit 2 */ +"Receive accept error" ,/* APIC Error Bit 3 */ +"Redirectable IPI" ,/* APIC Error Bit 4 */ +"Send illegal vector" ,/* APIC Error Bit 5 */ +"Received illegal vector" ,/* APIC Error Bit 6 */ +"Illegal register address" ,/* APIC Error Bit 7 */ + };exit_idle ();irq_enter ();/* First tickle the hardware, only then report what went on. -- REW */ - v =apic_read (APIC_ESR ); + v0 =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 -*/ -pr_debug ("APIC error on CPU%d: %02x(%02x)\n" , -smp_processor_id (), v , v1); +apic_printk (APIC_DEBUG ,KERN_DEBUG "APIC error on CPU%d: %02x(%02x)" , +smp_processor_id (), v0 , v1); + + v1 = v1 &0xff ; +while (v1) { +if (v1 &0x1 ) +apic_printk (APIC_DEBUG ,KERN_CONT " : %s" , error_interrupt_reason[i]); + i++; + v1 >>=1 ; + }; + +apic_printk (APIC_DEBUG ,KERN_CONT "\n" ); +irq_exit (); }