Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/94876/?format=api
https://patches.dpdk.org/api/patches/94876/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/patch/20210625223401.45505-2-ajit.khaparde@broadcom.com/", "project": { "id": 1, "url": "https://patches.dpdk.org/api/projects/1/?format=api", "name": "DPDK", "link_name": "dpdk", "list_id": "dev.dpdk.org", "list_email": "dev@dpdk.org", "web_url": "http://core.dpdk.org", "scm_url": "git://dpdk.org/dpdk", "webscm_url": "http://git.dpdk.org/dpdk", "list_archive_url": "https://inbox.dpdk.org/dev", "list_archive_url_format": "https://inbox.dpdk.org/dev/{}", "commit_url_format": "" }, "msgid": "<20210625223401.45505-2-ajit.khaparde@broadcom.com>", "list_archive_url": "https://inbox.dpdk.org/dev/20210625223401.45505-2-ajit.khaparde@broadcom.com", "date": "2021-06-25T22:34:00", "name": "[1/2] net/bnxt: add support for runtime queue setup", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": true, "hash": "674f4928cff8027d08926c65b77098da214ce163", "submitter": { "id": 501, "url": "https://patches.dpdk.org/api/people/501/?format=api", "name": "Ajit Khaparde", "email": "ajit.khaparde@broadcom.com" }, "delegate": { "id": 1766, "url": "https://patches.dpdk.org/api/users/1766/?format=api", "username": "ajitkhaparde", "first_name": "Ajit", "last_name": "Khaparde", "email": "ajit.khaparde@broadcom.com" }, "mbox": "https://patches.dpdk.org/project/dpdk/patch/20210625223401.45505-2-ajit.khaparde@broadcom.com/mbox/", "series": [ { "id": 17493, "url": "https://patches.dpdk.org/api/series/17493/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=17493", "date": "2021-06-25T22:33:59", "name": "bet/bnxt: add runtime queue setup support", "version": 1, "mbox": "https://patches.dpdk.org/series/17493/mbox/" } ], "comments": "https://patches.dpdk.org/api/patches/94876/comments/", "check": "warning", "checks": "https://patches.dpdk.org/api/patches/94876/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dev-bounces@dpdk.org>", "X-Original-To": "patchwork@inbox.dpdk.org", "Delivered-To": "patchwork@inbox.dpdk.org", "Received": [ "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 68ACDA034F;\n\tSat, 26 Jun 2021 00:34:22 +0200 (CEST)", "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 5757E40E6E;\n\tSat, 26 Jun 2021 00:34:17 +0200 (CEST)", "from mail-pf1-f172.google.com (mail-pf1-f172.google.com\n [209.85.210.172])\n by mails.dpdk.org (Postfix) with ESMTP id 3949540E25\n for <dev@dpdk.org>; Sat, 26 Jun 2021 00:34:16 +0200 (CEST)", "by mail-pf1-f172.google.com with SMTP id 21so8597895pfp.3\n for <dev@dpdk.org>; Fri, 25 Jun 2021 15:34:16 -0700 (PDT)", "from localhost.localdomain ([192.19.223.252])\n by smtp.gmail.com with ESMTPSA id u8sm10111943pjg.1.2021.06.25.15.34.12\n for <dev@dpdk.org>\n (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);\n Fri, 25 Jun 2021 15:34:14 -0700 (PDT)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com;\n s=google;\n h=from:to:subject:date:message-id:in-reply-to:references:mime-version;\n bh=++G++r8HCIkGszb4XBxtn3rfpyU5eD9UD1qmqkz7r3k=;\n b=EU+zjWkR6Roub8x9F9IOVnd2EERAM3gRXjoSNrmkVVHCgfDWg1GrepDSt75hTb0h31\n HjG22/Ukg44Rt6oJhzGtACsFKJ9XfEbD2r752yWr4YL5IELMje7ay8uh0jWhoi8+XQWc\n tBn3c6k7TJswxYPDgDg40Z583x52gO6bkm0Cc=", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20161025;\n h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to\n :references:mime-version;\n bh=++G++r8HCIkGszb4XBxtn3rfpyU5eD9UD1qmqkz7r3k=;\n b=J4Utr3hZQlo9/Joom4vEV4NYvHRLeTJO9xVwo7+MLKuoPRx9AZvPMgwPV2eaQ2KNWh\n QNz6sQPUjntEkO2yuIYdRCfcD35MZUv6zHrIC+FJMC6IQYAbEG47ErwJj5GK1IkPwPhP\n j7WFwjfrm+QyW6fw5DRtv7mwrwkOPV1dZGGIZSEXIM/1fF5ddTx8+aBS2kYuXt2MQ7ZZ\n 5cErqgQFhYiahGTPuygi9O0tnej/DeVaum17kcopmz2l1Ra5YnGDgC+2uWJOEQzPpQTK\n oRpr3vVV7YkAlO2hDCHUaZvFrljhdTNmmAsGt0pWd4WUF6QRjykMNuC2thuju90huoFP\n ExHQ==", "X-Gm-Message-State": "AOAM530bXXgjW5LMf9LSC8W5VVb4TkOp+OBuGDt1b935MXU4PU/0ywPW\n FZR4lD+TSNI0mPjzfXZL8UrdXRQGmwjk2Gzzhj/6HX89DxTi9vMHO3JNS660L77eskl+5NS1onj\n 3vYw7M7Gq0vjmbP8MMY5dmy3pAnpx2DcGqdDQDb9KAD/CXqbOqZEKGGvSOUjuv2E=", "X-Google-Smtp-Source": "\n ABdhPJxpTk/4hUkfjo+PlaNs6btiQKWqG1ZQDS9ChhJFYc7B7yzsuy3Bq+lx5Lwobne8mHnSq7kOmQ==", "X-Received": "by 2002:a63:5118:: with SMTP id f24mr11466310pgb.34.1624660454782;\n Fri, 25 Jun 2021 15:34:14 -0700 (PDT)", "From": "Ajit Khaparde <ajit.khaparde@broadcom.com>", "To": "dev@dpdk.org", "Date": "Fri, 25 Jun 2021 15:34:00 -0700", "Message-Id": "<20210625223401.45505-2-ajit.khaparde@broadcom.com>", "X-Mailer": "git-send-email 2.21.1 (Apple Git-122.3)", "In-Reply-To": "<20210625223401.45505-1-ajit.khaparde@broadcom.com>", "References": "<20210625223401.45505-1-ajit.khaparde@broadcom.com>", "MIME-Version": "1.0", "Content-Type": "multipart/signed; protocol=\"application/pkcs7-signature\";\n micalg=sha-256; boundary=\"0000000000005353b405c59ebd8f\"", "X-Content-Filtered-By": "Mailman/MimeDel 2.1.29", "Subject": "[dpdk-dev] [PATCH 1/2] net/bnxt: add support for runtime queue setup", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "DPDK patches and discussions <dev.dpdk.org>", "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://mails.dpdk.org/archives/dev/>", "List-Post": "<mailto:dev@dpdk.org>", "List-Help": "<mailto:dev-request@dpdk.org?subject=help>", "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org", "Sender": "\"dev\" <dev-bounces@dpdk.org>" }, "content": "Add support for runtime Rx and Tx queue setup. This will allow\nRx/Tx queue setup after the interface is started.\n\nSigned-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>\n---\n drivers/net/bnxt/bnxt_ethdev.c | 2 ++\n drivers/net/bnxt/bnxt_hwrm.c | 46 ++++++++++++++++++++++++------\n drivers/net/bnxt/bnxt_hwrm.h | 3 ++\n drivers/net/bnxt/bnxt_ring.c | 51 ++++++++++++++++++++++++++++++++++\n drivers/net/bnxt/bnxt_rxq.c | 12 ++------\n drivers/net/bnxt/bnxt_txq.c | 2 ++\n drivers/net/bnxt/bnxt_txr.c | 6 ++++\n 7 files changed, 105 insertions(+), 17 deletions(-)", "diff": "diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c\nindex 4d51a209f9..495c6cd21e 100644\n--- a/drivers/net/bnxt/bnxt_ethdev.c\n+++ b/drivers/net/bnxt/bnxt_ethdev.c\n@@ -987,6 +987,8 @@ static int bnxt_dev_info_get_op(struct rte_eth_dev *eth_dev,\n \tdev_info->flow_type_rss_offloads = BNXT_ETH_RSS_SUPPORT;\n \n \tdev_info->speed_capa = bnxt_get_speed_capabilities(bp);\n+\tdev_info->dev_capa = RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP |\n+\t\t\t RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP;\n \n \tdev_info->default_rxconf = (struct rte_eth_rxconf) {\n \t\t.rx_thresh = {\ndiff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c\nindex 6c4f83ee3b..1a4968abe6 100644\n--- a/drivers/net/bnxt/bnxt_hwrm.c\n+++ b/drivers/net/bnxt/bnxt_hwrm.c\n@@ -1917,7 +1917,7 @@ int bnxt_hwrm_stat_clear(struct bnxt *bp, struct bnxt_cp_ring_info *cpr)\n \treturn rc;\n }\n \n-static int bnxt_hwrm_stat_ctx_alloc(struct bnxt *bp, struct bnxt_cp_ring_info *cpr)\n+int bnxt_hwrm_stat_ctx_alloc(struct bnxt *bp, struct bnxt_cp_ring_info *cpr)\n {\n \tint rc;\n \tstruct hwrm_stat_ctx_alloc_input req = {.req_type = 0 };\n@@ -2637,10 +2637,11 @@ int bnxt_alloc_all_hwrm_stat_ctxs(struct bnxt *bp)\n \t\t\tcpr = rxq->cp_ring;\n \t\t}\n \n-\t\trc = bnxt_hwrm_stat_ctx_alloc(bp, cpr);\n-\n-\t\tif (rc)\n-\t\t\treturn rc;\n+\t\tif (cpr->hw_stats_ctx_id == HWRM_NA_SIGNATURE) {\n+\t\t\trc = bnxt_hwrm_stat_ctx_alloc(bp, cpr);\n+\t\t\tif (rc)\n+\t\t\t\treturn rc;\n+\t\t}\n \t}\n \treturn rc;\n }\n@@ -2720,6 +2721,12 @@ void bnxt_free_hwrm_rx_ring(struct bnxt *bp, int queue_index)\n \t\t\tbp->grp_info[queue_index].ag_fw_ring_id =\n \t\t\t\t\t\t\tINVALID_HW_RING_ID;\n \t}\n+\n+\tif (cpr->hw_stats_ctx_id != HWRM_NA_SIGNATURE) {\n+\t\tbnxt_hwrm_stat_ctx_free(bp, cpr);\n+\t\tcpr->hw_stats_ctx_id = HWRM_NA_SIGNATURE;\n+\t}\n+\n \tif (cpr->cp_ring_struct->fw_ring_id != INVALID_HW_RING_ID)\n \t\tbnxt_free_cp_ring(bp, cpr);\n \n@@ -5093,7 +5100,6 @@ static int\n bnxt_vnic_rss_configure_p5(struct bnxt *bp, struct bnxt_vnic_info *vnic)\n {\n \tstruct hwrm_vnic_rss_cfg_output *resp = bp->hwrm_cmd_resp_addr;\n-\tuint8_t *rx_queue_state = bp->eth_dev->data->rx_queue_state;\n \tstruct hwrm_vnic_rss_cfg_input req = {.req_type = 0 };\n \tstruct bnxt_rx_queue **rxqs = bp->rx_queues;\n \tuint16_t *ring_tbl = vnic->rss_table;\n@@ -5127,8 +5133,7 @@ bnxt_vnic_rss_configure_p5(struct bnxt *bp, struct bnxt_vnic_info *vnic)\n \n \t\t\t/* Find next active ring. */\n \t\t\tfor (cnt = 0; cnt < max_rings; cnt++) {\n-\t\t\t\tif (rx_queue_state[k] !=\n-\t\t\t\t\t\tRTE_ETH_QUEUE_STATE_STOPPED)\n+\t\t\t\tif (rxqs[k]->rx_started)\n \t\t\t\t\tbreak;\n \t\t\t\tif (++k == max_rings)\n \t\t\t\t\tk = 0;\n@@ -6194,3 +6199,28 @@ int bnxt_hwrm_read_sfp_module_eeprom_info(struct bnxt *bp, uint16_t i2c_addr,\n \n \treturn rc;\n }\n+\n+void bnxt_free_hwrm_tx_ring(struct bnxt *bp, int queue_index)\n+{\n+\tstruct bnxt_tx_queue *txq = bp->tx_queues[queue_index];\n+\tstruct bnxt_tx_ring_info *txr = txq->tx_ring;\n+\tstruct bnxt_ring *ring = txr->tx_ring_struct;\n+\tstruct bnxt_cp_ring_info *cpr = txq->cp_ring;\n+\n+\tif (ring->fw_ring_id != INVALID_HW_RING_ID) {\n+\t\tbnxt_hwrm_ring_free(bp, ring,\n+\t\t\t\t HWRM_RING_FREE_INPUT_RING_TYPE_TX,\n+\t\t\t\t cpr->cp_ring_struct->fw_ring_id);\n+\t\tring->fw_ring_id = INVALID_HW_RING_ID;\n+\t}\n+\n+\tif (cpr->hw_stats_ctx_id != HWRM_NA_SIGNATURE) {\n+\t\tbnxt_hwrm_stat_ctx_free(bp, cpr);\n+\t\tcpr->hw_stats_ctx_id = HWRM_NA_SIGNATURE;\n+\t}\n+\n+\tif (cpr->cp_ring_struct->fw_ring_id != INVALID_HW_RING_ID) {\n+\t\tbnxt_free_cp_ring(bp, cpr);\n+\t\tcpr->cp_ring_struct->fw_ring_id = INVALID_HW_RING_ID;\n+\t}\n+}\ndiff --git a/drivers/net/bnxt/bnxt_hwrm.h b/drivers/net/bnxt/bnxt_hwrm.h\nindex 057f7f94d0..ec3414f0c6 100644\n--- a/drivers/net/bnxt/bnxt_hwrm.h\n+++ b/drivers/net/bnxt/bnxt_hwrm.h\n@@ -304,4 +304,7 @@ int bnxt_hwrm_ring_stats(struct bnxt *bp, uint32_t cid, int idx,\n int bnxt_hwrm_read_sfp_module_eeprom_info(struct bnxt *bp, uint16_t i2c_addr,\n \t\t\t\t\t uint16_t page_number, uint16_t start_addr,\n \t\t\t\t\t uint16_t data_length, uint8_t *buf);\n+int bnxt_hwrm_stat_ctx_alloc(struct bnxt *bp, struct bnxt_cp_ring_info *cpr);\n+void bnxt_free_hwrm_tx_ring(struct bnxt *bp, int queue_index);\n+int bnxt_alloc_hwrm_tx_ring(struct bnxt *bp, int queue_index);\n #endif\ndiff --git a/drivers/net/bnxt/bnxt_ring.c b/drivers/net/bnxt/bnxt_ring.c\nindex cb18dfba7f..9ec0c10911 100644\n--- a/drivers/net/bnxt/bnxt_ring.c\n+++ b/drivers/net/bnxt/bnxt_ring.c\n@@ -599,6 +599,10 @@ int bnxt_alloc_hwrm_rx_ring(struct bnxt *bp, int queue_index)\n \tif (rc)\n \t\tgoto err_out;\n \n+\trc = bnxt_hwrm_stat_ctx_alloc(bp, cpr);\n+\tif (rc)\n+\t\tgoto err_out;\n+\n \tif (BNXT_HAS_RING_GRPS(bp)) {\n \t\tbp->grp_info[queue_index].fw_stats_ctx = cpr->hw_stats_ctx_id;\n \t\tbp->grp_info[queue_index].cp_fw_ring_id = cp_ring->fw_ring_id;\n@@ -837,3 +841,50 @@ int bnxt_alloc_async_ring_struct(struct bnxt *bp)\n \treturn bnxt_alloc_rings(bp, bp->eth_dev->device->numa_node, 0, NULL,\n \t\t\t\tNULL, bp->async_cp_ring, NULL, \"def_cp\");\n }\n+\n+int bnxt_alloc_hwrm_tx_ring(struct bnxt *bp, int queue_index)\n+{\n+\tstruct bnxt_tx_queue *txq = bp->tx_queues[queue_index];\n+\tstruct bnxt_cp_ring_info *cpr = txq->cp_ring;\n+\tstruct bnxt_ring *cp_ring = cpr->cp_ring_struct;\n+\tstruct bnxt_tx_ring_info *txr = txq->tx_ring;\n+\tstruct bnxt_ring *ring = txr->tx_ring_struct;\n+\tunsigned int idx = queue_index + bp->rx_cp_nr_rings;\n+\tuint16_t tx_cosq_id = 0;\n+\tstruct bnxt_coal coal;\n+\tint rc = 0;\n+\n+\trc = bnxt_alloc_cmpl_ring(bp, idx, cpr);\n+\tif (rc)\n+\t\tgoto err_out;\n+\n+\tbnxt_init_dflt_coal(&coal);\n+\tbnxt_hwrm_set_ring_coal(bp, &coal, cp_ring->fw_ring_id);\n+\n+\trc = bnxt_hwrm_stat_ctx_alloc(bp, cpr);\n+\tif (rc)\n+\t\tgoto err_out;\n+\n+\tif (bp->vnic_cap_flags & BNXT_VNIC_CAP_COS_CLASSIFY)\n+\t\ttx_cosq_id = bp->tx_cosq_id[queue_index < bp->max_lltc ? queue_index : 0];\n+\telse\n+\t\ttx_cosq_id = bp->tx_cosq_id[0];\n+\n+\trc = bnxt_hwrm_ring_alloc(bp, ring,\n+\t\t\t\t HWRM_RING_ALLOC_INPUT_RING_TYPE_TX,\n+\t\t\t\t queue_index, cpr->hw_stats_ctx_id,\n+\t\t\t\t cp_ring->fw_ring_id,\n+\t\t\t\t tx_cosq_id);\n+\tif (rc)\n+\t\tgoto err_out;\n+\n+\tbnxt_set_db(bp, &txr->tx_db, HWRM_RING_ALLOC_INPUT_RING_TYPE_TX,\n+\t\t queue_index, ring->fw_ring_id,\n+\t\t ring->ring_mask);\n+\ttxq->index = idx;\n+\n+\treturn rc;\n+err_out:\n+\tbnxt_free_hwrm_tx_ring(bp, queue_index);\n+\treturn rc;\n+}\ndiff --git a/drivers/net/bnxt/bnxt_rxq.c b/drivers/net/bnxt/bnxt_rxq.c\nindex 44b09e9c61..bbcb3b06e7 100644\n--- a/drivers/net/bnxt/bnxt_rxq.c\n+++ b/drivers/net/bnxt/bnxt_rxq.c\n@@ -248,6 +248,7 @@ void bnxt_rx_queue_release_op(void *rx_queue)\n \t\tif (is_bnxt_in_error(rxq->bp))\n \t\t\treturn;\n \n+\t\tbnxt_free_hwrm_rx_ring(rxq->bp, rxq->queue_id);\n \t\tbnxt_rx_queue_release_mbufs(rxq);\n \n \t\t/* Free RX ring hardware descriptors */\n@@ -286,7 +287,6 @@ int bnxt_rx_queue_setup_op(struct rte_eth_dev *eth_dev,\n \tuint64_t rx_offloads = eth_dev->data->dev_conf.rxmode.offloads;\n \tstruct bnxt_rx_queue *rxq;\n \tint rc = 0;\n-\tuint8_t queue_state;\n \n \trc = is_bnxt_in_error(bp);\n \tif (rc)\n@@ -360,14 +360,8 @@ int bnxt_rx_queue_setup_op(struct rte_eth_dev *eth_dev,\n \telse\n \t\trxq->rx_deferred_start = rx_conf->rx_deferred_start;\n \n-\tif (rxq->rx_deferred_start) {\n-\t\tqueue_state = RTE_ETH_QUEUE_STATE_STOPPED;\n-\t\trxq->rx_started = false;\n-\t} else {\n-\t\tqueue_state = RTE_ETH_QUEUE_STATE_STARTED;\n-\t\trxq->rx_started = true;\n-\t}\n-\teth_dev->data->rx_queue_state[queue_idx] = queue_state;\n+\trxq->rx_started = rxq->rx_deferred_start ? false : true;\n+\trxq->vnic = BNXT_GET_DEFAULT_VNIC(bp);\n \n \t/* Configure mtu if it is different from what was configured before */\n \tif (!queue_idx)\ndiff --git a/drivers/net/bnxt/bnxt_txq.c b/drivers/net/bnxt/bnxt_txq.c\nindex bc789224d2..830416af3d 100644\n--- a/drivers/net/bnxt/bnxt_txq.c\n+++ b/drivers/net/bnxt/bnxt_txq.c\n@@ -8,6 +8,7 @@\n #include <rte_malloc.h>\n \n #include \"bnxt.h\"\n+#include \"bnxt_hwrm.h\"\n #include \"bnxt_ring.h\"\n #include \"bnxt_txq.h\"\n #include \"bnxt_txr.h\"\n@@ -61,6 +62,7 @@ void bnxt_tx_queue_release_op(void *tx_queue)\n \t\t\treturn;\n \n \t\t/* Free TX ring hardware descriptors */\n+\t\tbnxt_free_hwrm_tx_ring(txq->bp, txq->queue_id);\n \t\tbnxt_tx_queue_release_mbufs(txq);\n \t\tif (txq->tx_ring) {\n \t\t\tbnxt_free_ring(txq->tx_ring->tx_ring_struct);\ndiff --git a/drivers/net/bnxt/bnxt_txr.c b/drivers/net/bnxt/bnxt_txr.c\nindex 8eb9493997..9a6b96e04a 100644\n--- a/drivers/net/bnxt/bnxt_txr.c\n+++ b/drivers/net/bnxt/bnxt_txr.c\n@@ -9,6 +9,7 @@\n #include <rte_malloc.h>\n \n #include \"bnxt.h\"\n+#include \"bnxt_hwrm.h\"\n #include \"bnxt_ring.h\"\n #include \"bnxt_txq.h\"\n #include \"bnxt_txr.h\"\n@@ -547,6 +548,11 @@ int bnxt_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id)\n \tif (rc)\n \t\treturn rc;\n \n+\tbnxt_free_hwrm_tx_ring(bp, tx_queue_id);\n+\trc = bnxt_alloc_hwrm_tx_ring(bp, tx_queue_id);\n+\tif (rc)\n+\t\treturn rc;\n+\n \tdev->data->tx_queue_state[tx_queue_id] = RTE_ETH_QUEUE_STATE_STARTED;\n \ttxq->tx_started = true;\n \tPMD_DRV_LOG(DEBUG, \"Tx queue started\\n\");\n", "prefixes": [ "1/2" ] }{ "id": 94876, "url": "