Commit a9322f6488b432ddc1e89be88242c827c633fb63

Authored by Stefan Assmann
Committed by Ingo Molnar
1 parent 747ada36ee

x86, pci: introduce pci=noioapicquirk kernel cmdline option

Introduce pci=noioapicquirk kernel cmdline option to disable all boot
interrupt quirks

Signed-off-by: Stefan Assmann <sassmann@suse.de>
Signed-off-by: Olaf Dabrunz <od@suse.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>

Showing 4 changed files with 12 additions and 0 deletions Side-by-side Diff

Documentation/kernel-parameters.txt
... ... @@ -1518,6 +1518,9 @@
1518 1518 nomsi [MSI] If the PCI_MSI kernel config parameter is
1519 1519 enabled, this kernel boot option can be used to
1520 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 1524 biosirq [X86-32] Use PCI BIOS calls to get the interrupt
1522 1525 routing table. These calls are known to be buggy
1523 1526 on several machines and they hang the machine
arch/x86/pci/common.c
... ... @@ -22,6 +22,7 @@
22 22  
23 23 static int pci_bf_sort;
24 24 int pci_routeirq;
  25 +int noioapicquirk;
25 26 int pcibios_last_bus = -1;
26 27 unsigned long pirq_table_addr;
27 28 struct pci_bus *pci_root_bus;
... ... @@ -494,6 +495,9 @@
494 495 return NULL;
495 496 } else if (!strcmp(str, "skip_isa_align")) {
496 497 pci_probe |= PCI_CAN_SKIP_ISA_ALIGN;
  498 + return NULL;
  499 + } else if (!strcmp(str, "noioapicquirk")) {
  500 + noioapicquirk = 1;
497 501 return NULL;
498 502 }
499 503 return str;
include/asm-x86/io_apic.h
... ... @@ -157,11 +157,15 @@
157 157 /* 1 if "noapic" boot option passed */
158 158 extern int skip_ioapic_setup;
159 159  
  160 +/* 1 if "noapic" boot option passed */
  161 +extern int noioapicquirk;
  162 +
160 163 /* 1 if the timer IRQ uses the '8259A Virtual Wire' mode */
161 164 extern int timer_through_8259;
162 165  
163 166 static inline void disable_ioapic_setup(void)
164 167 {
  168 + noioapicquirk = 1;
165 169 skip_ioapic_setup = 1;
166 170 }
167 171  
include/asm-x86/pci.h
... ... @@ -19,6 +19,7 @@
19 19 };
20 20  
21 21 extern int pci_routeirq;
  22 +extern int noioapicquirk;
22 23  
23 24 /* scan a bus after allocating a pci_sysdata for it */
24 25 extern struct pci_bus *pci_scan_bus_on_node(int busno, struct pci_ops *ops,