From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hemant Agrawal Subject: [PATCH 30/32] net/dpaa2: frame queue based dq storage alloc Date: Sun, 4 Dec 2016 23:47:25 +0530 Message-ID: <1480875447-23680-31-git-send-email-hemant.agrawal@nxp.com> References: <1480875447-23680-1-git-send-email-hemant.agrawal@nxp.com> Mime-Version: 1.0 Content-Type: text/plain Cc: , , , Hemant Agrawal To: Return-path: Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0067.outbound.protection.outlook.com [104.47.32.67]) by dpdk.org (Postfix) with ESMTP id 31681FA61 for ; Sun, 4 Dec 2016 13:44:54 +0100 (CET) In-Reply-To: <1480875447-23680-1-git-send-email-hemant.agrawal@nxp.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Signed-off-by: Hemant Agrawal --- 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 #include +#include /* DPDK Interfaces */ #include @@ -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