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>
This commit is contained in:
Stefan Assmann
2008-06-11 16:35:14 +02:00
committed by Ingo Molnar
parent 747ada36ee
commit a9322f6488
4 changed files with 12 additions and 0 deletions

View File

@@ -1518,6 +1518,9 @@ and is between 256 and 4096 characters. It is defined in the file
nomsi [MSI] If the PCI_MSI kernel config parameter is nomsi [MSI] If the PCI_MSI kernel config parameter is
enabled, this kernel boot option can be used to enabled, this kernel boot option can be used to
disable the use of MSI interrupts system-wide. 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 biosirq [X86-32] Use PCI BIOS calls to get the interrupt
routing table. These calls are known to be buggy routing table. These calls are known to be buggy
on several machines and they hang the machine on several machines and they hang the machine

View File

@@ -22,6 +22,7 @@ unsigned int pci_probe = PCI_PROBE_BIOS | PCI_PROBE_CONF1 | PCI_PROBE_CONF2 |
static int pci_bf_sort; static int pci_bf_sort;
int pci_routeirq; int pci_routeirq;
int noioapicquirk;
int pcibios_last_bus = -1; int pcibios_last_bus = -1;
unsigned long pirq_table_addr; unsigned long pirq_table_addr;
struct pci_bus *pci_root_bus; struct pci_bus *pci_root_bus;
@@ -495,6 +496,9 @@ char * __devinit pcibios_setup(char *str)
} else if (!strcmp(str, "skip_isa_align")) { } else if (!strcmp(str, "skip_isa_align")) {
pci_probe |= PCI_CAN_SKIP_ISA_ALIGN; pci_probe |= PCI_CAN_SKIP_ISA_ALIGN;
return NULL; return NULL;
} else if (!strcmp(str, "noioapicquirk")) {
noioapicquirk = 1;
return NULL;
} }
return str; return str;
} }

View File

@@ -157,11 +157,15 @@ extern int sis_apic_bug;
/* 1 if "noapic" boot option passed */ /* 1 if "noapic" boot option passed */
extern int skip_ioapic_setup; extern int skip_ioapic_setup;
/* 1 if "noapic" boot option passed */
extern int noioapicquirk;
/* 1 if the timer IRQ uses the '8259A Virtual Wire' mode */ /* 1 if the timer IRQ uses the '8259A Virtual Wire' mode */
extern int timer_through_8259; extern int timer_through_8259;
static inline void disable_ioapic_setup(void) static inline void disable_ioapic_setup(void)
{ {
noioapicquirk = 1;
skip_ioapic_setup = 1; skip_ioapic_setup = 1;
} }

View File

@@ -19,6 +19,7 @@ struct pci_sysdata {
}; };
extern int pci_routeirq; extern int pci_routeirq;
extern int noioapicquirk;
/* scan a bus after allocating a pci_sysdata for it */ /* 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, extern struct pci_bus *pci_scan_bus_on_node(int busno, struct pci_ops *ops,