diff options
author | Alexey Starikovskiy <astarikovskiy@suse.de> | 2008-05-22 04:26:15 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2008-05-25 04:55:13 -0400 |
commit | aafbdf71f1d3aeffd679b1a86e1b28f71515856c (patch) | |
tree | 17fcd8490f0e3c7355459726422515f148ab2aaf /arch/x86/kernel/acpi | |
parent | 59f4519ad7ade61123e90085b0dadb2ea197bd87 (diff) |
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')
-rw-r--r-- | arch/x86/kernel/acpi/boot.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index 6170c6aeaf79..2ddfabae382b 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) | |||
1019 | for (i = 0; i < 16; i++) { | 1019 | for (i = 0; i < 16; i++) { |
1020 | int idx; | 1020 | int idx; |
1021 | 1021 | ||
1022 | mp_irqs[mp_irq_entries].mp_type = MP_INTSRC; | ||
1023 | mp_irqs[mp_irq_entries].mp_irqflag = 0; /* Conforming */ | ||
1024 | mp_irqs[mp_irq_entries].mp_srcbus = MP_ISA_BUS; | ||
1025 | mp_irqs[mp_irq_entries].mp_dstapic = mp_ioapics[ioapic].mp_apicid; | ||
1026 | |||
1022 | for (idx = 0; idx < mp_irq_entries; idx++) { | 1027 | for (idx = 0; idx < mp_irq_entries; idx++) { |
1023 | struct mp_config_intsrc *irq = mp_irqs + idx; | 1028 | struct mp_config_intsrc *irq = mp_irqs + idx; |
1024 | 1029 | ||
@@ -1039,10 +1044,6 @@ void __init mp_config_acpi_legacy_irqs(void) | |||
1039 | continue; /* IRQ already used */ | 1044 | continue; /* IRQ already used */ |
1040 | } | 1045 | } |
1041 | 1046 | ||
1042 | mp_irqs[mp_irq_entries].mp_type = MP_INTSRC; | ||
1043 | mp_irqs[mp_irq_entries].mp_irqflag = 0; /* Conforming */ | ||
1044 | mp_irqs[mp_irq_entries].mp_srcbus = MP_ISA_BUS; | ||
1045 | mp_irqs[mp_irq_entries].mp_dstapic = mp_ioapics[ioapic].mp_apicid; | ||
1046 | mp_irqs[mp_irq_entries].mp_irqtype = mp_INT; | 1047 | mp_irqs[mp_irq_entries].mp_irqtype = mp_INT; |
1047 | mp_irqs[mp_irq_entries].mp_srcbusirq = i; /* Identity mapped */ | 1048 | mp_irqs[mp_irq_entries].mp_srcbusirq = i; /* Identity mapped */ |
1048 | mp_irqs[mp_irq_entries].mp_dstirq = i; | 1049 | mp_irqs[mp_irq_entries].mp_dstirq = i; |