[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-4.0-testing] x86: fix boot failure (regression from pre-4.0 IRQ handling changes)



# HG changeset patch
# User Keir Fraser <keir@xxxxxxx>
# Date 1286028622 -3600
# Node ID f7d54e1d7044a7d3836b017b0806021b1c17ac7a
# Parent  7f190f6f1f5a861383fc1a3a877ab63841c00a15
x86: fix boot failure (regression from pre-4.0 IRQ handling changes)

With the change to index irq_desc[] by IRQ rather than by vector, the
prior implicit change of the used flow handler when altering the IRQ
routing path to go through the 8259A didn't work anymore, and hence
on boards needing the ExtINT delivery workaround failed to boot.

Make make_8259A_irq() a real function again, thus allowing the flow
handler to be changed there.

Also eliminate the generally superfluous and (at least theoretically)
dangerous hard coded setting of the flow handler for IRQ0: Earlier
code should have set this already based on information coming from
ACPI/MPS, and non-standard systems may e.g. have this IRQ level
triggered.

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
Tested-by: Markus Schuster <ml@xxxxxxxxxxxxxxxxxxxx>
xen-unstable changeset:   22222:aed9fd361340
xen-unstable date:        Sat Oct 02 15:03:15 2010 +0100
---
 xen/arch/x86/i8259.c      |    6 ++++++
 xen/arch/x86/io_apic.c    |    4 ----
 xen/include/asm-x86/irq.h |    1 +
 3 files changed, 7 insertions(+), 4 deletions(-)

diff -r 7f190f6f1f5a -r f7d54e1d7044 xen/arch/x86/i8259.c
--- a/xen/arch/x86/i8259.c      Sat Oct 02 15:10:01 2010 +0100
+++ b/xen/arch/x86/i8259.c      Sat Oct 02 15:10:22 2010 +0100
@@ -367,6 +367,12 @@ void __devinit init_8259A(int auto_eoi)
     spin_unlock_irqrestore(&i8259A_lock, flags);
 }
 
+void __init make_8259A_irq(unsigned int irq)
+{
+    io_apic_irqs &= ~(1 << irq);
+    irq_to_desc(irq)->handler = &i8259A_irq_type;
+}
+
 static struct irqaction __read_mostly cascade = { no_action, "cascade", NULL};
 
 void __init init_IRQ(void)
diff -r 7f190f6f1f5a -r f7d54e1d7044 xen/arch/x86/io_apic.c
--- a/xen/arch/x86/io_apic.c    Sat Oct 02 15:10:01 2010 +0100
+++ b/xen/arch/x86/io_apic.c    Sat Oct 02 15:10:22 2010 +0100
@@ -37,9 +37,6 @@
 #include <mach_apic.h>
 #include <io_ports.h>
 #include <public/physdev.h>
-
-/* Different to Linux: our implementation can be simpler. */
-#define make_8259A_irq(irq) (io_apic_irqs &= ~(1<<(irq)))
 
 int (*ioapic_renumber_irq)(int ioapic, int irq);
 atomic_t irq_mis_count;
@@ -1929,7 +1926,6 @@ static inline void check_timer(void)
     
     irq_desc[0].depth  = 0;
     irq_desc[0].status &= ~IRQ_DISABLED;
-    irq_desc[0].handler = &ioapic_edge_type;
 
     /*
      * Subtle, code in do_timer_interrupt() expects an AEOI
diff -r 7f190f6f1f5a -r f7d54e1d7044 xen/include/asm-x86/irq.h
--- a/xen/include/asm-x86/irq.h Sat Oct 02 15:10:01 2010 +0100
+++ b/xen/include/asm-x86/irq.h Sat Oct 02 15:10:22 2010 +0100
@@ -94,6 +94,7 @@ void mask_8259A(void);
 void mask_8259A(void);
 void unmask_8259A(void);
 void init_8259A(int aeoi);
+void make_8259A_irq(unsigned int irq);
 int i8259A_suspend(void);
 int i8259A_resume(void);
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.