Commit a9322f6488b432ddc1e89be88242c827c633fb63
Committed by
Ingo Molnar
1 parent
747ada36ee
Exists in
master
and in
20 other branches
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