These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / arch / powerpc / sysdev / mpic_u3msi.c
index b2cef18..2cbc7e2 100644 (file)
@@ -107,15 +107,16 @@ static u64 find_u4_magic_addr(struct pci_dev *pdev, unsigned int hwirq)
 static void u3msi_teardown_msi_irqs(struct pci_dev *pdev)
 {
        struct msi_desc *entry;
+       irq_hw_number_t hwirq;
 
-        list_for_each_entry(entry, &pdev->msi_list, list) {
+       for_each_pci_msi_entry(entry, pdev) {
                if (entry->irq == NO_IRQ)
                        continue;
 
+               hwirq = virq_to_hw(entry->irq);
                irq_set_msi_desc(entry->irq, NULL);
-               msi_bitmap_free_hwirqs(&msi_mpic->msi_bitmap,
-                                      virq_to_hw(entry->irq), 1);
                irq_dispose_mapping(entry->irq);
+               msi_bitmap_free_hwirqs(&msi_mpic->msi_bitmap, hwirq, 1);
        }
 
        return;
@@ -140,7 +141,7 @@ static int u3msi_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type)
                return -ENXIO;
        }
 
-       list_for_each_entry(entry, &pdev->msi_list, list) {
+       for_each_pci_msi_entry(entry, pdev) {
                hwirq = msi_bitmap_alloc_hwirqs(&msi_mpic->msi_bitmap, 1);
                if (hwirq < 0) {
                        pr_debug("u3msi: failed allocating hwirq\n");
@@ -181,6 +182,7 @@ static int u3msi_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type)
 int mpic_u3msi_init(struct mpic *mpic)
 {
        int rc;
+       struct pci_controller *phb;
 
        rc = mpic_msi_init_allocator(mpic);
        if (rc) {
@@ -193,9 +195,11 @@ int mpic_u3msi_init(struct mpic *mpic)
        BUG_ON(msi_mpic);
        msi_mpic = mpic;
 
-       WARN_ON(ppc_md.setup_msi_irqs);
-       ppc_md.setup_msi_irqs = u3msi_setup_msi_irqs;
-       ppc_md.teardown_msi_irqs = u3msi_teardown_msi_irqs;
+       list_for_each_entry(phb, &hose_list, list_node) {
+               WARN_ON(phb->controller_ops.setup_msi_irqs);
+               phb->controller_ops.setup_msi_irqs = u3msi_setup_msi_irqs;
+               phb->controller_ops.teardown_msi_irqs = u3msi_teardown_msi_irqs;
+       }
 
        return 0;
 }