From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 86151A00C2; Thu, 6 Oct 2022 01:23:18 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E5BAC42B8C; Thu, 6 Oct 2022 01:22:26 +0200 (CEST) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mails.dpdk.org (Postfix) with ESMTP id 5D32342B79 for ; Thu, 6 Oct 2022 01:22:23 +0200 (CEST) Received: by linux.microsoft.com (Postfix, from userid 1004) id 17C4B20C3334; Wed, 5 Oct 2022 16:22:23 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 17C4B20C3334 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxonhyperv.com; s=default; t=1665012143; bh=1Xk01UFWcMvwyybQ1vL2qdeG7Ki2Ck7XMm3bJAmVUK0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:Reply-To:From; b=ONQZmCFWb54eu6BKnUzp6ZJO/aXOuTxTT0nt7LPTZG90gficUYctN80bvqSgkGjQm q5wnv7y4BffQFXuLI3dTMFQrARdDAqQloIEVNAdgJc4g4ghNTZRn/yF6DHrhgreDWG PoBRTObaWos45br2zINj/Hucy4Yrzibz98rvyTKc= From: longli@linuxonhyperv.com To: Ferruh Yigit Cc: dev@dpdk.org, Ajay Sharma , Stephen Hemminger , Long Li Subject: [Patch v10 09/18] net/mana: configure Tx queues Date: Wed, 5 Oct 2022 16:21:59 -0700 Message-Id: <1665012128-20520-10-git-send-email-longli@linuxonhyperv.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1665012128-20520-1-git-send-email-longli@linuxonhyperv.com> References: <1663987546-15982-1-git-send-email-longli@linuxonhyperv.com> <1665012128-20520-1-git-send-email-longli@linuxonhyperv.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: longli@microsoft.com Errors-To: dev-bounces@dpdk.org From: Long Li Tx hardware queue is allocated when starting the queue, this is for pre configuration. Signed-off-by: Long Li --- change log: v8: fix coding style to function definitions v9: move data definitions from earlier patch. drivers/net/mana/mana.c | 67 +++++++++++++++++++++++++++++++++++++++++ drivers/net/mana/mana.h | 20 ++++++++++++ 2 files changed, 87 insertions(+) diff --git a/drivers/net/mana/mana.c b/drivers/net/mana/mana.c index d19be6f852..8f6996c202 100644 --- a/drivers/net/mana/mana.c +++ b/drivers/net/mana/mana.c @@ -205,6 +205,16 @@ mana_dev_info_get(struct rte_eth_dev *dev, return 0; } +static void +mana_dev_tx_queue_info(struct rte_eth_dev *dev, uint16_t queue_id, + struct rte_eth_txq_info *qinfo) +{ + struct mana_txq *txq = dev->data->tx_queues[queue_id]; + + qinfo->conf.offloads = dev->data->dev_conf.txmode.offloads; + qinfo->nb_desc = txq->num_desc; +} + static void mana_dev_rx_queue_info(struct rte_eth_dev *dev, uint16_t queue_id, struct rte_eth_rxq_info *qinfo) @@ -293,6 +303,60 @@ mana_rss_hash_conf_get(struct rte_eth_dev *dev, return 0; } +static int +mana_dev_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, + uint16_t nb_desc, unsigned int socket_id, + const struct rte_eth_txconf *tx_conf __rte_unused) + +{ + struct mana_priv *priv = dev->data->dev_private; + struct mana_txq *txq; + int ret; + + txq = rte_zmalloc_socket("mana_txq", sizeof(*txq), 0, socket_id); + if (!txq) { + DRV_LOG(ERR, "failed to allocate txq"); + return -ENOMEM; + } + + txq->socket = socket_id; + + txq->desc_ring = rte_malloc_socket("mana_tx_desc_ring", + sizeof(struct mana_txq_desc) * + nb_desc, + RTE_CACHE_LINE_SIZE, socket_id); + if (!txq->desc_ring) { + DRV_LOG(ERR, "failed to allocate txq desc_ring"); + ret = -ENOMEM; + goto fail; + } + + DRV_LOG(DEBUG, "idx %u nb_desc %u socket %u txq->desc_ring %p", + queue_idx, nb_desc, socket_id, txq->desc_ring); + + txq->desc_ring_head = 0; + txq->desc_ring_tail = 0; + txq->priv = priv; + txq->num_desc = nb_desc; + dev->data->tx_queues[queue_idx] = txq; + + return 0; + +fail: + rte_free(txq->desc_ring); + rte_free(txq); + return ret; +} + +static void +mana_dev_tx_queue_release(struct rte_eth_dev *dev, uint16_t qid) +{ + struct mana_txq *txq = dev->data->tx_queues[qid]; + + rte_free(txq->desc_ring); + rte_free(txq); +} + static int mana_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, uint16_t nb_desc, unsigned int socket_id, @@ -371,10 +435,13 @@ static const struct eth_dev_ops mana_dev_ops = { .dev_configure = mana_dev_configure, .dev_close = mana_dev_close, .dev_infos_get = mana_dev_info_get, + .txq_info_get = mana_dev_tx_queue_info, .rxq_info_get = mana_dev_rx_queue_info, .dev_supported_ptypes_get = mana_supported_ptypes, .rss_hash_update = mana_rss_hash_update, .rss_hash_conf_get = mana_rss_hash_conf_get, + .tx_queue_setup = mana_dev_tx_queue_setup, + .tx_queue_release = mana_dev_tx_queue_release, .rx_queue_setup = mana_dev_rx_queue_setup, .rx_queue_release = mana_dev_rx_queue_release, .link_update = mana_dev_link_update, diff --git a/drivers/net/mana/mana.h b/drivers/net/mana/mana.h index 4cd225fe6e..d10c0830fe 100644 --- a/drivers/net/mana/mana.h +++ b/drivers/net/mana/mana.h @@ -75,11 +75,31 @@ struct mana_priv { uint64_t max_mr_size; }; +struct mana_txq_desc { + struct rte_mbuf *pkt; + uint32_t wqe_size_in_bu; +}; + struct mana_rxq_desc { struct rte_mbuf *pkt; uint32_t wqe_size_in_bu; }; +struct mana_txq { + struct mana_priv *priv; + uint32_t num_desc; + + /* For storing pending requests */ + struct mana_txq_desc *desc_ring; + + /* desc_ring_head is where we put pending requests to ring, + * completion pull off desc_ring_tail + */ + uint32_t desc_ring_head, desc_ring_tail; + + unsigned int socket; +}; + struct mana_rxq { struct mana_priv *priv; uint32_t num_desc; -- 2.17.1