Signed-off-by: Hemant Agrawal <hemant.agra...@nxp.com> --- drivers/net/dpaa2/base/dpaa2_hw_dpio.c | 32 ++++++++++++++++++++++++++++++++ drivers/net/dpaa2/base/dpaa2_hw_dpio.h | 8 ++++++++ drivers/net/dpaa2/dpaa2_ethdev.c | 7 +++---- 3 files changed, 43 insertions(+), 4 deletions(-)
diff --git a/drivers/net/dpaa2/base/dpaa2_hw_dpio.c b/drivers/net/dpaa2/base/dpaa2_hw_dpio.c index 3b8f87d..38fa858 100644 --- a/drivers/net/dpaa2/base/dpaa2_hw_dpio.c +++ b/drivers/net/dpaa2/base/dpaa2_hw_dpio.c @@ -479,3 +479,35 @@ static inline struct dpaa2_dpio_dev *dpaa2_get_qbman_swp(void) return 0; } + +void +dpaa2_free_dq_storage(struct queue_storage_info_t *q_storage) +{ + int i = 0; + + for (i = 0; i < NUM_DQS_PER_QUEUE; i++) { + if (q_storage->dq_storage[i]) + rte_free(q_storage->dq_storage[i]); + } +} + +int +dpaa2_alloc_dq_storage(struct queue_storage_info_t *q_storage) +{ + int i = 0; + + for (i = 0; i < NUM_DQS_PER_QUEUE; i++) { + q_storage->dq_storage[i] = rte_malloc(NULL, + DPAA2_DQRR_RING_SIZE * sizeof(struct qbman_result), + RTE_CACHE_LINE_SIZE); + if (!q_storage->dq_storage[i]) + goto fail; + } + return 0; +fail: + i -= 1; + while (i >= 0) + rte_free(q_storage->dq_storage[i]); + + return -1; +} diff --git a/drivers/net/dpaa2/base/dpaa2_hw_dpio.h b/drivers/net/dpaa2/base/dpaa2_hw_dpio.h index 8480ce3..ccf2428 100644 --- a/drivers/net/dpaa2/base/dpaa2_hw_dpio.h +++ b/drivers/net/dpaa2/base/dpaa2_hw_dpio.h @@ -65,4 +65,12 @@ int dpaa2_create_dpio_device(struct dpaa2_vfio_device *vdev, struct vfio_device_info *obj_info, int object_id); +/* allocate memory for FQ - dq storage */ +int +dpaa2_alloc_dq_storage(struct queue_storage_info_t *q_storage); + +/* free memory for FQ- dq storage */ +void +dpaa2_free_dq_storage(struct queue_storage_info_t *q_storage); + #endif /* _DPAA2_HW_DPIO_H_ */ diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c index 2603a08..1a25f07 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.c +++ b/drivers/net/dpaa2/dpaa2_ethdev.c @@ -51,6 +51,7 @@ #include <base/dpaa2_hw_dpbp.h> #include <base/dpaa2_hw_dpni.h> +#include <base/dpaa2_hw_dpio.h> /* DPDK Interfaces */ #include <dpaa2_ethdev.h> @@ -122,9 +123,7 @@ memset(dpaa2_q->q_storage, 0, sizeof(struct queue_storage_info_t)); - dpaa2_q->q_storage->dq_storage[0] = rte_malloc(NULL, - DPAA2_DQRR_RING_SIZE * sizeof(struct qbman_result), - RTE_CACHE_LINE_SIZE); + dpaa2_alloc_dq_storage(dpaa2_q->q_storage); } for (i = 0; i < priv->nb_tx_queues; i++) { @@ -148,7 +147,7 @@ mc_q = priv->rx_vq[0]; while (i >= 0) { dpaa2_q = (struct dpaa2_queue *)priv->rx_vq[i]; - rte_free(dpaa2_q->q_storage->dq_storage[0]); + dpaa2_free_dq_storage(dpaa2_q->q_storage); rte_free(dpaa2_q->q_storage); priv->rx_vq[i--] = NULL; } -- 1.9.1