aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/i8259.c
diff options
context:
space:
mode:
authorKeir Fraser <keir@xen.org>2010-10-02 15:03:15 +0100
committerKeir Fraser <keir@xen.org>2010-10-02 15:03:15 +0100
commita2e6c0b846955726b29acf983b567dfdefe2a368 (patch)
treef8cb601f43fb4656dc001c68012eee1e3e8db570 /xen/arch/x86/i8259.c
parentb8febbaa0a4b120b3ea8a609fafd7aaeff19c031 (diff)
downloadxen-a2e6c0b846955726b29acf983b567dfdefe2a368.tar.gz
xen-a2e6c0b846955726b29acf983b567dfdefe2a368.tar.bz2
xen-a2e6c0b846955726b29acf983b567dfdefe2a368.zip
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@novell.com> Tested-by: Markus Schuster <ml@markus.schuster.name>
Diffstat (limited to 'xen/arch/x86/i8259.c')
-rw-r--r--xen/arch/x86/i8259.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/xen/arch/x86/i8259.c b/xen/arch/x86/i8259.c
index 75e47ece60..7e4722c627 100644
--- a/xen/arch/x86/i8259.c
+++ b/xen/arch/x86/i8259.c
@@ -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)