aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/kernel-parameters.txt3
-rw-r--r--arch/x86/pci/common.c4
-rw-r--r--include/asm-x86/io_apic.h4
-rw-r--r--include/asm-x86/pci.h1
4 files changed, 12 insertions, 0 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 795c487af8e4..1aebe9dffbaa 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -1518,6 +1518,9 @@ and is between 256 and 4096 characters. It is defined in the file
1518 nomsi [MSI] If the PCI_MSI kernel config parameter is 1518 nomsi [MSI] If the PCI_MSI kernel config parameter is
1519 enabled, this kernel boot option can be used to 1519 enabled, this kernel boot option can be used to
1520 disable the use of MSI interrupts system-wide. 1520 disable the use of MSI interrupts system-wide.
1521 noioapicquirk [APIC] Disable all boot interrupt quirks.
1522 Safety option to keep boot IRQs enabled. This
1523 should never be necessary.
1521 biosirq [X86-32] Use PCI BIOS calls to get the interrupt 1524 biosirq [X86-32] Use PCI BIOS calls to get the interrupt
1522 routing table. These calls are known to be buggy 1525 routing table. These calls are known to be buggy
1523 on several machines and they hang the machine 1526 on several machines and they hang the machine
diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c
index 940185ecaeda..bc6a101ed7ec 100644
--- a/arch/x86/pci/common.c
+++ b/arch/x86/pci/common.c
@@ -22,6 +22,7 @@ unsigned int pci_probe = PCI_PROBE_BIOS | PCI_PROBE_CONF1 | PCI_PROBE_CONF2 |
22 22
23static int pci_bf_sort; 23static int pci_bf_sort;
24int pci_routeirq; 24int pci_routeirq;
25int noioapicquirk;
25int pcibios_last_bus = -1; 26int pcibios_last_bus = -1;
26unsigned long pirq_table_addr; 27unsigned long pirq_table_addr;
27struct pci_bus *pci_root_bus; 28struct pci_bus *pci_root_bus;
@@ -495,6 +496,9 @@ char * __devinit pcibios_setup(char *str)
495 } else if (!strcmp(str, "skip_isa_align")) { 496 } else if (!strcmp(str, "skip_isa_align")) {
496 pci_probe |= PCI_CAN_SKIP_ISA_ALIGN; 497 pci_probe |= PCI_CAN_SKIP_ISA_ALIGN;
497 return NULL; 498 return NULL;
499 } else if (!strcmp(str, "noioapicquirk")) {
500 noioapicquirk = 1;
501 return NULL;
498 } 502 }
499 return str; 503 return str;
500} 504}
diff --git a/include/asm-x86/io_apic.h b/include/asm-x86/io_apic.h
index 14f82bbcb5fd..8ca0110819f4 100644
--- a/include/asm-x86/io_apic.h
+++ b/include/asm-x86/io_apic.h
@@ -157,11 +157,15 @@ extern int sis_apic_bug;
157/* 1 if "noapic" boot option passed */ 157/* 1 if "noapic" boot option passed */
158extern int skip_ioapic_setup; 158extern int skip_ioapic_setup;
159 159
160/* 1 if "noapic" boot option passed */
161extern int noioapicquirk;
162
160/* 1 if the timer IRQ uses the '8259A Virtual Wire' mode */ 163/* 1 if the timer IRQ uses the '8259A Virtual Wire' mode */
161extern int timer_through_8259; 164extern int timer_through_8259;
162 165
163static inline void disable_ioapic_setup(void) 166static inline void disable_ioapic_setup(void)
164{ 167{
168 noioapicquirk = 1;
165 skip_ioapic_setup = 1; 169 skip_ioapic_setup = 1;
166} 170}
167 171
diff --git a/include/asm-x86/pci.h b/include/asm-x86/pci.h
index 2db14cf17db8..30eec93a845e 100644
--- a/include/asm-x86/pci.h
+++ b/include/asm-x86/pci.h
@@ -19,6 +19,7 @@ struct pci_sysdata {
19}; 19};
20 20
21extern int pci_routeirq; 21extern int pci_routeirq;
22extern int noioapicquirk;
22 23
23/* scan a bus after allocating a pci_sysdata for it */ 24/* scan a bus after allocating a pci_sysdata for it */
24extern struct pci_bus *pci_scan_bus_on_node(int busno, struct pci_ops *ops, 25extern struct pci_bus *pci_scan_bus_on_node(int busno, struct pci_ops *ops,