Bugzilla – Attachment 66049 Details for
Bug 145366
Hard Lockup on Amilo 1667G
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
IDP Log In
|
Forgot Password
[patch]
Don't ack apic when disabled
bad-apic-ack (text/plain), 3.01 KB, created by
Andreas Kleen
on 2006-02-01 15:48:44 UTC
(
hide
)
Description:
Don't ack apic when disabled
Filename:
MIME Type:
Creator:
Andreas Kleen
Created:
2006-02-01 15:48:44 UTC
Size:
3.01 KB
patch
obsolete
>i386/x86-64: Don't ack the APIC for bad interrupts when the APIC is not enabled > >It's bad juju to touch the APIC when it hasn't been enabled. >I also moved ack_bad_irq for x86-64 out of line following i386. > >Cc: mingo@elte.hu > >Index: linux/arch/x86_64/kernel/apic.c >=================================================================== >--- linux.orig/arch/x86_64/kernel/apic.c >+++ linux/arch/x86_64/kernel/apic.c >@@ -71,6 +71,26 @@ int get_maxlvt(void) > return maxlvt; > } > >+/* >+ * 'what should we do if we get a hw irq event on an illegal vector'. >+ * each architecture has to answer this themselves. >+ */ >+void ack_bad_irq(unsigned int irq) >+{ >+ printk("unexpected IRQ trap at vector %02x\n", irq); >+ /* >+ * Currently unexpected vectors happen only on SMP and APIC. >+ * We _must_ ack these because every local APIC has only N >+ * irq slots per priority level, and a 'hanging, unacked' IRQ >+ * holds up an irq slot - in excessive cases (when multiple >+ * unexpected vectors occur) that might lock up the APIC >+ * completely. >+ * But don't ack when the APIC is disabled. -AK >+ */ >+ if (!disable_apic) >+ ack_APIC_irq(); >+} >+ > void clear_local_APIC(void) > { > int maxlvt; >Index: linux/include/asm-x86_64/hardirq.h >=================================================================== >--- linux.orig/include/asm-x86_64/hardirq.h >+++ linux/include/asm-x86_64/hardirq.h >@@ -16,23 +16,6 @@ > #define set_softirq_pending(x) write_pda(__softirq_pending, (x)) > #define or_softirq_pending(x) or_pda(__softirq_pending, (x)) > >-/* >- * 'what should we do if we get a hw irq event on an illegal vector'. >- * each architecture has to answer this themselves. >- */ >-static inline void ack_bad_irq(unsigned int irq) >-{ >- printk("unexpected IRQ trap at vector %02x\n", irq); >-#ifdef CONFIG_X86_LOCAL_APIC >- /* >- * Currently unexpected vectors happen only on SMP and APIC. >- * We _must_ ack these because every local APIC has only N >- * irq slots per priority level, and a 'hanging, unacked' IRQ >- * holds up an irq slot - in excessive cases (when multiple >- * unexpected vectors occur) that might lock up the APIC >- * completely. >- */ >- ack_APIC_irq(); >-#endif >-} >+extern void ack_bad_irq(unsigned int irq); >+ > #endif /* __ASM_HARDIRQ_H */ >Index: linux/arch/i386/kernel/apic.c >=================================================================== >--- linux.orig/arch/i386/kernel/apic.c >+++ linux/arch/i386/kernel/apic.c >@@ -75,8 +75,10 @@ void ack_bad_irq(unsigned int irq) > * holds up an irq slot - in excessive cases (when multiple > * unexpected vectors occur) that might lock up the APIC > * completely. >+ * But only ack when the APIC is enabled -AK > */ >- ack_APIC_irq(); >+ if (!cpu_has_apic) >+ ack_APIC_irq(); > } > > void __init apic_intr_init(void) >@@ -1303,6 +1305,7 @@ int __init APIC_init_uniprocessor (void) > if (!cpu_has_apic && APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid])) { > printk(KERN_ERR "BIOS bug, local APIC #%d not detected!...\n", > boot_cpu_physical_apicid); >+ clear_bit(X86_FEATURE_APIC, boot_cpu_data.x86_capability); > return -1; > } >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
Actions:
View
|
Diff
Attachments on
bug 145366
:
64869
|
64870
|
64872
|
64876
|
65543
|
65544
|
65796
| 66049 |
66440
|
66441
|
66442