get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 80648,
    "url": "http://patches.dpdk.org/api/patches/80648/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20201014055517.1214386-27-jiawenwu@trustnetic.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": "<20201014055517.1214386-27-jiawenwu@trustnetic.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20201014055517.1214386-27-jiawenwu@trustnetic.com",
    "date": "2020-10-14T05:54:47",
    "name": "[v3,26/56] net/txgbe: fill Tx prepare function",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "131b6fcb9bd42175f735db99892ad27a7e25c1f8",
    "submitter": {
        "id": 1932,
        "url": "http://patches.dpdk.org/api/people/1932/?format=api",
        "name": "Jiawen Wu",
        "email": "jiawenwu@trustnetic.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20201014055517.1214386-27-jiawenwu@trustnetic.com/mbox/",
    "series": [
        {
            "id": 12938,
            "url": "http://patches.dpdk.org/api/series/12938/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=12938",
            "date": "2020-10-14T05:54:22",
            "name": "net: txgbe PMD",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/12938/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/80648/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/80648/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 CA18DA04B7;\n\tWed, 14 Oct 2020 08:05:46 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 573221DBCC;\n\tWed, 14 Oct 2020 07:54:55 +0200 (CEST)",
            "from smtpbg506.qq.com (smtpbg506.qq.com [203.205.250.33])\n by dpdk.org (Postfix) with ESMTP id 50B981DC78\n for <dev@dpdk.org>; Wed, 14 Oct 2020 07:54:38 +0200 (CEST)",
            "from localhost.localdomain.com (unknown [183.129.236.74])\n by esmtp10.qq.com (ESMTP) with\n id ; Wed, 14 Oct 2020 13:54:34 +0800 (CST)"
        ],
        "X-QQ-mid": "bizesmtp28t1602654874tq3k3yc4",
        "X-QQ-SSF": "01400000000000C0C000B00A0000000",
        "X-QQ-FEAT": "x/IOQElPckIDjjHh8NemwzuDoD5n59wZWs7Z8PKSg3qd2lldILcuQ676xzxyB\n P3fUsRuimXq12TgEx4I5IUuYzRi+b9sf6pzImdBltZm1CiAyKPDC23NiT8BKnj2IXe0Kb0h\n nnkPiP8+xS6mJtbNryGrEUsyFhJ3sTg60gYNldsG2yONfaFF5cmBP2uZkAxAHK7vsQZokfh\n RI2MHj+jfxSbWWICrQGO307oa54KoVG570P9LcJHLZQYaE9xq8HhY8uk3nKXaces8ehy1Pw\n O+6DOZ8XV9gqgUM4Ewf+oesgrj8ej4UfP1Gvl+RAoHfhtgO/mcBz1lonf5WgtxBstTbf/EP\n 3B2Rn5P/Jd+4iRny7kd4vOLpZjoKQ==",
        "X-QQ-GoodBg": "2",
        "From": "Jiawen Wu <jiawenwu@trustnetic.com>",
        "To": "dev@dpdk.org",
        "Cc": "Jiawen Wu <jiawenwu@trustnetic.com>",
        "Date": "Wed, 14 Oct 2020 13:54:47 +0800",
        "Message-Id": "<20201014055517.1214386-27-jiawenwu@trustnetic.com>",
        "X-Mailer": "git-send-email 2.18.4",
        "In-Reply-To": "<20201014055517.1214386-1-jiawenwu@trustnetic.com>",
        "References": "<20201014055517.1214386-1-jiawenwu@trustnetic.com>",
        "X-QQ-SENDSIZE": "520",
        "Feedback-ID": "bizesmtp:trustnetic.com:qybgforeign:qybgforeign6",
        "X-QQ-Bgrelay": "1",
        "Subject": "[dpdk-dev] [PATCH v3 26/56] net/txgbe: fill Tx prepare function",
        "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": "Fill transmit prepare function.\n\nSigned-off-by: Jiawen Wu <jiawenwu@trustnetic.com>\n---\n drivers/net/txgbe/txgbe_ethdev.c |  1 +\n drivers/net/txgbe/txgbe_ethdev.h |  3 ++\n drivers/net/txgbe/txgbe_rxtx.c   | 61 ++++++++++++++++++++++++++++++++\n 3 files changed, 65 insertions(+)",
    "diff": "diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c\nindex b1deba63c..09317e3c2 100644\n--- a/drivers/net/txgbe/txgbe_ethdev.c\n+++ b/drivers/net/txgbe/txgbe_ethdev.c\n@@ -117,6 +117,7 @@ eth_txgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)\n \n \teth_dev->dev_ops = &txgbe_eth_dev_ops;\n \teth_dev->tx_pkt_burst = &txgbe_xmit_pkts;\n+\teth_dev->tx_pkt_prepare = &txgbe_prep_pkts;\n \n \t/*\n \t * For secondary processes, we don't initialise any further as primary\ndiff --git a/drivers/net/txgbe/txgbe_ethdev.h b/drivers/net/txgbe/txgbe_ethdev.h\nindex 834aae72b..12d176166 100644\n--- a/drivers/net/txgbe/txgbe_ethdev.h\n+++ b/drivers/net/txgbe/txgbe_ethdev.h\n@@ -119,6 +119,9 @@ uint16_t txgbe_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,\n uint16_t txgbe_xmit_pkts_simple(void *tx_queue, struct rte_mbuf **tx_pkts,\n \t\tuint16_t nb_pkts);\n \n+uint16_t txgbe_prep_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,\n+\t\tuint16_t nb_pkts);\n+\n void txgbe_set_ivar_map(struct txgbe_hw *hw, int8_t direction,\n \t\t\t       uint8_t queue, uint8_t msix_vector);\n \ndiff --git a/drivers/net/txgbe/txgbe_rxtx.c b/drivers/net/txgbe/txgbe_rxtx.c\nindex b35b7de1c..f95102df8 100644\n--- a/drivers/net/txgbe/txgbe_rxtx.c\n+++ b/drivers/net/txgbe/txgbe_rxtx.c\n@@ -19,6 +19,8 @@\n #include <rte_mempool.h>\n #include <rte_malloc.h>\n #include <rte_mbuf.h>\n+#include <rte_ip.h>\n+#include <rte_net.h>\n \n #include \"txgbe_logs.h\"\n #include \"base/txgbe.h\"\n@@ -37,6 +39,9 @@ static const u64 TXGBE_TX_OFFLOAD_MASK = (PKT_TX_IP_CKSUM |\n \t\tPKT_TX_TUNNEL_MASK |\n \t\tPKT_TX_OUTER_IP_CKSUM);\n \n+#define TXGBE_TX_OFFLOAD_NOTSUP_MASK \\\n+\t\t(PKT_TX_OFFLOAD_MASK ^ TXGBE_TX_OFFLOAD_MASK)\n+\n static int\n txgbe_is_vf(struct rte_eth_dev *dev)\n {\n@@ -930,6 +935,57 @@ txgbe_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,\n \treturn nb_tx;\n }\n \n+/*********************************************************************\n+ *\n+ *  TX prep functions\n+ *\n+ **********************************************************************/\n+uint16_t\n+txgbe_prep_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)\n+{\n+\tint i, ret;\n+\tuint64_t ol_flags;\n+\tstruct rte_mbuf *m;\n+\tstruct txgbe_tx_queue *txq = (struct txgbe_tx_queue *)tx_queue;\n+\n+\tfor (i = 0; i < nb_pkts; i++) {\n+\t\tm = tx_pkts[i];\n+\t\tol_flags = m->ol_flags;\n+\n+\t\t/**\n+\t\t * Check if packet meets requirements for number of segments\n+\t\t *\n+\t\t * NOTE: for txgbe it's always (40 - WTHRESH) for both TSO and\n+\t\t *       non-TSO\n+\t\t */\n+\n+\t\tif (m->nb_segs > TXGBE_TX_MAX_SEG - txq->wthresh) {\n+\t\t\trte_errno = -EINVAL;\n+\t\t\treturn i;\n+\t\t}\n+\n+\t\tif (ol_flags & TXGBE_TX_OFFLOAD_NOTSUP_MASK) {\n+\t\t\trte_errno = -ENOTSUP;\n+\t\t\treturn i;\n+\t\t}\n+\n+#ifdef RTE_LIBRTE_ETHDEV_DEBUG\n+\t\tret = rte_validate_tx_offload(m);\n+\t\tif (ret != 0) {\n+\t\t\trte_errno = ret;\n+\t\t\treturn i;\n+\t\t}\n+#endif\n+\t\tret = rte_net_intel_cksum_prepare(m);\n+\t\tif (ret != 0) {\n+\t\t\trte_errno = ret;\n+\t\t\treturn i;\n+\t\t}\n+\t}\n+\n+\treturn i;\n+}\n+\n uint64_t\n txgbe_get_rx_queue_offloads(struct rte_eth_dev *dev __rte_unused)\n {\n@@ -1016,6 +1072,10 @@ static const struct txgbe_txq_ops def_txq_ops = {\n \t.free_swring = txgbe_tx_free_swring,\n };\n \n+/* Takes an ethdev and a queue and sets up the tx function to be used based on\n+ * the queue parameters. Used in tx_queue_setup by primary process and then\n+ * in dev_init by secondary process when attaching to an existing ethdev.\n+ */\n void __rte_cold\n txgbe_set_tx_function(struct rte_eth_dev *dev, struct txgbe_tx_queue *txq)\n {\n@@ -1035,6 +1095,7 @@ txgbe_set_tx_function(struct rte_eth_dev *dev, struct txgbe_tx_queue *txq)\n \t\t\t\t(unsigned long)txq->tx_free_thresh,\n \t\t\t\t(unsigned long)RTE_PMD_TXGBE_TX_MAX_BURST);\n \t\tdev->tx_pkt_burst = txgbe_xmit_pkts;\n+\t\tdev->tx_pkt_prepare = txgbe_prep_pkts;\n \t}\n }\n \n",
    "prefixes": [
        "v3",
        "26/56"
    ]
}