]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
arch/sparc: Fix indexing msi_msiqid_table and msi_irq_table
authorBabu Moger <babu.moger@oracle.com>
Fri, 13 Jan 2017 17:49:23 +0000 (09:49 -0800)
committerChuck Anderson <chuck.anderson@oracle.com>
Thu, 9 Mar 2017 03:30:08 +0000 (19:30 -0800)
Orabug: 25391918

Couple of indexing fixes.
1. Fix indexing pbm->msi_msiqid_table. It is initialized
   based off of pbm->msi_first(not pbm->msiq_first as previously done).
   Here is how it is initialized(Look at in sparc64_setup_msi_irq)
   pbm->msi_msiqid_table[msi - pbm->msi_first] = msiqid;

2. In set_related_affinity, we dont need to subtract msi_first as
   the loop is indexed from 0 to size of the table.

(cherry picked from uek2 commit 57d31847c9f2011314de8ea98c06616f91c5dbb8)

Signed-off-by: Babu Moger <babu.moger@oracle.com>
Tested-by: Dmitry Klochkov <dmitry.klochkov@oracle.com>
Signed-off-by: Allen Pais <allen.pais@oracle.com>
arch/sparc/kernel/pci_msi.c

index d971685351cf8a1b5f9d12ebd416d0e647a2e88b..a97367f0b7d47959d200e9fbe6928127bd96f7e9 100644 (file)
@@ -120,7 +120,7 @@ static void set_related_affinity(struct pci_pbm_info *pbm, unsigned int msiqid,
                        unsigned int irq;
                        struct irq_desc *desc;
 
-                       irq = pbm->msi_irq_table[msi - pbm->msiq_first];
+                       irq = pbm->msi_irq_table[msi];
                        if (irq == oirq)
                                continue;
 
@@ -143,7 +143,7 @@ static int irq_set_msi_affinity(struct irq_data *data,
        struct pci_dev *pdev = msi_desc->dev;
        struct pci_pbm_info *pbm = pdev->dev.archdata.host_controller;
 
-       msiqid = pbm->msi_msiqid_table[msi_desc->msg.data - pbm->msiq_first];
+       msiqid = pbm->msi_msiqid_table[msi_desc->msg.data - pbm->msi_first];
        msiq_irq = pbm->msiqid_irq_table[msiqid];
 
        mdesc = irq_to_desc(msiq_irq);
@@ -170,7 +170,7 @@ static void irq_print_msi_chip(struct irq_data *data, struct seq_file *p)
        struct pci_dev *pdev = msi_desc->dev;
        struct pci_pbm_info *pbm = pdev->dev.archdata.host_controller;
 
-       msiqid = pbm->msi_msiqid_table[msi_desc->msg.data - pbm->msiq_first];
+       msiqid = pbm->msi_msiqid_table[msi_desc->msg.data - pbm->msi_first];
        msiq_irq = pbm->msiqid_irq_table[msiqid];
 
        seq_printf(p, "MSIQ:%d", msiq_irq);