diff options
-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; |