aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorStefan Assmann <sassmann@suse.de>2008-06-11 10:35:17 -0400
committerIngo Molnar <mingo@elte.hu>2008-07-08 11:50:53 -0400
commite1d3a90846b40ad3160bf4b648d36c6badad39ac (patch)
tree3c078d2b6046d90d1045efbcefe6a76a424a6f63 /include
parent426b3b8d535e3e141331dc19c40f457b997c4d6d (diff)
pci, acpi: reroute PCI interrupt to legacy boot interrupt equivalent
Some chipsets (e.g. intel 6700PXH) generate a legacy INTx when the IRQ entry in the chipset's IO-APIC is masked (as, e.g. the RT kernel does during interrupt handling). On chipsets where this INTx generation cannot be disabled, we reroute the valid interrupts to their legacy equivalent to get rid of spurious interrupts that might otherwise bring down (vital) interrupt lines through spurious interrupt detection in note_interrupt(). This patch benefited from discussions with Alexander Graf, Torsten Duwe, Ihno Krumreich, Daniel Gollub, Hannes Reinecke. The conclusions we drew and the patch itself are the authors' responsibility alone. Signed-off-by: Stefan Assmann <sassmann@suse.de> Signed-off-by: Olaf Dabrunz <od@suse.de> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include')
-rw-r--r--include/linux/pci.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/include/linux/pci.h b/include/linux/pci.h
index d18b1dd49fab..6755cf5ac109 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -117,6 +117,11 @@ enum pci_dev_flags {
117 PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = (__force pci_dev_flags_t) 1, 117 PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = (__force pci_dev_flags_t) 1,
118}; 118};
119 119
120enum pci_irq_reroute_variant {
121 INTEL_IRQ_REROUTE_VARIANT = 1,
122 MAX_IRQ_REROUTE_VARIANTS = 3
123};
124
120typedef unsigned short __bitwise pci_bus_flags_t; 125typedef unsigned short __bitwise pci_bus_flags_t;
121enum pci_bus_flags { 126enum pci_bus_flags {
122 PCI_BUS_FLAGS_NO_MSI = (__force pci_bus_flags_t) 1, 127 PCI_BUS_FLAGS_NO_MSI = (__force pci_bus_flags_t) 1,
@@ -194,6 +199,7 @@ struct pci_dev {
194 unsigned int no_d1d2:1; /* only allow d0 or d3 */ 199 unsigned int no_d1d2:1; /* only allow d0 or d3 */
195 unsigned int block_ucfg_access:1; /* userspace config space access is blocked */ 200 unsigned int block_ucfg_access:1; /* userspace config space access is blocked */
196 unsigned int broken_parity_status:1; /* Device generates false positive parity */ 201 unsigned int broken_parity_status:1; /* Device generates false positive parity */
202 unsigned int irq_reroute_variant:2; /* device needs IRQ rerouting variant */
197 unsigned int msi_enabled:1; 203 unsigned int msi_enabled:1;
198 unsigned int msix_enabled:1; 204 unsigned int msix_enabled:1;
199 unsigned int is_managed:1; 205 unsigned int is_managed:1;