These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / arch / powerpc / platforms / pseries / msi.c
index c8d24f9..272e9ec 100644 (file)
@@ -18,6 +18,8 @@
 #include <asm/ppc-pci.h>
 #include <asm/machdep.h>
 
+#include "pseries.h"
+
 static int query_token, change_token;
 
 #define RTAS_QUERY_FN          0
@@ -116,7 +118,7 @@ static void rtas_teardown_msi_irqs(struct pci_dev *pdev)
 {
        struct msi_desc *entry;
 
-       list_for_each_entry(entry, &pdev->msi_list, list) {
+       for_each_pci_msi_entry(entry, pdev) {
                if (entry->irq == NO_IRQ)
                        continue;
 
@@ -348,7 +350,7 @@ static int check_msix_entries(struct pci_dev *pdev)
         * So we must reject such requests. */
 
        expected = 0;
-       list_for_each_entry(entry, &pdev->msi_list, list) {
+       for_each_pci_msi_entry(entry, pdev) {
                if (entry->msi_attrib.entry_nr != expected) {
                        pr_debug("rtas_msi: bad MSI-X entries.\n");
                        return -EINVAL;
@@ -460,7 +462,7 @@ again:
        }
 
        i = 0;
-       list_for_each_entry(entry, &pdev->msi_list, list) {
+       for_each_pci_msi_entry(entry, pdev) {
                hwirq = rtas_query_irq_number(pdn, i++);
                if (hwirq < 0) {
                        pr_debug("rtas_msi: error (%d) getting hwirq\n", rc);
@@ -505,6 +507,8 @@ static void rtas_msi_pci_irq_fixup(struct pci_dev *pdev)
 
 static int rtas_msi_init(void)
 {
+       struct pci_controller *phb;
+
        query_token  = rtas_token("ibm,query-interrupt-source-number");
        change_token = rtas_token("ibm,change-msi");
 
@@ -516,9 +520,15 @@ static int rtas_msi_init(void)
 
        pr_debug("rtas_msi: Registering RTAS MSI callbacks.\n");
 
-       WARN_ON(ppc_md.setup_msi_irqs);
-       ppc_md.setup_msi_irqs = rtas_setup_msi_irqs;
-       ppc_md.teardown_msi_irqs = rtas_teardown_msi_irqs;
+       WARN_ON(pseries_pci_controller_ops.setup_msi_irqs);
+       pseries_pci_controller_ops.setup_msi_irqs = rtas_setup_msi_irqs;
+       pseries_pci_controller_ops.teardown_msi_irqs = rtas_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 = rtas_setup_msi_irqs;
+               phb->controller_ops.teardown_msi_irqs = rtas_teardown_msi_irqs;
+       }
 
        WARN_ON(ppc_md.pci_irq_fixup);
        ppc_md.pci_irq_fixup = rtas_msi_pci_irq_fixup;