get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 77076,
    "url": "http://patches.dpdk.org/api/patches/77076/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200909155730.29182-1-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": "<20200909155730.29182-1-lance.richardson@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200909155730.29182-1-lance.richardson@broadcom.com",
    "date": "2020-09-09T15:57:30",
    "name": "[12/12] net/bnxt: transmit vector mode improvements",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "078718779da2fb1225234b3f00a301b6b2b97f5c",
    "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/20200909155730.29182-1-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/77076/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/77076/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 6A737A04B5;\n\tWed,  9 Sep 2020 17:57:38 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 498751C115;\n\tWed,  9 Sep 2020 17:57:38 +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 0BA721C112\n for <dev@dpdk.org>; Wed,  9 Sep 2020 17:57:36 +0200 (CEST)",
            "by mail-pf1-f195.google.com with SMTP id w7so2541467pfi.4\n for <dev@dpdk.org>; Wed, 09 Sep 2020 08:57:35 -0700 (PDT)",
            "from localhost.localdomain ([192.19.231.250])\n by smtp.gmail.com with ESMTPSA id kt18sm77948pjb.56.2020.09.09.08.57.34\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Wed, 09 Sep 2020 08:57:34 -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:mime-version\n :content-transfer-encoding;\n bh=hISRRUNg7+Niq+Fa+X0zHfPM0eE3nGBX4GiZaG41v9g=;\n b=JCG3HGns1JbDoBnbvPcAukK6Jyq08V2xHQmV1p9Gl46Qr5DG+vHdMMlcixNdWKrkV6\n LQXA1ERatf5vNUI2CtwCoyUBVQzZqdPDex4gbvDyzFSLHnJxmUayO5qU5dGnQdGpMQBH\n 2aM3zSQRcr3ryN0Mg4oTwiAxdkGuwk4Uoe1lQ=",
        "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:mime-version\n :content-transfer-encoding;\n bh=hISRRUNg7+Niq+Fa+X0zHfPM0eE3nGBX4GiZaG41v9g=;\n b=q0+1282pkGhPTKETX0tQu/qXjpDtnScf6I/8mkb/bgnYj7mL7VF7d7iZ5J0ZXcVv2V\n qG12xVTgAvAndKbbjswtp7DwhbeJzbbzqx7vS4sLpK9YsO553qHz5jNwK/+Uvu8WN3e2\n KxKaK6zLkzTSSk4+vcs0w/RABMuNfH+ASSfC3lizueC7IsRsYe1AjTotM3olyae2Ibbr\n fWtV64IZmj7fKDlHdIndnDch5wzOKct/0jWr6plj3j20OK3LETRNvrCmqifQ6tzALqkn\n UBORkMFyy41+b/KLCtZzalrYco/5K4CmfQcAEbX7jkB7iuhUfEq5CCWVt0dAY5SHSrXX\n q5dg==",
        "X-Gm-Message-State": "AOAM530wapUkr508sXtlxhADLP1sUHjhiTPKrdpRdRLbjBvNkn35pshx\n 4hqN6y5RcIEsdeLpjI+e8g9VHA==",
        "X-Google-Smtp-Source": "\n ABdhPJzip5BsKG6K9FjKTjrvxzMyjDMn5VbqVeeXyPY+QeTeLhT5NvYjOCocmZdkQ/BsmqxmRcsJxQ==",
        "X-Received": "by 2002:a17:902:aa8d:: with SMTP id\n d13mr1447191plr.124.1599667055212;\n Wed, 09 Sep 2020 08:57:35 -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:57:30 -0400",
        "Message-Id": "<20200909155730.29182-1-lance.richardson@broadcom.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH 12/12] net/bnxt: transmit vector mode improvements",
        "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 performance of vector burst transmit function by processing\nmultiple packets per inner loop iteration.\n\nSigned-off-by: Lance Richardson <lance.richardson@broadcom.com>\n---\n drivers/net/bnxt/bnxt_rxtx_vec_sse.c | 96 +++++++++++++++++++---------\n 1 file changed, 66 insertions(+), 30 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/bnxt_rxtx_vec_sse.c b/drivers/net/bnxt/bnxt_rxtx_vec_sse.c\nindex 362992ceb2..dace2f8a16 100644\n--- a/drivers/net/bnxt/bnxt_rxtx_vec_sse.c\n+++ b/drivers/net/bnxt/bnxt_rxtx_vec_sse.c\n@@ -316,13 +316,14 @@ bnxt_tx_cmp_vec(struct bnxt_tx_queue *txq, int nr_pkts)\n \tstruct rte_mbuf **free = txq->free;\n \tuint16_t cons = txr->tx_cons;\n \tunsigned int blk = 0;\n+\tuint32_t ring_mask = txr->tx_ring_struct->ring_mask;\n \n \twhile (nr_pkts--) {\n \t\tstruct bnxt_sw_tx_bd *tx_buf;\n \t\tstruct rte_mbuf *mbuf;\n \n \t\ttx_buf = &txr->tx_buf_ring[cons];\n-\t\tcons = RING_NEXT(txr->tx_ring_struct, cons);\n+\t\tcons = (cons + 1) & ring_mask;\n \t\tmbuf = rte_pktmbuf_prefree_seg(tx_buf->mbuf);\n \t\tif (unlikely(mbuf == NULL))\n \t\t\tcontinue;\n@@ -376,18 +377,40 @@ bnxt_handle_tx_cp_vec(struct bnxt_tx_queue *txq)\n \t}\n }\n \n+static inline void\n+bnxt_xmit_one(struct rte_mbuf *mbuf, struct tx_bd_long *txbd,\n+\t      struct bnxt_sw_tx_bd *tx_buf)\n+{\n+\t__m128i desc;\n+\n+\ttx_buf->mbuf = mbuf;\n+\ttx_buf->nr_bds = 1;\n+\n+\tdesc = _mm_set_epi64x(mbuf->buf_iova + mbuf->data_off,\n+\t\t\t      bnxt_xmit_flags_len(mbuf->data_len,\n+\t\t\t\t\t\t  TX_BD_FLAGS_NOCMPL));\n+\tdesc = _mm_blend_epi16(desc, _mm_set_epi16(0, 0, 0, 0, 0, 0,\n+\t\t\t\t\t\t   mbuf->data_len, 0), 0x02);\n+\t_mm_store_si128((void *)txbd, desc);\n+}\n+\n static uint16_t\n-bnxt_xmit_fixed_burst_vec(void *tx_queue, struct rte_mbuf **tx_pkts,\n+bnxt_xmit_fixed_burst_vec(struct bnxt_tx_queue *txq, struct rte_mbuf **tx_pkts,\n \t\t\t  uint16_t nb_pkts)\n {\n-\tstruct bnxt_tx_queue *txq = tx_queue;\n \tstruct bnxt_tx_ring_info *txr = txq->tx_ring;\n-\tuint16_t prod = txr->tx_prod;\n-\tstruct rte_mbuf *tx_mbuf;\n-\tstruct tx_bd_long *txbd = NULL;\n+\tuint16_t tx_prod = txr->tx_prod;\n+\tstruct tx_bd_long *txbd;\n \tstruct bnxt_sw_tx_bd *tx_buf;\n \tuint16_t to_send;\n \n+\ttxbd = &txr->tx_desc_ring[tx_prod];\n+\ttx_buf = &txr->tx_buf_ring[tx_prod];\n+\n+\t/* Prefetch next transmit buffer descriptors. */\n+\trte_prefetch0(txbd);\n+\trte_prefetch0(txbd + 3);\n+\n \tnb_pkts = RTE_MIN(nb_pkts, bnxt_tx_avail(txq));\n \n \tif (unlikely(nb_pkts == 0))\n@@ -395,33 +418,35 @@ bnxt_xmit_fixed_burst_vec(void *tx_queue, struct rte_mbuf **tx_pkts,\n \n \t/* Handle TX burst request */\n \tto_send = nb_pkts;\n-\twhile (to_send) {\n-\t\ttx_mbuf = *tx_pkts++;\n-\t\trte_prefetch0(tx_mbuf);\n-\n-\t\ttx_buf = &txr->tx_buf_ring[prod];\n-\t\ttx_buf->mbuf = tx_mbuf;\n-\t\ttx_buf->nr_bds = 1;\n-\n-\t\ttxbd = &txr->tx_desc_ring[prod];\n-\t\ttxbd->address = tx_mbuf->buf_iova + tx_mbuf->data_off;\n-\t\ttxbd->len = tx_mbuf->data_len;\n-\t\ttxbd->flags_type = bnxt_xmit_flags_len(tx_mbuf->data_len,\n-\t\t\t\t\t\t       TX_BD_FLAGS_NOCMPL);\n-\t\tprod = RING_NEXT(txr->tx_ring_struct, prod);\n-\t\tto_send--;\n+\twhile (to_send >= RTE_BNXT_DESCS_PER_LOOP) {\n+\t\t/* Prefetch next transmit buffer descriptors. */\n+\t\trte_prefetch0(txbd + 4);\n+\t\trte_prefetch0(txbd + 7);\n+\n+\t\tbnxt_xmit_one(tx_pkts[0], txbd++, tx_buf++);\n+\t\tbnxt_xmit_one(tx_pkts[1], txbd++, tx_buf++);\n+\t\tbnxt_xmit_one(tx_pkts[2], txbd++, tx_buf++);\n+\t\tbnxt_xmit_one(tx_pkts[3], txbd++, tx_buf++);\n+\n+\t\tto_send -= RTE_BNXT_DESCS_PER_LOOP;\n+\t\ttx_pkts += RTE_BNXT_DESCS_PER_LOOP;\n \t}\n \n-\t/* Request a completion for last packet in burst */\n-\tif (txbd) {\n-\t\ttxbd->opaque = nb_pkts;\n-\t\ttxbd->flags_type &= ~TX_BD_LONG_FLAGS_NO_CMPL;\n+\twhile (to_send) {\n+\t\tbnxt_xmit_one(tx_pkts[0], txbd++, tx_buf++);\n+\t\tto_send--;\n+\t\ttx_pkts++;\n \t}\n \n+\t/* Request a completion for the final packet of burst. */\n \trte_compiler_barrier();\n-\tbnxt_db_write(&txr->tx_db, prod);\n+\ttxbd[-1].opaque = nb_pkts;\n+\ttxbd[-1].flags_type &= ~TX_BD_LONG_FLAGS_NO_CMPL;\n \n-\ttxr->tx_prod = prod;\n+\ttx_prod = RING_ADV(txr->tx_ring_struct, tx_prod, nb_pkts);\n+\tbnxt_db_write(&txr->tx_db, tx_prod);\n+\n+\ttxr->tx_prod = tx_prod;\n \n \treturn nb_pkts;\n }\n@@ -432,6 +457,8 @@ bnxt_xmit_pkts_vec(void *tx_queue, struct rte_mbuf **tx_pkts,\n {\n \tint nb_sent = 0;\n \tstruct bnxt_tx_queue *txq = tx_queue;\n+\tstruct bnxt_tx_ring_info *txr = txq->tx_ring;\n+\tuint16_t ring_size = txr->tx_ring_struct->ring_size;\n \n \t/* Tx queue was stopped; wait for it to be restarted */\n \tif (unlikely(!txq->tx_started)) {\n@@ -446,10 +473,19 @@ bnxt_xmit_pkts_vec(void *tx_queue, struct rte_mbuf **tx_pkts,\n \twhile (nb_pkts) {\n \t\tuint16_t ret, num;\n \n+\t\t/*\n+\t\t * Ensure that no more than RTE_BNXT_MAX_TX_BURST packets\n+\t\t * are transmitted before the next completion.\n+\t\t */\n \t\tnum = RTE_MIN(nb_pkts, RTE_BNXT_MAX_TX_BURST);\n-\t\tret = bnxt_xmit_fixed_burst_vec(tx_queue,\n-\t\t\t\t\t\t&tx_pkts[nb_sent],\n-\t\t\t\t\t\tnum);\n+\n+\t\t/*\n+\t\t * Ensure that a ring wrap does not occur within a call to\n+\t\t * bnxt_xmit_fixed_burst_vec().\n+\t\t */\n+\t\tnum = RTE_MIN(num,\n+\t\t\t      ring_size - (txr->tx_prod & (ring_size - 1)));\n+\t\tret = bnxt_xmit_fixed_burst_vec(txq, &tx_pkts[nb_sent], num);\n \t\tnb_sent += ret;\n \t\tnb_pkts -= ret;\n \t\tif (ret < num)\n",
    "prefixes": [
        "12/12"
    ]
}