aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/include/asm/x86_init.h3
-rw-r--r--arch/x86/kernel/x86_init.c10
-rw-r--r--arch/x86/pci/xen.c13
-rw-r--r--drivers/pci/msi.c22
-rw-r--r--include/linux/msi.h6
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
173struct pci_dev; 173struct pci_dev;
174struct msi_msg; 174struct msi_msg;
175struct msi_desc;
176 175
177struct x86_msi_ops { 176struct 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
190struct IO_APIC_route_entry; 187struct 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}
143u32 arch_msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag)
144{
145 return x86_msi.msi_mask_irq(desc, mask, flag);
146}
147u32 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
153struct x86_io_apic_ops x86_io_apic_ops = { 143struct 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}
397static u32 xen_nop_msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag) 397
398{
399 return 0;
400}
401static u32 xen_nop_msix_mask_irq(struct msi_desc *desc, u32 flag)
402{
403 return 0;
404}
405#endif 398#endif
406 399
407int __init pci_xen_init(void) 400int __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 */
167u32 default_msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag) 167u32 __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
186static void msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag) 181static 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 */
198u32 default_msix_mask_irq(struct msi_desc *desc, u32 flag) 193u32 __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
220static void msix_mask_irq(struct msi_desc *desc, u32 flag) 210static 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
225static void msi_set_mask_bit(struct irq_data *data, u32 flag) 215static 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);
22void read_msi_msg(unsigned int irq, struct msi_msg *msg); 22void read_msi_msg(unsigned int irq, struct msi_msg *msg);
23void get_cached_msi_msg(unsigned int irq, struct msi_msg *msg); 23void get_cached_msi_msg(unsigned int irq, struct msi_msg *msg);
24void write_msi_msg(unsigned int irq, struct msi_msg *msg); 24void write_msi_msg(unsigned int irq, struct msi_msg *msg);
25u32 __msix_mask_irq(struct msi_desc *desc, u32 flag);
26u32 __msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag);
25 27
26struct msi_desc { 28struct msi_desc {
27 struct { 29 struct {
@@ -62,8 +64,8 @@ void arch_restore_msi_irqs(struct pci_dev *dev);
62 64
63void default_teardown_msi_irqs(struct pci_dev *dev); 65void default_teardown_msi_irqs(struct pci_dev *dev);
64void default_restore_msi_irqs(struct pci_dev *dev); 66void default_restore_msi_irqs(struct pci_dev *dev);
65u32 default_msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag); 67#define default_msi_mask_irq __msi_mask_irq
66u32 default_msix_mask_irq(struct msi_desc *desc, u32 flag); 68#define default_msix_mask_irq __msix_mask_irq
67 69
68struct msi_chip { 70struct msi_chip {
69 struct module *owner; 71 struct module *owner;