aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/acpi/boot.c
diff options
context:
space:
mode:
authorAlexey Starikovskiy <astarikovskiy@suse.de>2008-05-22 12:26:15 +0400
committerThomas Gleixner <tglx@linutronix.de>2008-05-25 10:55:13 +0200
commitaafbdf71f1d3aeffd679b1a86e1b28f71515856c (patch)
tree17fcd8490f0e3c7355459726422515f148ab2aaf /arch/x86/kernel/acpi/boot.c
parent59f4519ad7ade61123e90085b0dadb2ea197bd87 (diff)
downloadkernel_samsung_smdk4412-aafbdf71f1d3aeffd679b1a86e1b28f71515856c.zip
kernel_samsung_smdk4412-aafbdf71f1d3aeffd679b1a86e1b28f71515856c.tar.gz
kernel_samsung_smdk4412-aafbdf71f1d3aeffd679b1a86e1b28f71515856c.tar.bz2
x86: fix mpparse/acpi interaction
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>
Diffstat (limited to 'arch/x86/kernel/acpi/boot.c')
-rw-r--r--arch/x86/kernel/acpi/boot.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
index 6170c6a..2ddfaba 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -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;