]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
sif: pqp: Make setup/teardown function ref sif_pqp_info directly
authorKnut Omang <knut.omang@oracle.com>
Sun, 23 Oct 2016 16:22:35 +0000 (18:22 +0200)
committerKnut Omang <knut.omang@oracle.com>
Fri, 11 Nov 2016 16:36:55 +0000 (17:36 +0100)
Take advantage of the new, cleaner and more separate PQP data structures:
Simplify/abstract pqp setup/teardown by pointing into sdev
for a direct ref to the sif_pqp_info data structure.

Orabug: 24715634

Signed-off-by: Knut Omang <knut.omang@oracle.com>
drivers/infiniband/hw/sif/sif_pqp.c

index fdbc9bf044c1921433a6ae3e5e7534ec6e2ee92d..c71b8f4dd993496150c911fad75bb79a1a630a60 100644 (file)
@@ -1075,26 +1075,27 @@ static int sif_ki_spqp_init(struct sif_dev *sdev)
        int ret = 0;
        int n = max(sif_ki_spqp_size, 0U);
        int bm_len = max(1, n/8);
+       struct sif_pqp_info *pqi = &sdev->pqi;
 
-       mutex_init(&sdev->pqi.ki_s.lock);
-       sdev->pqi.ki_s.spqp =
+       mutex_init(&pqi->ki_s.lock);
+       pqi->ki_s.spqp =
 #ifdef CONFIG_NUMA
                kmalloc_node(sizeof(struct sif_st_pqp *) * n, GFP_KERNEL | __GFP_ZERO,
                        sdev->pdev->dev.numa_node);
 #else
                kmalloc(sizeof(struct sif_st_pqp *) * n, GFP_KERNEL | __GFP_ZERO);
 #endif
-       if (!sdev->pqi.ki_s.spqp)
+       if (!pqi->ki_s.spqp)
                return -ENOMEM;
 
-       sdev->pqi.ki_s.bitmap =
+       pqi->ki_s.bitmap =
 #ifdef CONFIG_NUMA
                kmalloc_node(sizeof(ulong) * bm_len, GFP_KERNEL | __GFP_ZERO,
                        sdev->pdev->dev.numa_node);
 #else
                kmalloc(sizeof(ulong) * bm_len, GFP_KERNEL | __GFP_ZERO);
 #endif
-       if (!sdev->pqi.ki_s.bitmap) {
+       if (!pqi->ki_s.bitmap) {
                ret = -ENOMEM;
                goto bm_failed;
        }
@@ -1106,10 +1107,10 @@ static int sif_ki_spqp_init(struct sif_dev *sdev)
                        ret = PTR_ERR(spqp);
                        break;
                }
-               sdev->pqi.ki_s.spqp[i] = spqp;
+               pqi->ki_s.spqp[i] = spqp;
                spqp->index = i;
        }
-       sdev->pqi.ki_s.pool_sz = i;
+       pqi->ki_s.pool_sz = i;
        if (ret && i) {
                sif_log(sdev, SIF_INFO, "Failed to create %d INVALIDATE_KEY stencil QPs", i);
                sif_ki_spqp_fini(sdev);
@@ -1119,34 +1120,36 @@ static int sif_ki_spqp_init(struct sif_dev *sdev)
                sif_log(sdev, SIF_INIT, "Created %d INVALIDATE_KEY stencil QPs", i);
 bm_failed:
        if (ret)
-               kfree(sdev->pqi.ki_s.spqp);
+               kfree(pqi->ki_s.spqp);
        return 0;  /* Never fail on stencil PQP allocation */
 }
 
 
 static void sif_ki_spqp_fini(struct sif_dev *sdev)
 {
+       struct sif_pqp_info *pqi = &sdev->pqi;
        int i;
 
-       if (!sdev->pqi.ki_s.spqp)
+       if (!pqi->ki_s.spqp)
                return;
-       for (i = sdev->pqi.ki_s.pool_sz - 1; i >= 0; i--)
-               sif_destroy_st_pqp(sdev, sdev->pqi.ki_s.spqp[i]);
-       kfree(sdev->pqi.ki_s.bitmap);
-       kfree(sdev->pqi.ki_s.spqp);
-       sdev->pqi.ki_s.spqp = NULL;
+       for (i = pqi->ki_s.pool_sz - 1; i >= 0; i--)
+               sif_destroy_st_pqp(sdev, pqi->ki_s.spqp[i]);
+       kfree(pqi->ki_s.bitmap);
+       kfree(pqi->ki_s.spqp);
+       pqi->ki_s.spqp = NULL;
 }
 
 int sif_pqp_init(struct sif_dev *sdev)
 {
        struct sif_pqp *pqp;
+       struct sif_pqp_info *pqi = &sdev->pqi;
        struct sif_eps *es = &sdev->es[sdev->mbox_epsc];
        int i;
        int ret = 0;
        uint n_pqps = es->eqs.cnt - 2;
 
-       sdev->pqi.pqp = sif_kmalloc(sdev, sizeof(struct sif_pqp *) * n_pqps, GFP_KERNEL | __GFP_ZERO);
-       if (!sdev->pqi.pqp)
+       pqi->pqp = sif_kmalloc(sdev, sizeof(struct sif_pqp *) * n_pqps, GFP_KERNEL | __GFP_ZERO);
+       if (!pqi->pqp)
                return -ENOMEM;
 
        for (i = 0; i < n_pqps; i++) {
@@ -1161,10 +1164,10 @@ int sif_pqp_init(struct sif_dev *sdev)
                        ret = PTR_ERR(pqp);
                        goto failed;
                }
-               sdev->pqi.pqp[i] = pqp;
+               pqi->pqp[i] = pqp;
        }
-       sdev->pqi.cnt = i;
-       atomic_set(&sdev->pqi.next, 0);
+       pqi->cnt = i;
+       atomic_set(&pqi->next, 0);
 
        ret = sif_ki_spqp_init(sdev);
        if (ret)
@@ -1172,32 +1175,34 @@ int sif_pqp_init(struct sif_dev *sdev)
        return 0;
 
 failed:
-       sdev->pqi.cnt = i;
+       pqi->cnt = i;
        sif_pqp_fini(sdev);
        return ret;
 }
 
 void sif_pqp_fini(struct sif_dev *sdev)
 {
+       struct sif_pqp_info *pqi = &sdev->pqi;
+
        sif_ki_spqp_fini(sdev);
 
        /* we must maintain a consistent state of the PQP array
         * during takedown as these operations themselves
         * generate PQP requests..
         */
-       while (sdev->pqi.cnt > 0) {
-               int i = sdev->pqi.cnt - 1;
-               struct sif_pqp *pqp = sdev->pqi.pqp[i];
+       while (pqi->cnt > 0) {
+               int i = pqi->cnt - 1;
+               struct sif_pqp *pqp = pqi->pqp[i];
 
                if (i > 0) {
                        /* Remove ourselves first, except the final PQP */
-                       sdev->pqi.pqp[i] = NULL;
-                       sdev->pqi.cnt--;
+                       pqi->pqp[i] = NULL;
+                       pqi->cnt--;
                }
                sif_destroy_pqp(sdev, pqp);
                if (i == 0)
-                       sdev->pqi.cnt--;
+                       pqi->cnt--;
        }
-       kfree(sdev->pqi.pqp);
-       sdev->pqi.pqp = NULL;
+       kfree(pqi->pqp);
+       pqi->pqp = NULL;
 }