get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/77069/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 77069,
    "url": "http://patches.dpdk.org/api/patches/77069/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200909155302.28656-6-lance.richardson@broadcom.com/",
    "project": {
        "id": 1,
        "url": "http://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": "<20200909155302.28656-6-lance.richardson@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200909155302.28656-6-lance.richardson@broadcom.com",
    "date": "2020-09-09T15:52:58",
    "name": "[05/12] net/bnxt: improve support for small ring sizes",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "4cb1b558e3f04c8f38bd335cdc4b2921ca40888c",
    "submitter": {
        "id": 1323,
        "url": "http://patches.dpdk.org/api/people/1323/?format=api",
        "name": "Lance Richardson",
        "email": "lance.richardson@broadcom.com"
    },
    "delegate": {
        "id": 1766,
        "url": "http://patches.dpdk.org/api/users/1766/?format=api",
        "username": "ajitkhaparde",
        "first_name": "Ajit",
        "last_name": "Khaparde",
        "email": "ajit.khaparde@broadcom.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20200909155302.28656-6-lance.richardson@broadcom.com/mbox/",
    "series": [
        {
            "id": 12060,
            "url": "http://patches.dpdk.org/api/series/12060/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=12060",
            "date": "2020-09-09T15:52:53",
            "name": "net/bnxt: vector PMD improvements",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/12060/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/77069/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/77069/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 dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 3C303A04B5;\n\tWed,  9 Sep 2020 17:54:11 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id B23111C126;\n\tWed,  9 Sep 2020 17:53:25 +0200 (CEST)",
            "from mail-pf1-f195.google.com (mail-pf1-f195.google.com\n [209.85.210.195]) by dpdk.org (Postfix) with ESMTP id A8CEA1C117\n for <dev@dpdk.org>; Wed,  9 Sep 2020 17:53:24 +0200 (CEST)",
            "by mail-pf1-f195.google.com with SMTP id x123so2522611pfc.7\n for <dev@dpdk.org>; Wed, 09 Sep 2020 08:53:24 -0700 (PDT)",
            "from localhost.localdomain ([192.19.231.250])\n by smtp.gmail.com with ESMTPSA id h15sm3188427pfo.23.2020.09.09.08.53.22\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Wed, 09 Sep 2020 08:53:23 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com;\n s=google;\n h=from:to:cc:subject:date:message-id:in-reply-to:references\n :mime-version:content-transfer-encoding;\n bh=97XJfUL7PmpeZvsy0me8FV7Bf/NulqE5BzvLq9oKH7Y=;\n b=RFuR8w2MmsrCuMGF0JSi+0VdhDBzY5hIls/U3eTGjbocCcb7Kj0NwwoUlYRHK35Byg\n zvs2me9sfq6pI5eJKUnBvgSClILl4h07yE167b9L6MTByWNHI54vVnxjTxopBH5o8rGS\n XLX4GDVVyRU/Y9345BiPBM3SGHMizIS3JY7dY=",
        "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:cc:subject:date:message-id:in-reply-to\n :references:mime-version:content-transfer-encoding;\n bh=97XJfUL7PmpeZvsy0me8FV7Bf/NulqE5BzvLq9oKH7Y=;\n b=p2pQDjFltbY//JCBYb6z5VB7Q+iZuucJcEfSaqQ2E00B7X5faOPiAqJ7AHKi/OUwBl\n EfHD+ZbP4iMTn/WSR95PztljVZmEYLwyu6lTaXasr5iM/HoQnmWqw+yxrIZUAzJHKiv9\n oOxhcCJEA4DfyTF8U5OCXixOrVywtTPmr+5WwhJWDmZhGLH8WGVwWIbAdv5uk6hmI+ys\n RvIYwbjdsWbK+gyoU9cUau8u4Ymy1oZxBFfVtEfdONnnQencpmfV8tIIpLiIe6Aq0Pu9\n jj10toIuaPAQCP/fh0JDv6f3XLUCu+5wAHlK0RcfSC4g5FGAXZQjCtxnNGeLj9UScTv9\n I8JQ==",
        "X-Gm-Message-State": "AOAM5323ndJq0xL16wdZuO/4IYRFgLhLLYE9mGCKaG1BkTtSvCtFBqwB\n IsEi07o3JAqKbgXRIBCVFVNSvw==",
        "X-Google-Smtp-Source": "\n ABdhPJy36HbHpKRzYOMYzsglZaIgvur8f6kENCzW9rsMFjbIO2tcN9ojWLkV+Z6m892nTx3NFfN2lA==",
        "X-Received": "by 2002:a17:902:a40e:: with SMTP id\n p14mr1383365plq.4.1599666803800;\n Wed, 09 Sep 2020 08:53:23 -0700 (PDT)",
        "From": "Lance Richardson <lance.richardson@broadcom.com>",
        "To": "Ajit Khaparde <ajit.khaparde@broadcom.com>,\n Somnath Kotur <somnath.kotur@broadcom.com>",
        "Cc": "dev@dpdk.org",
        "Date": "Wed,  9 Sep 2020 11:52:58 -0400",
        "Message-Id": "<20200909155302.28656-6-lance.richardson@broadcom.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20200909155302.28656-1-lance.richardson@broadcom.com>",
        "References": "<20200909155302.28656-1-lance.richardson@broadcom.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH 05/12] net/bnxt: improve support for small ring\n\tsizes",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "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": "Improve support for small ring sizes:\n   - Ensure that transmit free threshold is no more than 1/4 ring size.\n   - Ensure that receive free threshold is no more than 1/4 ring size.\n   - Validate requested ring sizes against minimum supported size.\n   - Use rxq receive free threshold instead of fixed maximum burst\n     size to trigger bulk receive buffer allocation.\n\nReviewed-by: Ajit Kumar Khaparde <ajit.khaparde@broadcom.com>\nSigned-off-by: Lance Richardson <lance.richardson@broadcom.com>\n---\n drivers/net/bnxt/bnxt_rxq.c             |  6 +++--\n drivers/net/bnxt/bnxt_rxtx_vec_common.h | 10 +++++----\n drivers/net/bnxt/bnxt_rxtx_vec_neon.c   | 29 +++++++++++++------------\n drivers/net/bnxt/bnxt_rxtx_vec_sse.c    | 29 +++++++++++++------------\n drivers/net/bnxt/bnxt_txq.c             |  7 ++++--\n 5 files changed, 45 insertions(+), 36 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/bnxt_rxq.c b/drivers/net/bnxt/bnxt_rxq.c\nindex db9aa1f3ed..4ef3b5cb5c 100644\n--- a/drivers/net/bnxt/bnxt_rxq.c\n+++ b/drivers/net/bnxt/bnxt_rxq.c\n@@ -14,6 +14,7 @@\n #include \"bnxt_rxq.h\"\n #include \"bnxt_rxr.h\"\n #include \"bnxt_vnic.h\"\n+#include \"bnxt_rxtx_vec_common.h\"\n #include \"hsi_struct_def_dpdk.h\"\n \n /*\n@@ -305,7 +306,7 @@ int bnxt_rx_queue_setup_op(struct rte_eth_dev *eth_dev,\n \t\treturn -EINVAL;\n \t}\n \n-\tif (!nb_desc || nb_desc > MAX_RX_DESC_CNT) {\n+\tif (nb_desc < BNXT_MIN_RING_DESC || nb_desc > MAX_RX_DESC_CNT) {\n \t\tPMD_DRV_LOG(ERR, \"nb_desc %d is invalid\\n\", nb_desc);\n \t\trc = -EINVAL;\n \t\tgoto out;\n@@ -326,7 +327,8 @@ int bnxt_rx_queue_setup_op(struct rte_eth_dev *eth_dev,\n \trxq->bp = bp;\n \trxq->mb_pool = mp;\n \trxq->nb_rx_desc = nb_desc;\n-\trxq->rx_free_thresh = rx_conf->rx_free_thresh;\n+\trxq->rx_free_thresh =\n+\t\tRTE_MIN(rte_align32pow2(nb_desc) / 4, RTE_BNXT_MAX_RX_BURST);\n \n \tPMD_DRV_LOG(DEBUG, \"RX Buf MTU %d\\n\", eth_dev->data->mtu);\n \ndiff --git a/drivers/net/bnxt/bnxt_rxtx_vec_common.h b/drivers/net/bnxt/bnxt_rxtx_vec_common.h\nindex 3da3c48f4e..2f28759d06 100644\n--- a/drivers/net/bnxt/bnxt_rxtx_vec_common.h\n+++ b/drivers/net/bnxt/bnxt_rxtx_vec_common.h\n@@ -5,11 +5,13 @@\n \n #ifndef _BNXT_RXTX_VEC_COMMON_H_\n #define _BNXT_RXTX_VEC_COMMON_H_\n+#include \"hsi_struct_def_dpdk.h\"\n+#include \"bnxt_rxq.h\"\n+#include \"bnxt_rxr.h\"\n \n-#define RTE_BNXT_MAX_RX_BURST\t\t32\n-#define RTE_BNXT_MAX_TX_BURST\t\t32\n-#define RTE_BNXT_RXQ_REARM_THRESH\t32\n-#define RTE_BNXT_DESCS_PER_LOOP\t\t4\n+#define RTE_BNXT_MAX_RX_BURST\t\t32U\n+#define RTE_BNXT_MAX_TX_BURST\t\t32U\n+#define RTE_BNXT_DESCS_PER_LOOP\t\t4U\n \n #define TX_BD_FLAGS_CMPL ((1 << TX_BD_LONG_FLAGS_BD_CNT_SFT) | \\\n \t\t\t  TX_BD_SHORT_FLAGS_COAL_NOW | \\\ndiff --git a/drivers/net/bnxt/bnxt_rxtx_vec_neon.c b/drivers/net/bnxt/bnxt_rxtx_vec_neon.c\nindex a212d46cbe..7f3eabcda1 100644\n--- a/drivers/net/bnxt/bnxt_rxtx_vec_neon.c\n+++ b/drivers/net/bnxt/bnxt_rxtx_vec_neon.c\n@@ -13,9 +13,6 @@\n #include \"bnxt.h\"\n #include \"bnxt_cpr.h\"\n #include \"bnxt_ring.h\"\n-#include \"bnxt_rxr.h\"\n-#include \"bnxt_rxq.h\"\n-#include \"hsi_struct_def_dpdk.h\"\n #include \"bnxt_rxtx_vec_common.h\"\n \n #include \"bnxt_txq.h\"\n@@ -31,23 +28,27 @@ bnxt_rxq_rearm(struct bnxt_rx_queue *rxq, struct bnxt_rx_ring_info *rxr)\n \tstruct rx_prod_pkt_bd *rxbds = &rxr->rx_desc_ring[rxq->rxrearm_start];\n \tstruct rte_mbuf **rx_bufs = &rxr->rx_buf_ring[rxq->rxrearm_start];\n \tstruct rte_mbuf *mb0, *mb1;\n-\tint i;\n+\tint nb, i;\n \n \tconst uint64x2_t hdr_room = {0, RTE_PKTMBUF_HEADROOM};\n \tconst uint64x2_t addrmask = {0, UINT64_MAX};\n \n-\t/* Pull RTE_BNXT_RXQ_REARM_THRESH more mbufs into the software ring */\n-\tif (rte_mempool_get_bulk(rxq->mb_pool,\n-\t\t\t\t (void *)rx_bufs,\n-\t\t\t\t RTE_BNXT_RXQ_REARM_THRESH) < 0) {\n-\t\trte_eth_devices[rxq->port_id].data->rx_mbuf_alloc_failed +=\n-\t\t\tRTE_BNXT_RXQ_REARM_THRESH;\n+\t/*\n+\t * Number of mbufs to allocate must be a multiple of two. The\n+\t * allocation must not go past the end of the ring.\n+\t */\n+\tnb = RTE_MIN(rxq->rxrearm_nb & ~0x1,\n+\t\t     rxq->nb_rx_desc - rxq->rxrearm_start);\n+\n+\t/* Allocate new mbufs into the software ring */\n+\tif (rte_mempool_get_bulk(rxq->mb_pool, (void *)rx_bufs, nb) < 0) {\n+\t\trte_eth_devices[rxq->port_id].data->rx_mbuf_alloc_failed += nb;\n \n \t\treturn;\n \t}\n \n \t/* Initialize the mbufs in vector, process 2 mbufs in one loop */\n-\tfor (i = 0; i < RTE_BNXT_RXQ_REARM_THRESH; i += 2, rx_bufs += 2) {\n+\tfor (i = 0; i < nb; i += 2, rx_bufs += 2) {\n \t\tuint64x2_t buf_addr0, buf_addr1;\n \t\tuint64x2_t rxbd0, rxbd1;\n \n@@ -83,12 +84,12 @@ bnxt_rxq_rearm(struct bnxt_rx_queue *rxq, struct bnxt_rx_ring_info *rxr)\n \t\tvst1q_u64((uint64_t *)(rxbds++), rxbd1);\n \t}\n \n-\trxq->rxrearm_start += RTE_BNXT_RXQ_REARM_THRESH;\n+\trxq->rxrearm_start += nb;\n \tbnxt_db_write(&rxr->rx_db, rxq->rxrearm_start - 1);\n \tif (rxq->rxrearm_start >= rxq->nb_rx_desc)\n \t\trxq->rxrearm_start = 0;\n \n-\trxq->rxrearm_nb -= RTE_BNXT_RXQ_REARM_THRESH;\n+\trxq->rxrearm_nb -= nb;\n }\n \n static uint32_t\n@@ -220,7 +221,7 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\n \tif (unlikely(!rxq->rx_started))\n \t\treturn 0;\n \n-\tif (rxq->rxrearm_nb >= RTE_BNXT_RXQ_REARM_THRESH)\n+\tif (rxq->rxrearm_nb >= rxq->rx_free_thresh)\n \t\tbnxt_rxq_rearm(rxq, rxr);\n \n \t/* Return no more than RTE_BNXT_MAX_RX_BURST per call. */\ndiff --git a/drivers/net/bnxt/bnxt_rxtx_vec_sse.c b/drivers/net/bnxt/bnxt_rxtx_vec_sse.c\nindex c00d7f6807..eced74e4e3 100644\n--- a/drivers/net/bnxt/bnxt_rxtx_vec_sse.c\n+++ b/drivers/net/bnxt/bnxt_rxtx_vec_sse.c\n@@ -17,9 +17,6 @@\n #include \"bnxt.h\"\n #include \"bnxt_cpr.h\"\n #include \"bnxt_ring.h\"\n-#include \"bnxt_rxr.h\"\n-#include \"bnxt_rxq.h\"\n-#include \"hsi_struct_def_dpdk.h\"\n #include \"bnxt_rxtx_vec_common.h\"\n \n #include \"bnxt_txq.h\"\n@@ -35,23 +32,27 @@ bnxt_rxq_rearm(struct bnxt_rx_queue *rxq, struct bnxt_rx_ring_info *rxr)\n \tstruct rx_prod_pkt_bd *rxbds = &rxr->rx_desc_ring[rxq->rxrearm_start];\n \tstruct rte_mbuf **rx_bufs = &rxr->rx_buf_ring[rxq->rxrearm_start];\n \tstruct rte_mbuf *mb0, *mb1;\n-\tint i;\n+\tint nb, i;\n \n \tconst __m128i hdr_room = _mm_set_epi64x(RTE_PKTMBUF_HEADROOM, 0);\n \tconst __m128i addrmask = _mm_set_epi64x(UINT64_MAX, 0);\n \n-\t/* Pull RTE_BNXT_RXQ_REARM_THRESH more mbufs into the software ring */\n-\tif (rte_mempool_get_bulk(rxq->mb_pool,\n-\t\t\t\t (void *)rx_bufs,\n-\t\t\t\t RTE_BNXT_RXQ_REARM_THRESH) < 0) {\n-\t\trte_eth_devices[rxq->port_id].data->rx_mbuf_alloc_failed +=\n-\t\t\tRTE_BNXT_RXQ_REARM_THRESH;\n+\t/*\n+\t * Number of mbufs to allocate must be a multiple of two. The\n+\t * allocation must not go past the end of the ring.\n+\t */\n+\tnb = RTE_MIN(rxq->rxrearm_nb & ~0x1,\n+\t\t     rxq->nb_rx_desc - rxq->rxrearm_start);\n+\n+\t/* Allocate new mbufs into the software ring */\n+\tif (rte_mempool_get_bulk(rxq->mb_pool, (void *)rx_bufs, nb) < 0) {\n+\t\trte_eth_devices[rxq->port_id].data->rx_mbuf_alloc_failed += nb;\n \n \t\treturn;\n \t}\n \n \t/* Initialize the mbufs in vector, process 2 mbufs in one loop */\n-\tfor (i = 0; i < RTE_BNXT_RXQ_REARM_THRESH; i += 2, rx_bufs += 2) {\n+\tfor (i = 0; i < nb; i += 2, rx_bufs += 2) {\n \t\t__m128i buf_addr0, buf_addr1;\n \t\t__m128i rxbd0, rxbd1;\n \n@@ -87,12 +88,12 @@ bnxt_rxq_rearm(struct bnxt_rx_queue *rxq, struct bnxt_rx_ring_info *rxr)\n \t\t_mm_store_si128((__m128i *)(rxbds++), rxbd1);\n \t}\n \n-\trxq->rxrearm_start += RTE_BNXT_RXQ_REARM_THRESH;\n+\trxq->rxrearm_start += nb;\n \tbnxt_db_write(&rxr->rx_db, rxq->rxrearm_start - 1);\n \tif (rxq->rxrearm_start >= rxq->nb_rx_desc)\n \t\trxq->rxrearm_start = 0;\n \n-\trxq->rxrearm_nb -= RTE_BNXT_RXQ_REARM_THRESH;\n+\trxq->rxrearm_nb -= nb;\n }\n \n static uint32_t\n@@ -223,7 +224,7 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\n \tif (unlikely(!rxq->rx_started))\n \t\treturn 0;\n \n-\tif (rxq->rxrearm_nb >= RTE_BNXT_RXQ_REARM_THRESH)\n+\tif (rxq->rxrearm_nb >= rxq->rx_free_thresh)\n \t\tbnxt_rxq_rearm(rxq, rxr);\n \n \t/* Return no more than RTE_BNXT_MAX_RX_BURST per call. */\ndiff --git a/drivers/net/bnxt/bnxt_txq.c b/drivers/net/bnxt/bnxt_txq.c\nindex 2d7645eeb0..42930abbf5 100644\n--- a/drivers/net/bnxt/bnxt_txq.c\n+++ b/drivers/net/bnxt/bnxt_txq.c\n@@ -11,6 +11,7 @@\n #include \"bnxt_ring.h\"\n #include \"bnxt_txq.h\"\n #include \"bnxt_txr.h\"\n+#include \"bnxt_rxtx_vec_common.h\"\n \n /*\n  * TX Queues\n@@ -97,7 +98,7 @@ int bnxt_tx_queue_setup_op(struct rte_eth_dev *eth_dev,\n \t\treturn -EINVAL;\n \t}\n \n-\tif (!nb_desc || nb_desc > MAX_TX_DESC_CNT) {\n+\tif (nb_desc < BNXT_MIN_RING_DESC || nb_desc > MAX_TX_DESC_CNT) {\n \t\tPMD_DRV_LOG(ERR, \"nb_desc %d is invalid\", nb_desc);\n \t\trc = -EINVAL;\n \t\tgoto out;\n@@ -129,7 +130,9 @@ int bnxt_tx_queue_setup_op(struct rte_eth_dev *eth_dev,\n \t}\n \ttxq->bp = bp;\n \ttxq->nb_tx_desc = nb_desc;\n-\ttxq->tx_free_thresh = tx_conf->tx_free_thresh;\n+\ttxq->tx_free_thresh =\n+\t\tRTE_MIN(rte_align32pow2(nb_desc) / 4, RTE_BNXT_MAX_TX_BURST);\n+\n \ttxq->tx_deferred_start = tx_conf->tx_deferred_start;\n \n \trc = bnxt_init_tx_ring_struct(txq, socket_id);\n",
    "prefixes": [
        "05/12"
    ]
}