]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
x86: fix mpparse/acpi interaction
authorAlexey Starikovskiy <astarikovskiy@suse.de>
Thu, 22 May 2008 08:26:15 +0000 (12:26 +0400)
committerThomas Gleixner <tglx@linutronix.de>
Sun, 25 May 2008 08:55:13 +0000 (10:55 +0200)
Sitsofe Wheeler reported boot problems on linux-next.

It looks like the same issue as found by Soeren Sandman in 7575217f656a93,
"x86: initialize all fields of mp_irqs[mp_irq_entries]".

But his fix is also not complete, as dstapic is used before it assigned.

Reported-by: Sitsofe Wheeler <sitsofe@yahoo.com>
Bisected-by: Sitsofe Wheeler <sitsofe@yahoo.com>
Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/x86/kernel/acpi/boot.c

index 6170c6aeaf797d779e4fe199c28e967e1ab6bb5b..2ddfabae382b49cc74c29addcfd5960db94e3318 100644 (file)
@@ -1019,6 +1019,11 @@ void __init mp_config_acpi_legacy_irqs(void)
        for (i = 0; i < 16; i++) {
                int idx;
 
+               mp_irqs[mp_irq_entries].mp_type = MP_INTSRC;
+               mp_irqs[mp_irq_entries].mp_irqflag = 0; /* Conforming */
+               mp_irqs[mp_irq_entries].mp_srcbus = MP_ISA_BUS;
+               mp_irqs[mp_irq_entries].mp_dstapic = mp_ioapics[ioapic].mp_apicid;
+
                for (idx = 0; idx < mp_irq_entries; idx++) {
                        struct mp_config_intsrc *irq = mp_irqs + idx;
 
@@ -1039,10 +1044,6 @@ void __init mp_config_acpi_legacy_irqs(void)
                        continue;       /* IRQ already used */
                }
 
-               mp_irqs[mp_irq_entries].mp_type = MP_INTSRC;
-               mp_irqs[mp_irq_entries].mp_irqflag = 0; /* Conforming */
-               mp_irqs[mp_irq_entries].mp_srcbus = MP_ISA_BUS;
-               mp_irqs[mp_irq_entries].mp_dstapic = mp_ioapics[ioapic].mp_apicid;
                mp_irqs[mp_irq_entries].mp_irqtype = mp_INT;
                mp_irqs[mp_irq_entries].mp_srcbusirq = i;       /* Identity mapped */
                mp_irqs[mp_irq_entries].mp_dstirq = i;