]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
sparc: add pci_sun4v_msiq_tear_down
authorDave Kleikamp <dave.kleikamp@oracle.com>
Wed, 21 May 2014 18:37:15 +0000 (13:37 -0500)
committerDave Kleikamp <dave.kleikamp@oracle.com>
Mon, 18 Apr 2016 16:42:46 +0000 (11:42 -0500)
original patch by Bob Picco

Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
Cc: Bob Picco <bob.picco@oracle.com>
arch/sparc/kernel/pci_sun4v.c

index d2fe57dad433ea9409c52a3aaf8ae9efa2113032..c0810ebb8934ef42136f2b479c32cfeb079dec25 100644 (file)
@@ -745,6 +745,21 @@ static int pci_sun4v_msi_teardown(struct pci_pbm_info *pbm, unsigned long msi)
        return 0;
 }
 
+static void pci_sun4v_msiq_tear_down(struct pci_pbm_info *pbm, int msiqid)
+{
+       unsigned long err, ret1, ret2;
+
+       err = pci_sun4v_msiq_info(pbm->devhandle, msiqid, &ret1, &ret2);
+       if (err || !ret2)
+               goto out;
+
+       err = pci_sun4v_msiq_setvalid(pbm->devhandle, msiqid, HV_MSIQ_INVALID);
+       if (err)
+               pr_err("%s: failed to set INVALID queue %lu\n", __func__, err);
+out:
+       return;
+}
+
 static int pci_sun4v_msiq_alloc(struct pci_pbm_info *pbm)
 {
        unsigned long q_size, alloc_size, pages, order;
@@ -766,6 +781,8 @@ static int pci_sun4v_msiq_alloc(struct pci_pbm_info *pbm)
                unsigned long err, base = __pa(pages + (i * q_size));
                unsigned long ret1, ret2;
 
+               pci_sun4v_msiq_tear_down(pbm, pbm->msiq_first + i);
+
                err = pci_sun4v_msiq_conf(pbm->devhandle,
                                          pbm->msiq_first + i,
                                          base, pbm->msiq_ent_count);