bus/fslmc: handle portal allocation failure
authorHemant Agrawal <hemant.agrawal@nxp.com>
Tue, 7 Jul 2020 09:22:21 +0000 (14:52 +0530)
committerFerruh Yigit <ferruh.yigit@intel.com>
Sat, 11 Jul 2020 04:18:52 +0000 (06:18 +0200)
Add the error handling on failure.

Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
drivers/bus/fslmc/portal/dpaa2_hw_dpio.c

index 47ae727..5a12ff3 100644 (file)
@@ -284,8 +284,10 @@ static struct dpaa2_dpio_dev *dpaa2_get_qbman_swp(void)
                if (dpio_dev && rte_atomic16_test_and_set(&dpio_dev->ref_count))
                        break;
        }
-       if (!dpio_dev)
+       if (!dpio_dev) {
+               DPAA2_BUS_ERR("No software portal resource left");
                return NULL;
+       }
 
        DPAA2_BUS_DEBUG("New Portal %p (%d) affined thread - %lu",
                        dpio_dev, dpio_dev->index, syscall(SYS_gettid));
@@ -293,6 +295,7 @@ static struct dpaa2_dpio_dev *dpaa2_get_qbman_swp(void)
        ret = dpaa2_configure_stashing(dpio_dev);
        if (ret) {
                DPAA2_BUS_ERR("dpaa2_configure_stashing failed");
+               rte_atomic16_clear(&dpio_dev->ref_count);
                return NULL;
        }
 
@@ -316,7 +319,7 @@ dpaa2_affine_qbman_swp(void)
        if (!RTE_PER_LCORE(_dpaa2_io).dpio_dev) {
                dpio_dev = dpaa2_get_qbman_swp();
                if (!dpio_dev) {
-                       DPAA2_BUS_ERR("No software portal resource left");
+                       DPAA2_BUS_ERR("Error in software portal allocation");
                        return -1;
                }
                RTE_PER_LCORE(_dpaa2_io).dpio_dev = dpio_dev;
@@ -338,7 +341,7 @@ dpaa2_affine_qbman_ethrx_swp(void)
        if (!RTE_PER_LCORE(_dpaa2_io).ethrx_dpio_dev) {
                dpio_dev = dpaa2_get_qbman_swp();
                if (!dpio_dev) {
-                       DPAA2_BUS_ERR("No software portal resource left");
+                       DPAA2_BUS_ERR("Error in software portal allocation");
                        return -1;
                }
                RTE_PER_LCORE(_dpaa2_io).ethrx_dpio_dev = dpio_dev;