get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 104934,
    "url": "http://patchwork.dpdk.org/api/patches/104934/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20211206121824.3493-7-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": "<20211206121824.3493-7-nipun.gupta@nxp.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20211206121824.3493-7-nipun.gupta@nxp.com",
    "date": "2021-12-06T12:18:13",
    "name": "[06/17] net/dpaa2: support multiple txqs en-queue for ordered",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "178032d0f14b5e5da750b8ba933fcf3a697f6c41",
    "submitter": {
        "id": 471,
        "url": "http://patchwork.dpdk.org/api/people/471/?format=api",
        "name": "Nipun Gupta",
        "email": "nipun.gupta@nxp.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patchwork.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20211206121824.3493-7-nipun.gupta@nxp.com/mbox/",
    "series": [
        {
            "id": 20873,
            "url": "http://patchwork.dpdk.org/api/series/20873/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=20873",
            "date": "2021-12-06T12:18:07",
            "name": "features and fixes on NXP eth devices",
            "version": 1,
            "mbox": "http://patchwork.dpdk.org/series/20873/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/104934/comments/",
    "check": "warning",
    "checks": "http://patchwork.dpdk.org/api/patches/104934/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 40363A034F;\n\tMon,  6 Dec 2021 13:19:07 +0100 (CET)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 27DD342737;\n\tMon,  6 Dec 2021 13:18:37 +0100 (CET)",
            "from inva020.nxp.com (inva020.nxp.com [92.121.34.13])\n by mails.dpdk.org (Postfix) with ESMTP id 1C17541186\n for <dev@dpdk.org>; Mon,  6 Dec 2021 13:18:30 +0100 (CET)",
            "from inva020.nxp.com (localhost [127.0.0.1])\n by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id EEB241A1320;\n Mon,  6 Dec 2021 13:18:29 +0100 (CET)",
            "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 8D55C1A1329;\n Mon,  6 Dec 2021 13:18:29 +0100 (CET)",
            "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 A0B1D183AD05;\n Mon,  6 Dec 2021 20:18:28 +0800 (+08)"
        ],
        "From": "nipun.gupta@nxp.com",
        "To": "dev@dpdk.org",
        "Cc": "thomas@monjalon.net, ferruh.yigit@intel.com, hemant.agrawal@nxp.com,\n Jun Yang <jun.yang@nxp.com>",
        "Subject": "[PATCH 06/17] net/dpaa2: support multiple txqs en-queue for ordered",
        "Date": "Mon,  6 Dec 2021 17:48:13 +0530",
        "Message-Id": "<20211206121824.3493-7-nipun.gupta@nxp.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20211206121824.3493-1-nipun.gupta@nxp.com>",
        "References": "<20211206121824.3493-1-nipun.gupta@nxp.com>",
        "X-Virus-Scanned": "ClamAV using ClamSMTP",
        "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"
    },
    "content": "From: Jun Yang <jun.yang@nxp.com>\n\nSupport the tx enqueue in order queue mode, where queue id\nfor 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     |   4 +\n drivers/net/dpaa2/dpaa2_rxtx.c       | 142 +++++++++++++++++++++++++++\n drivers/net/dpaa2/version.map        |   1 +\n 4 files changed, 155 insertions(+), 4 deletions(-)",
    "diff": "diff --git a/drivers/event/dpaa2/dpaa2_eventdev.c b/drivers/event/dpaa2/dpaa2_eventdev.c\nindex 4d94c315d2..f3d8a7e4f1 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@@ -1003,16 +1003,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 c21571e63d..e001a7e49d 100644\n--- a/drivers/net/dpaa2/dpaa2_ethdev.h\n+++ b/drivers/net/dpaa2/dpaa2_ethdev.h\n@@ -241,6 +241,10 @@ 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+__rte_internal\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 ee3ed1b152..1096b1cf1d 100644\n--- a/drivers/net/dpaa2/dpaa2_rxtx.c\n+++ b/drivers/net/dpaa2/dpaa2_rxtx.c\n@@ -1468,6 +1468,148 @@ dpaa2_set_enqueue_descriptor(struct dpaa2_queue *dpaa2_q,\n \t*dpaa2_seqn(m) = DPAA2_INVALID_MBUF_SEQN;\n }\n \n+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& RTE_MBUF_F_TX_VLAN)) {\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 2fe61f3442..cc82b8579d 100644\n--- a/drivers/net/dpaa2/version.map\n+++ b/drivers/net/dpaa2/version.map\n@@ -21,6 +21,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": [
        "06/17"
    ]
}