| From 9e6866686bdf2dcf3aeb0838076237ede532dcc8 Mon Sep 17 00:00:00 2001 |
| From: Bjorn Helgaas <bhelgaas@google.com> |
| Date: Sun, 25 Sep 2011 15:29:00 -0600 |
| Subject: x86/mpparse: Account for bus types other than ISA and PCI |
| |
| From: Bjorn Helgaas <bhelgaas@google.com> |
| |
| commit 9e6866686bdf2dcf3aeb0838076237ede532dcc8 upstream. |
| |
| In commit f8924e770e04 ("x86: unify mp_bus_info"), the 32-bit |
| and 64-bit versions of MP_bus_info were rearranged to match each |
| other better. Unfortunately it introduced a regression: prior |
| to that change we used to always set the mp_bus_not_pci bit, |
| then clear it if we found a PCI bus. After it, we set |
| mp_bus_not_pci for ISA buses, clear it for PCI buses, and leave |
| it alone otherwise. |
| |
| In the cases of ISA and PCI, there's not much difference. But |
| ISA is not the only non-PCI bus, so it's better to always set |
| mp_bus_not_pci and clear it only for PCI. |
| |
| Without this change, Dan's Dell PowerEdge 4200 panics on boot |
| with a log indicating interrupt routing trouble unless the |
| "noapic" option is supplied. With this change, the machine |
| boots reliably without "noapic". |
| |
| Fixes http://bugs.debian.org/586494 |
| |
| Reported-bisected-and-tested-by: Dan McGrath <troubledaemon@gmail.com> |
| Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> |
| Cc: Dan McGrath <troubledaemon@gmail.com> |
| Cc: Alexey Starikovskiy <aystarik@gmail.com> |
| [jrnieder@gmail.com: clarified commit message] |
| Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> |
| Link: http://lkml.kernel.org/r/20111122215000.GA9151@elie.hsd1.il.comcast.net |
| Signed-off-by: Ingo Molnar <mingo@elte.hu> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| arch/x86/kernel/mpparse.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/arch/x86/kernel/mpparse.c |
| +++ b/arch/x86/kernel/mpparse.c |
| @@ -94,8 +94,8 @@ static void __init MP_bus_info(struct mp |
| } |
| #endif |
| |
| + set_bit(m->busid, mp_bus_not_pci); |
| if (strncmp(str, BUSTYPE_ISA, sizeof(BUSTYPE_ISA) - 1) == 0) { |
| - set_bit(m->busid, mp_bus_not_pci); |
| #if defined(CONFIG_EISA) || defined(CONFIG_MCA) |
| mp_bus_id_to_type[m->busid] = MP_BUS_ISA; |
| #endif |