get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 99778,
    "url": "http://patchwork.dpdk.org/api/patches/99778/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20210927122650.30881-5-nipun.gupta@nxp.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.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": "<20210927122650.30881-5-nipun.gupta@nxp.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210927122650.30881-5-nipun.gupta@nxp.com",
    "date": "2021-09-27T12:26:43",
    "name": "[04/11] net/dpaa2: support multiple Tx queues enqueue for ordered",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "e417754383ce42a830224b39890f42655afac9eb",
    "submitter": {
        "id": 471,
        "url": "http://patchwork.dpdk.org/api/people/471/?format=api",
        "name": "Nipun Gupta",
        "email": "nipun.gupta@nxp.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20210927122650.30881-5-nipun.gupta@nxp.com/mbox/",
    "series": [
        {
            "id": 19191,
            "url": "http://patchwork.dpdk.org/api/series/19191/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=19191",
            "date": "2021-09-27T12:26:39",
            "name": "NXP DPAAx Bus and PMD changes",
            "version": 1,
            "mbox": "http://patchwork.dpdk.org/series/19191/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/99778/comments/",
    "check": "warning",
    "checks": "http://patchwork.dpdk.org/api/patches/99778/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 432BDA0548;\n\tMon, 27 Sep 2021 14:27:26 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id F0CEA41104;\n\tMon, 27 Sep 2021 14:27:01 +0200 (CEST)",
            "from inva020.nxp.com (inva020.nxp.com [92.121.34.13])\n by mails.dpdk.org (Postfix) with ESMTP id 1107140E3C\n for <dev@dpdk.org>; Mon, 27 Sep 2021 14:26:55 +0200 (CEST)",
            "from inva020.nxp.com (localhost [127.0.0.1])\n by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id E5F061A2618;\n Mon, 27 Sep 2021 14:26:54 +0200 (CEST)",
            "from aprdc01srsp001v.ap-rdc01.nxp.com\n (aprdc01srsp001v.ap-rdc01.nxp.com [165.114.16.16])\n by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id 6BD1D1A25F5;\n Mon, 27 Sep 2021 14:26:54 +0200 (CEST)",
            "from lsv03274.swis.in-blr01.nxp.com (lsv03274.swis.in-blr01.nxp.com\n [92.120.147.114])\n by aprdc01srsp001v.ap-rdc01.nxp.com (Postfix) with ESMTP id 4C786183ACDC;\n Mon, 27 Sep 2021 20:26:53 +0800 (+08)"
        ],
        "From": "nipun.gupta@nxp.com",
        "To": "dev@dpdk.org",
        "Cc": "thomas@monjalon.net, ferruh.yigit@intel.com, hemant.agrawal@nxp.com,\n sachin.saxena@nxp.com, Jun Yang <jun.yang@nxp.com>",
        "Date": "Mon, 27 Sep 2021 17:56:43 +0530",
        "Message-Id": "<20210927122650.30881-5-nipun.gupta@nxp.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20210927122650.30881-1-nipun.gupta@nxp.com>",
        "References": "<20210927122650.30881-1-nipun.gupta@nxp.com>",
        "X-Virus-Scanned": "ClamAV using ClamSMTP",
        "Subject": "[dpdk-dev] [PATCH 04/11] net/dpaa2: support multiple Tx queues\n enqueue for ordered",
        "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": "From: Jun Yang <jun.yang@nxp.com>\n\nSupport the tx enqueue in order queue mode, where the\nqueue id for each event may be different.\n\nSigned-off-by: Jun Yang <jun.yang@nxp.com>\n---\n drivers/event/dpaa2/dpaa2_eventdev.c |  12 ++-\n drivers/net/dpaa2/dpaa2_ethdev.h     |   3 +\n drivers/net/dpaa2/dpaa2_rxtx.c       | 142 +++++++++++++++++++++++++++\n drivers/net/dpaa2/version.map        |   1 +\n 4 files changed, 154 insertions(+), 4 deletions(-)",
    "diff": "diff --git a/drivers/event/dpaa2/dpaa2_eventdev.c b/drivers/event/dpaa2/dpaa2_eventdev.c\nindex 5ccf22f77f..28f3bbca9a 100644\n--- a/drivers/event/dpaa2/dpaa2_eventdev.c\n+++ b/drivers/event/dpaa2/dpaa2_eventdev.c\n@@ -1,5 +1,5 @@\n /* SPDX-License-Identifier: BSD-3-Clause\n- * Copyright 2017,2019 NXP\n+ * Copyright 2017,2019-2021 NXP\n  */\n \n #include <assert.h>\n@@ -1002,16 +1002,20 @@ dpaa2_eventdev_txa_enqueue(void *port,\n \t\t\t   struct rte_event ev[],\n \t\t\t   uint16_t nb_events)\n {\n-\tstruct rte_mbuf *m = (struct rte_mbuf *)ev[0].mbuf;\n+\tvoid *txq[32];\n+\tstruct rte_mbuf *m[32];\n \tuint8_t qid, i;\n \n \tRTE_SET_USED(port);\n \n \tfor (i = 0; i < nb_events; i++) {\n-\t\tqid = rte_event_eth_tx_adapter_txq_get(m);\n-\t\trte_eth_tx_burst(m->port, qid, &m, 1);\n+\t\tm[i] = (struct rte_mbuf *)ev[i].mbuf;\n+\t\tqid = rte_event_eth_tx_adapter_txq_get(m[i]);\n+\t\ttxq[i] = rte_eth_devices[m[i]->port].data->tx_queues[qid];\n \t}\n \n+\tdpaa2_dev_tx_multi_txq_ordered(txq, m, nb_events);\n+\n \treturn nb_events;\n }\n \ndiff --git a/drivers/net/dpaa2/dpaa2_ethdev.h b/drivers/net/dpaa2/dpaa2_ethdev.h\nindex 3f34d7ecff..07a6811dd2 100644\n--- a/drivers/net/dpaa2/dpaa2_ethdev.h\n+++ b/drivers/net/dpaa2/dpaa2_ethdev.h\n@@ -236,6 +236,9 @@ void dpaa2_dev_process_ordered_event(struct qbman_swp *swp,\n uint16_t dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts);\n uint16_t dpaa2_dev_tx_ordered(void *queue, struct rte_mbuf **bufs,\n \t\t\t      uint16_t nb_pkts);\n+uint16_t dpaa2_dev_tx_multi_txq_ordered(void **queue,\n+\t\tstruct rte_mbuf **bufs, uint16_t nb_pkts);\n+\n uint16_t dummy_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts);\n void dpaa2_dev_free_eqresp_buf(uint16_t eqresp_ci);\n void dpaa2_flow_clean(struct rte_eth_dev *dev);\ndiff --git a/drivers/net/dpaa2/dpaa2_rxtx.c b/drivers/net/dpaa2/dpaa2_rxtx.c\nindex f40369e2c3..447063b3c3 100644\n--- a/drivers/net/dpaa2/dpaa2_rxtx.c\n+++ b/drivers/net/dpaa2/dpaa2_rxtx.c\n@@ -1445,6 +1445,148 @@ dpaa2_set_enqueue_descriptor(struct dpaa2_queue *dpaa2_q,\n \t*dpaa2_seqn(m) = DPAA2_INVALID_MBUF_SEQN;\n }\n \n+__rte_internal uint16_t\n+dpaa2_dev_tx_multi_txq_ordered(void **queue,\n+\t\tstruct rte_mbuf **bufs, uint16_t nb_pkts)\n+{\n+\t/* Function to transmit the frames to multiple queues respectively.*/\n+\tuint32_t loop, retry_count;\n+\tint32_t ret;\n+\tstruct qbman_fd fd_arr[MAX_TX_RING_SLOTS];\n+\tuint32_t frames_to_send;\n+\tstruct rte_mempool *mp;\n+\tstruct qbman_eq_desc eqdesc[MAX_TX_RING_SLOTS];\n+\tstruct dpaa2_queue *dpaa2_q[MAX_TX_RING_SLOTS];\n+\tstruct qbman_swp *swp;\n+\tuint16_t bpid;\n+\tstruct rte_mbuf *mi;\n+\tstruct rte_eth_dev_data *eth_data;\n+\tstruct dpaa2_dev_priv *priv;\n+\tstruct dpaa2_queue *order_sendq;\n+\n+\tif (unlikely(!DPAA2_PER_LCORE_DPIO)) {\n+\t\tret = dpaa2_affine_qbman_swp();\n+\t\tif (ret) {\n+\t\t\tDPAA2_PMD_ERR(\n+\t\t\t\t\"Failed to allocate IO portal, tid: %d\\n\",\n+\t\t\t\trte_gettid());\n+\t\t\treturn 0;\n+\t\t}\n+\t}\n+\tswp = DPAA2_PER_LCORE_PORTAL;\n+\n+\tfor (loop = 0; loop < nb_pkts; loop++) {\n+\t\tdpaa2_q[loop] = (struct dpaa2_queue *)queue[loop];\n+\t\teth_data = dpaa2_q[loop]->eth_data;\n+\t\tpriv = eth_data->dev_private;\n+\t\tqbman_eq_desc_clear(&eqdesc[loop]);\n+\t\tif (*dpaa2_seqn(*bufs) && priv->en_ordered) {\n+\t\t\torder_sendq = (struct dpaa2_queue *)priv->tx_vq[0];\n+\t\t\tdpaa2_set_enqueue_descriptor(order_sendq,\n+\t\t\t\t\t\t\t     (*bufs),\n+\t\t\t\t\t\t\t     &eqdesc[loop]);\n+\t\t} else {\n+\t\t\tqbman_eq_desc_set_no_orp(&eqdesc[loop],\n+\t\t\t\t\t\t\t DPAA2_EQ_RESP_ERR_FQ);\n+\t\t\tqbman_eq_desc_set_fq(&eqdesc[loop],\n+\t\t\t\t\t\t     dpaa2_q[loop]->fqid);\n+\t\t}\n+\n+\t\tretry_count = 0;\n+\t\twhile (qbman_result_SCN_state(dpaa2_q[loop]->cscn)) {\n+\t\t\tretry_count++;\n+\t\t\t/* Retry for some time before giving up */\n+\t\t\tif (retry_count > CONG_RETRY_COUNT)\n+\t\t\t\tgoto send_frames;\n+\t\t}\n+\n+\t\tif (likely(RTE_MBUF_DIRECT(*bufs))) {\n+\t\t\tmp = (*bufs)->pool;\n+\t\t\t/* Check the basic scenario and set\n+\t\t\t * the FD appropriately here itself.\n+\t\t\t */\n+\t\t\tif (likely(mp && mp->ops_index ==\n+\t\t\t\tpriv->bp_list->dpaa2_ops_index &&\n+\t\t\t\t(*bufs)->nb_segs == 1 &&\n+\t\t\t\trte_mbuf_refcnt_read((*bufs)) == 1)) {\n+\t\t\t\tif (unlikely((*bufs)->ol_flags\n+\t\t\t\t\t& PKT_TX_VLAN_PKT)) {\n+\t\t\t\t\tret = rte_vlan_insert(bufs);\n+\t\t\t\t\tif (ret)\n+\t\t\t\t\t\tgoto send_frames;\n+\t\t\t\t}\n+\t\t\t\tDPAA2_MBUF_TO_CONTIG_FD((*bufs),\n+\t\t\t\t\t&fd_arr[loop],\n+\t\t\t\t\tmempool_to_bpid(mp));\n+\t\t\t\tbufs++;\n+\t\t\t\tdpaa2_q[loop]++;\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\t\t} else {\n+\t\t\tmi = rte_mbuf_from_indirect(*bufs);\n+\t\t\tmp = mi->pool;\n+\t\t}\n+\t\t/* Not a hw_pkt pool allocated frame */\n+\t\tif (unlikely(!mp || !priv->bp_list)) {\n+\t\t\tDPAA2_PMD_ERR(\"Err: No buffer pool attached\");\n+\t\t\tgoto send_frames;\n+\t\t}\n+\n+\t\tif (mp->ops_index != priv->bp_list->dpaa2_ops_index) {\n+\t\t\tDPAA2_PMD_WARN(\"Non DPAA2 buffer pool\");\n+\t\t\t/* alloc should be from the default buffer pool\n+\t\t\t * attached to this interface\n+\t\t\t */\n+\t\t\tbpid = priv->bp_list->buf_pool.bpid;\n+\n+\t\t\tif (unlikely((*bufs)->nb_segs > 1)) {\n+\t\t\t\tDPAA2_PMD_ERR(\n+\t\t\t\t\t\"S/G not supp for non hw offload buffer\");\n+\t\t\t\tgoto send_frames;\n+\t\t\t}\n+\t\t\tif (eth_copy_mbuf_to_fd(*bufs,\n+\t\t\t\t\t\t&fd_arr[loop], bpid)) {\n+\t\t\t\tgoto send_frames;\n+\t\t\t}\n+\t\t\t/* free the original packet */\n+\t\t\trte_pktmbuf_free(*bufs);\n+\t\t} else {\n+\t\t\tbpid = mempool_to_bpid(mp);\n+\t\t\tif (unlikely((*bufs)->nb_segs > 1)) {\n+\t\t\t\tif (eth_mbuf_to_sg_fd(*bufs,\n+\t\t\t\t\t\t      &fd_arr[loop],\n+\t\t\t\t\t\t      mp,\n+\t\t\t\t\t\t      bpid))\n+\t\t\t\t\tgoto send_frames;\n+\t\t\t} else {\n+\t\t\t\teth_mbuf_to_fd(*bufs,\n+\t\t\t\t\t       &fd_arr[loop], bpid);\n+\t\t\t}\n+\t\t}\n+\n+\t\tbufs++;\n+\t\tdpaa2_q[loop]++;\n+\t}\n+\n+send_frames:\n+\tframes_to_send = loop;\n+\tloop = 0;\n+\twhile (loop < frames_to_send) {\n+\t\tret = qbman_swp_enqueue_multiple_desc(swp, &eqdesc[loop],\n+\t\t\t\t&fd_arr[loop],\n+\t\t\t\tframes_to_send - loop);\n+\t\tif (likely(ret > 0)) {\n+\t\t\tloop += ret;\n+\t\t} else {\n+\t\t\tretry_count++;\n+\t\t\tif (retry_count > DPAA2_MAX_TX_RETRY_COUNT)\n+\t\t\t\tbreak;\n+\t\t}\n+\t}\n+\n+\treturn loop;\n+}\n+\n /* Callback to handle sending ordered packets through WRIOP based interface */\n uint16_t\n dpaa2_dev_tx_ordered(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)\ndiff --git a/drivers/net/dpaa2/version.map b/drivers/net/dpaa2/version.map\nindex 3ab96344c4..f9786af7e4 100644\n--- a/drivers/net/dpaa2/version.map\n+++ b/drivers/net/dpaa2/version.map\n@@ -19,6 +19,7 @@ EXPERIMENTAL {\n INTERNAL {\n \tglobal:\n \n+\tdpaa2_dev_tx_multi_txq_ordered;\n \tdpaa2_eth_eventq_attach;\n \tdpaa2_eth_eventq_detach;\n \n",
    "prefixes": [
        "04/11"
    ]
}