Hi Nipun,

Apologies for delay in review. 2 quick comments inline.

> -----Original Message-----
> From: Nipun Gupta
> Sent: Saturday, April 7, 2018 8:04 PM
> To: tho...@monjalon.net; Hemant Agrawal <hemant.agra...@nxp.com>;
> Shreyansh Jain <shreyansh.j...@nxp.com>
> Cc: dev@dpdk.org; Nipun Gupta <nipun.gu...@nxp.com>
> Subject: [PATCH v2 3/9] bus/fslmc: keep Tx queues information for DPCI
> devices too
> 
> The DPCI devices have oth Tx and Rx queues. Event devices use
> DPCI Rx queues only, but CMDIF (AIOP) uses both Tx and Rx queues.
> This patch enables Tx queues configuration too.
> 
> Signed-off-by: Nipun Gupta <nipun.gu...@nxp.com>
> ---
>  drivers/bus/fslmc/portal/dpaa2_hw_dpci.c | 57
> +++++++++++++++++++++++++-------
>  drivers/bus/fslmc/portal/dpaa2_hw_pvt.h  |  3 +-
>  drivers/event/dpaa2/dpaa2_eventdev.c     | 10 +++---
>  3 files changed, 52 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpci.c
> b/drivers/bus/fslmc/portal/dpaa2_hw_dpci.c
> index aee870a..3bf7e7f 100644
> --- a/drivers/bus/fslmc/portal/dpaa2_hw_dpci.c
> +++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpci.c
> @@ -39,6 +39,7 @@
>       struct dpci_attr attr;
>       struct dpci_rx_queue_cfg rx_queue_cfg;
>       struct dpci_rx_queue_attr rx_attr;
> +     struct dpci_tx_queue_attr tx_attr;
>       int ret, i;
> 
>       /* Allocate DPAA2 dpci handle */
> @@ -67,17 +68,38 @@
>               return -1;
>       }
> 
> -     /* Set up the Rx Queue */
> -     memset(&rx_queue_cfg, 0, sizeof(struct dpci_rx_queue_cfg));
> -     ret = dpci_set_rx_queue(&dpci_node->dpci,
> -                             CMD_PRI_LOW,
> -                             dpci_node->token,
> -                             0, &rx_queue_cfg);
> -     if (ret) {
> -             DPAA2_BUS_ERR("Setting Rx queue failed with err code: %d",
> -                           ret);
> -             rte_free(dpci_node);
> -             return -1;
> +     for (i = 0; i < DPAA2_DPCI_MAX_QUEUES; i++) {
> +             struct dpaa2_queue *rxq;
> +
> +             memset(&rx_queue_cfg, 0, sizeof(struct dpci_rx_queue_cfg));
> +             ret = dpci_set_rx_queue(&dpci_node->dpci,
> +                                     CMD_PRI_LOW,
> +                                     dpci_node->token,
> +                                     i, &rx_queue_cfg);
> +             if (ret) {
> +                     DPAA2_BUS_ERR("Setting Rx queue failed with err code:
> %d",
> +                                   ret);
> +                     rte_free(dpci_node);
> +                     return -1;
> +             }
> +
> +             /* Allocate DQ storage for the DPCI Rx queues */
> +             rxq = &(dpci_node->rx_queue[i]);
> +             rxq->q_storage = rte_malloc("dq_storage",
> +                                     sizeof(struct queue_storage_info_t),
> +                                     RTE_CACHE_LINE_SIZE);
> +             if (!rxq->q_storage) {
> +                     DPAA2_BUS_ERR("q_storage allocation failed\n");
> +                     rte_free(dpci_node);
> +                     return -ENOMEM;
> +             }
> +
> +             memset(rxq->q_storage, 0, sizeof(struct
> queue_storage_info_t));
> +             if (dpaa2_alloc_dq_storage(rxq->q_storage)) {
> +                     DPAA2_BUS_ERR("dpaa2_alloc_dq_storage failed\n");
> +                     rte_free(dpci_node);

If the q_storage->dq_storage allocation has failed, q_storage too needs to be 
free'd.

> +                     return -ENOMEM;
> +             }
>       }
> 
>       /* Enable the device */
> @@ -101,8 +123,19 @@
>                       rte_free(dpci_node);
>                       return -1;
>               }
> +             dpci_node->rx_queue[i].fqid = rx_attr.fqid;
> 
> -             dpci_node->queue[i].fqid = rx_attr.fqid;
> +             ret = dpci_get_tx_queue(&dpci_node->dpci,
> +                                     CMD_PRI_LOW,
> +                                     dpci_node->token, i,
> +                                     &tx_attr);
> +             if (ret != 0) {
> +                     DPAA2_BUS_ERR("Reading device failed with err code:"
> +                                   " %d",ret);
> +                     rte_free(dpci_node);

Maybe in this case as well where both, q_storage and dq_storage, need to be 
released.

> +                     return -1;
> +             }
> +             dpci_node->tx_queue[i].fqid = tx_attr.fqid;
>       }
> 
>       dpci_node->dpci_id = dpci_id;

[...]

Reply via email to