Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

PCI: Drop "irq" param from *_restore_msi_irqs()

Change x86_msi.restore_msi_irqs(struct pci_dev *dev, int irq) to
x86_msi.restore_msi_irqs(struct pci_dev *dev).

restore_msi_irqs() restores multiple MSI-X IRQs, so param 'int irq' is
unneeded. This makes code more consistent between vm and bare metal.

Dom0 MSI-X restore code can also be optimized as XEN only has a hypercall
to restore all MSI-X vectors at one time.

Tested-by: Sucheta Chakraborty <sucheta.chakraborty@qlogic.com>
Signed-off-by: Zhenzhong Duan <zhenzhong.duan@oracle.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>

authored by

DuanZhenzhong and committed by
Bjorn Helgaas
ac8344c4 6f825b73

+21 -12
+1 -1
arch/x86/include/asm/pci.h
··· 104 104 struct msi_desc; 105 105 int native_setup_msi_irqs(struct pci_dev *dev, int nvec, int type); 106 106 void native_teardown_msi_irq(unsigned int irq); 107 - void native_restore_msi_irqs(struct pci_dev *dev, int irq); 107 + void native_restore_msi_irqs(struct pci_dev *dev); 108 108 int setup_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc, 109 109 unsigned int irq_base, unsigned int irq_offset); 110 110 #else
+1 -1
arch/x86/include/asm/x86_init.h
··· 181 181 u8 hpet_id); 182 182 void (*teardown_msi_irq)(unsigned int irq); 183 183 void (*teardown_msi_irqs)(struct pci_dev *dev); 184 - void (*restore_msi_irqs)(struct pci_dev *dev, int irq); 184 + void (*restore_msi_irqs)(struct pci_dev *dev); 185 185 int (*setup_hpet_msi)(unsigned int irq, unsigned int id); 186 186 u32 (*msi_mask_irq)(struct msi_desc *desc, u32 mask, u32 flag); 187 187 u32 (*msix_mask_irq)(struct msi_desc *desc, u32 flag);
+2 -2
arch/x86/kernel/x86_init.c
··· 136 136 x86_msi.teardown_msi_irq(irq); 137 137 } 138 138 139 - void arch_restore_msi_irqs(struct pci_dev *dev, int irq) 139 + void arch_restore_msi_irqs(struct pci_dev *dev) 140 140 { 141 - x86_msi.restore_msi_irqs(dev, irq); 141 + x86_msi.restore_msi_irqs(dev); 142 142 } 143 143 u32 arch_msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag) 144 144 {
+1 -1
arch/x86/pci/xen.c
··· 337 337 return ret; 338 338 } 339 339 340 - static void xen_initdom_restore_msi_irqs(struct pci_dev *dev, int irq) 340 + static void xen_initdom_restore_msi_irqs(struct pci_dev *dev) 341 341 { 342 342 int ret = 0; 343 343
+14 -5
drivers/pci/msi.c
··· 116 116 return default_teardown_msi_irqs(dev); 117 117 } 118 118 119 - void default_restore_msi_irqs(struct pci_dev *dev, int irq) 119 + static void default_restore_msi_irq(struct pci_dev *dev, int irq) 120 120 { 121 121 struct msi_desc *entry; 122 122 ··· 134 134 write_msi_msg(irq, &entry->msg); 135 135 } 136 136 137 - void __weak arch_restore_msi_irqs(struct pci_dev *dev, int irq) 137 + void __weak arch_restore_msi_irqs(struct pci_dev *dev) 138 138 { 139 - return default_restore_msi_irqs(dev, irq); 139 + return default_restore_msi_irqs(dev); 140 140 } 141 141 142 142 static void msi_set_enable(struct pci_dev *dev, int enable) ··· 260 260 void unmask_msi_irq(struct irq_data *data) 261 261 { 262 262 msi_set_mask_bit(data, 0); 263 + } 264 + 265 + void default_restore_msi_irqs(struct pci_dev *dev) 266 + { 267 + struct msi_desc *entry; 268 + 269 + list_for_each_entry(entry, &dev->msi_list, list) { 270 + default_restore_msi_irq(dev, entry->irq); 271 + } 263 272 } 264 273 265 274 void __read_msi_msg(struct msi_desc *entry, struct msi_msg *msg) ··· 439 430 440 431 pci_intx_for_msi(dev, 0); 441 432 msi_set_enable(dev, 0); 442 - arch_restore_msi_irqs(dev, dev->irq); 433 + arch_restore_msi_irqs(dev); 443 434 444 435 pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &control); 445 436 msi_mask_irq(entry, msi_capable_mask(control), entry->masked); ··· 464 455 control |= PCI_MSIX_FLAGS_ENABLE | PCI_MSIX_FLAGS_MASKALL; 465 456 pci_write_config_word(dev, dev->msix_cap + PCI_MSIX_FLAGS, control); 466 457 458 + arch_restore_msi_irqs(dev); 467 459 list_for_each_entry(entry, &dev->msi_list, list) { 468 - arch_restore_msi_irqs(dev, entry->irq); 469 460 msix_mask_irq(entry, entry->masked); 470 461 } 471 462
+2 -2
include/linux/msi.h
··· 60 60 int arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type); 61 61 void arch_teardown_msi_irqs(struct pci_dev *dev); 62 62 int arch_msi_check_device(struct pci_dev* dev, int nvec, int type); 63 - void arch_restore_msi_irqs(struct pci_dev *dev, int irq); 63 + void arch_restore_msi_irqs(struct pci_dev *dev); 64 64 65 65 void default_teardown_msi_irqs(struct pci_dev *dev); 66 - void default_restore_msi_irqs(struct pci_dev *dev, int irq); 66 + void default_restore_msi_irqs(struct pci_dev *dev); 67 67 u32 default_msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag); 68 68 u32 default_msix_mask_irq(struct msi_desc *desc, u32 flag); 69 69