diff options
| author | Yijing Wang <wangyijing@huawei.com> | 2014-10-26 22:44:37 -0400 |
|---|---|---|
| committer | Bjorn Helgaas <bhelgaas@google.com> | 2014-11-11 17:14:30 -0500 |
| commit | 03f56e42d03eb7d0a47e40e9ae72a3ac0afeff08 (patch) | |
| tree | 566745f2b5cfd29a9c56fe53a6449aa9f0dc6e01 | |
| parent | 38737d82f9f0168955f9944c3f8bd3bb262c7e88 (diff) | |
Revert "PCI: Add x86_msi.msi_mask_irq() and msix_mask_irq()"
The problem fixed by 0e4ccb1505a9 ("PCI: Add x86_msi.msi_mask_irq() and
msix_mask_irq()") has been fixed in a simpler way by a previous commit
("PCI/MSI: Add pci_msi_ignore_mask to prevent writes to MSI/MSI-X Mask
Bits").
The msi_mask_irq() and msix_mask_irq() x86_msi_ops added by 0e4ccb1505a9
are no longer needed, so revert the commit.
default_msi_mask_irq() and default_msix_mask_irq() were added by
0e4ccb1505a9 and are still used by s390, so keep them for now.
[bhelgaas: changelog]
Signed-off-by: Yijing Wang <wangyijing@huawei.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: David Vrabel <david.vrabel@citrix.com>
CC: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
CC: xen-devel@lists.xenproject.org
| -rw-r--r-- | arch/x86/include/asm/x86_init.h | 3 | ||||
| -rw-r--r-- | arch/x86/kernel/x86_init.c | 10 | ||||
| -rw-r--r-- | arch/x86/pci/xen.c | 13 | ||||
| -rw-r--r-- | drivers/pci/msi.c | 22 | ||||
| -rw-r--r-- | include/linux/msi.h | 6 |
5 files changed, 11 insertions, 43 deletions
diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h index e45e4da96bf1..f58a9c7a3c86 100644 --- a/arch/x86/include/asm/x86_init.h +++ b/arch/x86/include/asm/x86_init.h | |||
| @@ -172,7 +172,6 @@ struct x86_platform_ops { | |||
| 172 | 172 | ||
| 173 | struct pci_dev; | 173 | struct pci_dev; |
| 174 | struct msi_msg; | 174 | struct msi_msg; |
| 175 | struct msi_desc; | ||
| 176 | 175 | ||
| 177 | struct x86_msi_ops { | 176 | struct x86_msi_ops { |
| 178 | int (*setup_msi_irqs)(struct pci_dev *dev, int nvec, int type); | 177 | int (*setup_msi_irqs)(struct pci_dev *dev, int nvec, int type); |
| @@ -183,8 +182,6 @@ struct x86_msi_ops { | |||
| 183 | void (*teardown_msi_irqs)(struct pci_dev *dev); | 182 | void (*teardown_msi_irqs)(struct pci_dev *dev); |
| 184 | void (*restore_msi_irqs)(struct pci_dev *dev); | 183 | void (*restore_msi_irqs)(struct pci_dev *dev); |
| 185 | int (*setup_hpet_msi)(unsigned int irq, unsigned int id); | 184 | int (*setup_hpet_msi)(unsigned int irq, unsigned int id); |
| 186 | u32 (*msi_mask_irq)(struct msi_desc *desc, u32 mask, u32 flag); | ||
| 187 | u32 (*msix_mask_irq)(struct msi_desc *desc, u32 flag); | ||
| 188 | }; | 185 | }; |
| 189 | 186 | ||
| 190 | struct IO_APIC_route_entry; | 187 | struct IO_APIC_route_entry; |
diff --git a/arch/x86/kernel/x86_init.c b/arch/x86/kernel/x86_init.c index e48b674639cc..234b0722de53 100644 --- a/arch/x86/kernel/x86_init.c +++ b/arch/x86/kernel/x86_init.c | |||
| @@ -116,8 +116,6 @@ struct x86_msi_ops x86_msi = { | |||
| 116 | .teardown_msi_irqs = default_teardown_msi_irqs, | 116 | .teardown_msi_irqs = default_teardown_msi_irqs, |
| 117 | .restore_msi_irqs = default_restore_msi_irqs, | 117 | .restore_msi_irqs = default_restore_msi_irqs, |
| 118 | .setup_hpet_msi = default_setup_hpet_msi, | 118 | .setup_hpet_msi = default_setup_hpet_msi, |
| 119 | .msi_mask_irq = default_msi_mask_irq, | ||
| 120 | .msix_mask_irq = default_msix_mask_irq, | ||
| 121 | }; | 119 | }; |
| 122 | 120 | ||
| 123 | /* MSI arch specific hooks */ | 121 | /* MSI arch specific hooks */ |
| @@ -140,14 +138,6 @@ void arch_restore_msi_irqs(struct pci_dev *dev) | |||
| 140 | { | 138 | { |
| 141 | x86_msi.restore_msi_irqs(dev); | 139 | x86_msi.restore_msi_irqs(dev); |
| 142 | } | 140 | } |
| 143 | u32 arch_msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag) | ||
| 144 | { | ||
| 145 | return x86_msi.msi_mask_irq(desc, mask, flag); | ||
| 146 | } | ||
| 147 | u32 arch_msix_mask_irq(struct msi_desc *desc, u32 flag) | ||
| 148 | { | ||
| 149 | return x86_msi.msix_mask_irq(desc, flag); | ||
| 150 | } | ||
| 151 | #endif | 141 | #endif |
| 152 | 142 | ||
| 153 | struct x86_io_apic_ops x86_io_apic_ops = { | 143 | struct x86_io_apic_ops x86_io_apic_ops = { |
diff --git a/arch/x86/pci/xen.c b/arch/x86/pci/xen.c index 5ef62ed20ba4..466b978e13a5 100644 --- a/arch/x86/pci/xen.c +++ b/arch/x86/pci/xen.c | |||
| @@ -394,14 +394,7 @@ static void xen_teardown_msi_irq(unsigned int irq) | |||
| 394 | { | 394 | { |
| 395 | xen_destroy_irq(irq); | 395 | xen_destroy_irq(irq); |
| 396 | } | 396 | } |
| 397 | static u32 xen_nop_msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag) | 397 | |
| 398 | { | ||
| 399 | return 0; | ||
| 400 | } | ||
| 401 | static u32 xen_nop_msix_mask_irq(struct msi_desc *desc, u32 flag) | ||
| 402 | { | ||
| 403 | return 0; | ||
| 404 | } | ||
| 405 | #endif | 398 | #endif |
| 406 | 399 | ||
| 407 | int __init pci_xen_init(void) | 400 | int __init pci_xen_init(void) |
| @@ -425,8 +418,6 @@ int __init pci_xen_init(void) | |||
| 425 | x86_msi.setup_msi_irqs = xen_setup_msi_irqs; | 418 | x86_msi.setup_msi_irqs = xen_setup_msi_irqs; |
| 426 | x86_msi.teardown_msi_irq = xen_teardown_msi_irq; | 419 | x86_msi.teardown_msi_irq = xen_teardown_msi_irq; |
| 427 | x86_msi.teardown_msi_irqs = xen_teardown_msi_irqs; | 420 | x86_msi.teardown_msi_irqs = xen_teardown_msi_irqs; |
| 428 | x86_msi.msi_mask_irq = xen_nop_msi_mask_irq; | ||
| 429 | x86_msi.msix_mask_irq = xen_nop_msix_mask_irq; | ||
| 430 | pci_msi_ignore_mask = 1; | 421 | pci_msi_ignore_mask = 1; |
| 431 | #endif | 422 | #endif |
| 432 | return 0; | 423 | return 0; |
| @@ -507,8 +498,6 @@ int __init pci_xen_initial_domain(void) | |||
| 507 | x86_msi.setup_msi_irqs = xen_initdom_setup_msi_irqs; | 498 | x86_msi.setup_msi_irqs = xen_initdom_setup_msi_irqs; |
| 508 | x86_msi.teardown_msi_irq = xen_teardown_msi_irq; | 499 | x86_msi.teardown_msi_irq = xen_teardown_msi_irq; |
| 509 | x86_msi.restore_msi_irqs = xen_initdom_restore_msi_irqs; | 500 | x86_msi.restore_msi_irqs = xen_initdom_restore_msi_irqs; |
| 510 | x86_msi.msi_mask_irq = xen_nop_msi_mask_irq; | ||
| 511 | x86_msi.msix_mask_irq = xen_nop_msix_mask_irq; | ||
| 512 | pci_msi_ignore_mask = 1; | 501 | pci_msi_ignore_mask = 1; |
| 513 | #endif | 502 | #endif |
| 514 | xen_setup_acpi_sci(); | 503 | xen_setup_acpi_sci(); |
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index 066c2fb9763a..d9a92cf6a6d6 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c | |||
| @@ -164,7 +164,7 @@ static inline __attribute_const__ u32 msi_mask(unsigned x) | |||
| 164 | * reliably as devices without an INTx disable bit will then generate a | 164 | * reliably as devices without an INTx disable bit will then generate a |
| 165 | * level IRQ which will never be cleared. | 165 | * level IRQ which will never be cleared. |
| 166 | */ | 166 | */ |
| 167 | u32 default_msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag) | 167 | u32 __msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag) |
| 168 | { | 168 | { |
| 169 | u32 mask_bits = desc->masked; | 169 | u32 mask_bits = desc->masked; |
| 170 | 170 | ||
| @@ -178,14 +178,9 @@ u32 default_msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag) | |||
| 178 | return mask_bits; | 178 | return mask_bits; |
| 179 | } | 179 | } |
| 180 | 180 | ||
| 181 | __weak u32 arch_msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag) | ||
| 182 | { | ||
| 183 | return default_msi_mask_irq(desc, mask, flag); | ||
| 184 | } | ||
| 185 | |||
| 186 | static void msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag) | 181 | static void msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag) |
| 187 | { | 182 | { |
| 188 | desc->masked = arch_msi_mask_irq(desc, mask, flag); | 183 | desc->masked = __msi_mask_irq(desc, mask, flag); |
| 189 | } | 184 | } |
| 190 | 185 | ||
| 191 | /* | 186 | /* |
| @@ -195,7 +190,7 @@ static void msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag) | |||
| 195 | * file. This saves a few milliseconds when initialising devices with lots | 190 | * file. This saves a few milliseconds when initialising devices with lots |
| 196 | * of MSI-X interrupts. | 191 | * of MSI-X interrupts. |
| 197 | */ | 192 | */ |
| 198 | u32 default_msix_mask_irq(struct msi_desc *desc, u32 flag) | 193 | u32 __msix_mask_irq(struct msi_desc *desc, u32 flag) |
| 199 | { | 194 | { |
| 200 | u32 mask_bits = desc->masked; | 195 | u32 mask_bits = desc->masked; |
| 201 | unsigned offset = desc->msi_attrib.entry_nr * PCI_MSIX_ENTRY_SIZE + | 196 | unsigned offset = desc->msi_attrib.entry_nr * PCI_MSIX_ENTRY_SIZE + |
| @@ -212,14 +207,9 @@ u32 default_msix_mask_irq(struct msi_desc *desc, u32 flag) | |||
| 212 | return mask_bits; | 207 | return mask_bits; |
| 213 | } | 208 | } |
| 214 | 209 | ||
| 215 | __weak u32 arch_msix_mask_irq(struct msi_desc *desc, u32 flag) | ||
| 216 | { | ||
| 217 | return default_msix_mask_irq(desc, flag); | ||
| 218 | } | ||
| 219 | |||
| 220 | static void msix_mask_irq(struct msi_desc *desc, u32 flag) | 210 | static void msix_mask_irq(struct msi_desc *desc, u32 flag) |
| 221 | { | 211 | { |
| 222 | desc->masked = arch_msix_mask_irq(desc, flag); | 212 | desc->masked = __msix_mask_irq(desc, flag); |
| 223 | } | 213 | } |
| 224 | 214 | ||
| 225 | static void msi_set_mask_bit(struct irq_data *data, u32 flag) | 215 | static void msi_set_mask_bit(struct irq_data *data, u32 flag) |
| @@ -874,7 +864,7 @@ void pci_msi_shutdown(struct pci_dev *dev) | |||
| 874 | /* Return the device with MSI unmasked as initial states */ | 864 | /* Return the device with MSI unmasked as initial states */ |
| 875 | mask = msi_mask(desc->msi_attrib.multi_cap); | 865 | mask = msi_mask(desc->msi_attrib.multi_cap); |
| 876 | /* Keep cached state to be restored */ | 866 | /* Keep cached state to be restored */ |
| 877 | arch_msi_mask_irq(desc, mask, ~mask); | 867 | __msi_mask_irq(desc, mask, ~mask); |
| 878 | 868 | ||
| 879 | /* Restore dev->irq to its default pin-assertion irq */ | 869 | /* Restore dev->irq to its default pin-assertion irq */ |
| 880 | dev->irq = desc->msi_attrib.default_irq; | 870 | dev->irq = desc->msi_attrib.default_irq; |
| @@ -972,7 +962,7 @@ void pci_msix_shutdown(struct pci_dev *dev) | |||
| 972 | /* Return the device with MSI-X masked as initial states */ | 962 | /* Return the device with MSI-X masked as initial states */ |
| 973 | list_for_each_entry(entry, &dev->msi_list, list) { | 963 | list_for_each_entry(entry, &dev->msi_list, list) { |
| 974 | /* Keep cached states to be restored */ | 964 | /* Keep cached states to be restored */ |
| 975 | arch_msix_mask_irq(entry, 1); | 965 | __msix_mask_irq(entry, 1); |
| 976 | } | 966 | } |
| 977 | 967 | ||
| 978 | msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_ENABLE, 0); | 968 | msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_ENABLE, 0); |
diff --git a/include/linux/msi.h b/include/linux/msi.h index 86dc501a1534..f6630a53be70 100644 --- a/include/linux/msi.h +++ b/include/linux/msi.h | |||
| @@ -22,6 +22,8 @@ void __write_msi_msg(struct msi_desc *entry, struct msi_msg *msg); | |||
| 22 | void read_msi_msg(unsigned int irq, struct msi_msg *msg); | 22 | void read_msi_msg(unsigned int irq, struct msi_msg *msg); |
| 23 | void get_cached_msi_msg(unsigned int irq, struct msi_msg *msg); | 23 | void get_cached_msi_msg(unsigned int irq, struct msi_msg *msg); |
| 24 | void write_msi_msg(unsigned int irq, struct msi_msg *msg); | 24 | void write_msi_msg(unsigned int irq, struct msi_msg *msg); |
| 25 | u32 __msix_mask_irq(struct msi_desc *desc, u32 flag); | ||
| 26 | u32 __msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag); | ||
| 25 | 27 | ||
| 26 | struct msi_desc { | 28 | struct msi_desc { |
| 27 | struct { | 29 | struct { |
| @@ -62,8 +64,8 @@ void arch_restore_msi_irqs(struct pci_dev *dev); | |||
| 62 | 64 | ||
| 63 | void default_teardown_msi_irqs(struct pci_dev *dev); | 65 | void default_teardown_msi_irqs(struct pci_dev *dev); |
| 64 | void default_restore_msi_irqs(struct pci_dev *dev); | 66 | void default_restore_msi_irqs(struct pci_dev *dev); |
| 65 | u32 default_msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag); | 67 | #define default_msi_mask_irq __msi_mask_irq |
| 66 | u32 default_msix_mask_irq(struct msi_desc *desc, u32 flag); | 68 | #define default_msix_mask_irq __msix_mask_irq |
| 67 | 69 | ||
| 68 | struct msi_chip { | 70 | struct msi_chip { |
| 69 | struct module *owner; | 71 | struct module *owner; |
