--- /dev/null
+From: Stefan Assmann <sassmann@suse.de>
+Subject: 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>
+---
+ Documentation/kernel-parameters.txt | 3 +++
+ arch/x86/pci/common.c | 4 ++++
+ include/asm-x86/io_apic.h | 6 ++++++
+ include/asm-x86/pci.h | 1 +
+ 4 files changed, 14 insertions(+)
+
+--- a/arch/x86/pci/common.c
++++ b/arch/x86/pci/common.c
+@@ -23,6 +23,7 @@ unsigned int pci_probe = PCI_PROBE_BIOS
+ unsigned int pci_early_dump_regs;
+ static int pci_bf_sort;
+ int pci_routeirq;
++int noioapicquirk;
+ int pcibios_last_bus = -1;
+ unsigned long pirq_table_addr;
+ struct pci_bus *pci_root_bus;
+@@ -519,6 +520,9 @@ char * __devinit pcibios_setup(char *st
+ } else if (!strcmp(str, "skip_isa_align")) {
+ pci_probe |= PCI_CAN_SKIP_ISA_ALIGN;
+ return NULL;
++ } else if (!strcmp(str, "noioapicquirk")) {
++ noioapicquirk = 1;
++ return NULL;
+ }
+ return str;
+ }
+--- a/Documentation/kernel-parameters.txt
++++ b/Documentation/kernel-parameters.txt
+@@ -1566,6 +1566,9 @@ and is between 256 and 4096 characters.
+ nomsi [MSI] If the PCI_MSI kernel config parameter is
+ enabled, this kernel boot option can be used to
+ disable the use of MSI interrupts system-wide.
++ noioapicquirk [APIC] Disable all boot interrupt quirks.
++ Safety option to keep boot IRQs enabled. This
++ should never be necessary.
+ biosirq [X86-32] Use PCI BIOS calls to get the interrupt
+ routing table. These calls are known to be buggy
+ on several machines and they hang the machine
+--- a/include/asm-x86/io_apic.h
++++ b/include/asm-x86/io_apic.h
+@@ -160,8 +160,14 @@ extern int skip_ioapic_setup;
+ /* 1 if the timer IRQ uses the '8259A Virtual Wire' mode */
+ extern int timer_through_8259;
+
++/* 1 if "noapic" boot option passed */
++extern int noioapicquirk;
++
+ static inline void disable_ioapic_setup(void)
+ {
++#ifdef CONFIG_PCI
++ noioapicquirk = 1;
++#endif
+ skip_ioapic_setup = 1;
+ }
+
+--- a/include/asm-x86/pci.h
++++ b/include/asm-x86/pci.h
+@@ -19,6 +19,7 @@ struct pci_sysdata {
+ };
+
+ extern int pci_routeirq;
++extern int noioapicquirk;
+
+ /* scan a bus after allocating a pci_sysdata for it */
+ extern struct pci_bus *pci_scan_bus_on_node(int busno, struct pci_ops *ops,