diff options
-rw-r--r-- | arch/x86/pci/xen.c | 2 | ||||
-rw-r--r-- | drivers/pci/msi.c | 7 | ||||
-rw-r--r-- | include/linux/msi.h | 1 |
3 files changed, 9 insertions, 1 deletions
diff --git a/arch/x86/pci/xen.c b/arch/x86/pci/xen.c index 093f5f4272d3..5ef62ed20ba4 100644 --- a/arch/x86/pci/xen.c +++ b/arch/x86/pci/xen.c | |||
@@ -427,6 +427,7 @@ int __init pci_xen_init(void) | |||
427 | x86_msi.teardown_msi_irqs = xen_teardown_msi_irqs; | 427 | x86_msi.teardown_msi_irqs = xen_teardown_msi_irqs; |
428 | x86_msi.msi_mask_irq = xen_nop_msi_mask_irq; | 428 | x86_msi.msi_mask_irq = xen_nop_msi_mask_irq; |
429 | x86_msi.msix_mask_irq = xen_nop_msix_mask_irq; | 429 | x86_msi.msix_mask_irq = xen_nop_msix_mask_irq; |
430 | pci_msi_ignore_mask = 1; | ||
430 | #endif | 431 | #endif |
431 | return 0; | 432 | return 0; |
432 | } | 433 | } |
@@ -508,6 +509,7 @@ int __init pci_xen_initial_domain(void) | |||
508 | x86_msi.restore_msi_irqs = xen_initdom_restore_msi_irqs; | 509 | x86_msi.restore_msi_irqs = xen_initdom_restore_msi_irqs; |
509 | x86_msi.msi_mask_irq = xen_nop_msi_mask_irq; | 510 | x86_msi.msi_mask_irq = xen_nop_msi_mask_irq; |
510 | x86_msi.msix_mask_irq = xen_nop_msix_mask_irq; | 511 | x86_msi.msix_mask_irq = xen_nop_msix_mask_irq; |
512 | pci_msi_ignore_mask = 1; | ||
511 | #endif | 513 | #endif |
512 | xen_setup_acpi_sci(); | 514 | xen_setup_acpi_sci(); |
513 | __acpi_register_gsi = acpi_register_gsi_xen; | 515 | __acpi_register_gsi = acpi_register_gsi_xen; |
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index 9fab30af0e75..066c2fb9763a 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include "pci.h" | 23 | #include "pci.h" |
24 | 24 | ||
25 | static int pci_msi_enable = 1; | 25 | static int pci_msi_enable = 1; |
26 | int pci_msi_ignore_mask; | ||
26 | 27 | ||
27 | #define msix_table_size(flags) ((flags & PCI_MSIX_FLAGS_QSIZE) + 1) | 28 | #define msix_table_size(flags) ((flags & PCI_MSIX_FLAGS_QSIZE) + 1) |
28 | 29 | ||
@@ -167,7 +168,7 @@ u32 default_msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag) | |||
167 | { | 168 | { |
168 | u32 mask_bits = desc->masked; | 169 | u32 mask_bits = desc->masked; |
169 | 170 | ||
170 | if (!desc->msi_attrib.maskbit) | 171 | if (pci_msi_ignore_mask || !desc->msi_attrib.maskbit) |
171 | return 0; | 172 | return 0; |
172 | 173 | ||
173 | mask_bits &= ~mask; | 174 | mask_bits &= ~mask; |
@@ -199,6 +200,10 @@ u32 default_msix_mask_irq(struct msi_desc *desc, u32 flag) | |||
199 | u32 mask_bits = desc->masked; | 200 | u32 mask_bits = desc->masked; |
200 | unsigned offset = desc->msi_attrib.entry_nr * PCI_MSIX_ENTRY_SIZE + | 201 | unsigned offset = desc->msi_attrib.entry_nr * PCI_MSIX_ENTRY_SIZE + |
201 | PCI_MSIX_ENTRY_VECTOR_CTRL; | 202 | PCI_MSIX_ENTRY_VECTOR_CTRL; |
203 | |||
204 | if (pci_msi_ignore_mask) | ||
205 | return 0; | ||
206 | |||
202 | mask_bits &= ~PCI_MSIX_ENTRY_CTRL_MASKBIT; | 207 | mask_bits &= ~PCI_MSIX_ENTRY_CTRL_MASKBIT; |
203 | if (flag) | 208 | if (flag) |
204 | mask_bits |= PCI_MSIX_ENTRY_CTRL_MASKBIT; | 209 | mask_bits |= PCI_MSIX_ENTRY_CTRL_MASKBIT; |
diff --git a/include/linux/msi.h b/include/linux/msi.h index 44f4746d033b..86dc501a1534 100644 --- a/include/linux/msi.h +++ b/include/linux/msi.h | |||
@@ -10,6 +10,7 @@ struct msi_msg { | |||
10 | u32 data; /* 16 bits of msi message data */ | 10 | u32 data; /* 16 bits of msi message data */ |
11 | }; | 11 | }; |
12 | 12 | ||
13 | extern int pci_msi_ignore_mask; | ||
13 | /* Helper functions */ | 14 | /* Helper functions */ |
14 | struct irq_data; | 15 | struct irq_data; |
15 | struct msi_desc; | 16 | struct msi_desc; |