aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Assmann <sassmann@suse.de>2008-06-11 10:35:15 -0400
committerIngo Molnar <mingo@elte.hu>2008-07-08 11:50:51 -0400
commit9197979b518573999d52d9e85bce1680682ed85c (patch)
tree056a03ab39e68e7533988f35d73a7b0cb9e99622
parenta9322f6488b432ddc1e89be88242c827c633fb63 (diff)
x86, pci: introduce pci=ioapicreroute kernel cmdline option
Introduce pci=ioapicreroute kernel cmdline option to enable rerouting of boot interrupts to the primary io-apic. Signed-off-by: Stefan Assmann <sassmann@suse.de> Signed-off-by: Olaf Dabrunz <od@suse.de> Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--Documentation/kernel-parameters.txt4
-rw-r--r--arch/x86/pci/common.c5
-rw-r--r--include/asm-x86/io_apic.h4
-rw-r--r--include/asm-x86/pci.h1
4 files changed, 14 insertions, 0 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 1aebe9dffbaa..df262b3c3d6e 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -1521,6 +1521,10 @@ and is between 256 and 4096 characters. It is defined in the file
1521 noioapicquirk [APIC] Disable all boot interrupt quirks. 1521 noioapicquirk [APIC] Disable all boot interrupt quirks.
1522 Safety option to keep boot IRQs enabled. This 1522 Safety option to keep boot IRQs enabled. This
1523 should never be necessary. 1523 should never be necessary.
1524 ioapicreroute [APIC] Enable rerouting of boot IRQs to the
1525 primary IO-APIC for bridges that cannot disable
1526 boot IRQs. This fixes a source of spurious IRQs
1527 when the system masks IRQs.
1524 biosirq [X86-32] Use PCI BIOS calls to get the interrupt 1528 biosirq [X86-32] Use PCI BIOS calls to get the interrupt
1525 routing table. These calls are known to be buggy 1529 routing table. These calls are known to be buggy
1526 on several machines and they hang the machine 1530 on several machines and they hang the machine
diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c
index bc6a101ed7ec..0a9eaa736d94 100644
--- a/arch/x86/pci/common.c
+++ b/arch/x86/pci/common.c
@@ -23,6 +23,7 @@ unsigned int pci_probe = PCI_PROBE_BIOS | PCI_PROBE_CONF1 | PCI_PROBE_CONF2 |
23static int pci_bf_sort; 23static int pci_bf_sort;
24int pci_routeirq; 24int pci_routeirq;
25int noioapicquirk; 25int noioapicquirk;
26int noioapicreroute = 1;
26int pcibios_last_bus = -1; 27int pcibios_last_bus = -1;
27unsigned long pirq_table_addr; 28unsigned long pirq_table_addr;
28struct pci_bus *pci_root_bus; 29struct pci_bus *pci_root_bus;
@@ -499,6 +500,10 @@ char * __devinit pcibios_setup(char *str)
499 } else if (!strcmp(str, "noioapicquirk")) { 500 } else if (!strcmp(str, "noioapicquirk")) {
500 noioapicquirk = 1; 501 noioapicquirk = 1;
501 return NULL; 502 return NULL;
503 } else if (!strcmp(str, "ioapicreroute")) {
504 if (noioapicreroute != -1)
505 noioapicreroute = 0;
506 return NULL;
502 } 507 }
503 return str; 508 return str;
504} 509}
diff --git a/include/asm-x86/io_apic.h b/include/asm-x86/io_apic.h
index 8ca0110819f4..a39670ae17df 100644
--- a/include/asm-x86/io_apic.h
+++ b/include/asm-x86/io_apic.h
@@ -160,12 +160,16 @@ extern int skip_ioapic_setup;
160/* 1 if "noapic" boot option passed */ 160/* 1 if "noapic" boot option passed */
161extern int noioapicquirk; 161extern int noioapicquirk;
162 162
163/* -1 if "noapic" boot option passed */
164extern int noioapicreroute;
165
163/* 1 if the timer IRQ uses the '8259A Virtual Wire' mode */ 166/* 1 if the timer IRQ uses the '8259A Virtual Wire' mode */
164extern int timer_through_8259; 167extern int timer_through_8259;
165 168
166static inline void disable_ioapic_setup(void) 169static inline void disable_ioapic_setup(void)
167{ 170{
168 noioapicquirk = 1; 171 noioapicquirk = 1;
172 noioapicreroute = -1;
169 skip_ioapic_setup = 1; 173 skip_ioapic_setup = 1;
170} 174}
171 175
diff --git a/include/asm-x86/pci.h b/include/asm-x86/pci.h
index 30eec93a845e..52a29f7668ef 100644
--- a/include/asm-x86/pci.h
+++ b/include/asm-x86/pci.h
@@ -20,6 +20,7 @@ struct pci_sysdata {
20 20
21extern int pci_routeirq; 21extern int pci_routeirq;
22extern int noioapicquirk; 22extern int noioapicquirk;
23extern int ioapicreroute;
23 24
24/* scan a bus after allocating a pci_sysdata for it */ 25/* scan a bus after allocating a pci_sysdata for it */
25extern struct pci_bus *pci_scan_bus_on_node(int busno, struct pci_ops *ops, 26extern struct pci_bus *pci_scan_bus_on_node(int busno, struct pci_ops *ops,