diff options
Diffstat (limited to 'drivers/mempool/dpaa2/dpaa2_hw_mempool.c')
-rw-r--r-- | drivers/mempool/dpaa2/dpaa2_hw_mempool.c | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/drivers/mempool/dpaa2/dpaa2_hw_mempool.c b/drivers/mempool/dpaa2/dpaa2_hw_mempool.c index 6df203fc..8bcbaa89 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 @@ -213,7 +225,7 @@ rte_dpaa2_mbuf_release(struct rte_mempool *pool __rte_unused, /* convert mbuf to buffers for the remainder */ for (i = 0; i < n ; i++) { #ifdef RTE_LIBRTE_DPAA2_USE_PHYS_IOVA - bufs[i] = (uint64_t)rte_mempool_virt2phy(pool, obj_table[i]) + bufs[i] = (uint64_t)rte_mempool_virt2iova(obj_table[i]) + meta_data_size; #else bufs[i] = (uint64_t)obj_table[i] + meta_data_size; @@ -232,7 +244,7 @@ aligned: for (i = 0; i < DPAA2_MBUF_MAX_ACQ_REL; i++) { #ifdef RTE_LIBRTE_DPAA2_USE_PHYS_IOVA bufs[i] = (uint64_t) - rte_mempool_virt2phy(pool, obj_table[n + i]) + rte_mempool_virt2iova(obj_table[n + i]) + meta_data_size; #else bufs[i] = (uint64_t)obj_table[n + i] + meta_data_size; |