X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fmempool%2Fdpaa2%2Fdpaa2_hw_mempool.c;h=d664929088ed35f7d1346ca207ca308190dda796;hb=5518fc95427891e8bcf72f461cdaa38604226442;hp=71ae0d635cdf034cb8a0dea599d0e0b579b15fe8;hpb=6a60f7de06421db8125c5c8b6d6ab87257c09759;p=dpdk.git diff --git a/drivers/mempool/dpaa2/dpaa2_hw_mempool.c b/drivers/mempool/dpaa2/dpaa2_hw_mempool.c index 71ae0d635c..d664929088 100644 --- a/drivers/mempool/dpaa2/dpaa2_hw_mempool.c +++ b/drivers/mempool/dpaa2/dpaa2_hw_mempool.c @@ -65,7 +65,7 @@ rte_hw_mbuf_create_pool(struct rte_mempool *mp) struct dpaa2_bp_info *bp_info; struct dpbp_attr dpbp_attr; uint32_t bpid; - int ret, p_ret; + int ret; avail_dpbp = dpaa2_alloc_dpbp_dev(); @@ -78,7 +78,7 @@ rte_hw_mbuf_create_pool(struct rte_mempool *mp) ret = dpaa2_affine_qbman_swp(); if (ret) { RTE_LOG(ERR, PMD, "Failure in affining portal\n"); - return ret; + goto err1; } } @@ -86,7 +86,7 @@ rte_hw_mbuf_create_pool(struct rte_mempool *mp) if (ret != 0) { PMD_INIT_LOG(ERR, "Resource enable failure with" " err code: %d\n", ret); - return ret; + goto err1; } ret = dpbp_get_attributes(&avail_dpbp->dpbp, CMD_PRI_LOW, @@ -94,10 +94,16 @@ rte_hw_mbuf_create_pool(struct rte_mempool *mp) if (ret != 0) { PMD_INIT_LOG(ERR, "Resource read failure with" " err code: %d\n", ret); - p_ret = ret; - ret = dpbp_disable(&avail_dpbp->dpbp, CMD_PRI_LOW, - avail_dpbp->token); - return p_ret; + goto err2; + } + + bp_info = rte_malloc(NULL, + sizeof(struct dpaa2_bp_info), + RTE_CACHE_LINE_SIZE); + if (!bp_info) { + PMD_INIT_LOG(ERR, "No heap memory available for bp_info"); + ret = -ENOMEM; + goto err2; } /* Allocate the bp_list which will be added into global_bp_list */ @@ -105,7 +111,8 @@ rte_hw_mbuf_create_pool(struct rte_mempool *mp) RTE_CACHE_LINE_SIZE); if (!bp_list) { PMD_INIT_LOG(ERR, "No heap memory available"); - return -ENOMEM; + ret = -ENOMEM; + goto err3; } /* Set parameters of buffer pool list */ @@ -127,9 +134,6 @@ rte_hw_mbuf_create_pool(struct rte_mempool *mp) rte_dpaa2_bpid_info[bpid].bp_list = bp_list; rte_dpaa2_bpid_info[bpid].bpid = bpid; - bp_info = rte_malloc(NULL, - sizeof(struct dpaa2_bp_info), - RTE_CACHE_LINE_SIZE); rte_memcpy(bp_info, (void *)&rte_dpaa2_bpid_info[bpid], sizeof(struct dpaa2_bp_info)); mp->pool_data = (void *)bp_info; @@ -138,6 +142,14 @@ rte_hw_mbuf_create_pool(struct rte_mempool *mp) h_bp_list = bp_list; return 0; +err3: + rte_free(bp_info); +err2: + dpbp_disable(&avail_dpbp->dpbp, CMD_PRI_LOW, avail_dpbp->token); +err1: + dpaa2_free_dpbp_dev(avail_dpbp); + + return ret; } static void @@ -166,7 +178,7 @@ rte_hw_mbuf_free_pool(struct rte_mempool *mp) while (temp) { if (temp == bp) { prev->next = temp->next; - free(bp); + rte_free(bp); break; } prev = temp; @@ -300,7 +312,7 @@ rte_dpaa2_mbuf_alloc_bulk(struct rte_mempool *pool, /* Releasing all buffers allocated */ rte_dpaa2_mbuf_release(pool, obj_table, bpid, bp_info->meta_data_size, n); - return ret; + return -ENOBUFS; } /* assigning mbuf from the acquired objects */ for (i = 0; (i < ret) && bufs[i]; i++) {