get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 90083,
    "url": "http://patches.dpdk.org/api/patches/90083/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20210330082212.707-3-pbhagavatula@marvell.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": "<20210330082212.707-3-pbhagavatula@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210330082212.707-3-pbhagavatula@marvell.com",
    "date": "2021-03-30T08:22:05",
    "name": "[v9,2/8] eventdev: introduce event vector Rx capability",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "c55e83b24072c435b51519b171c4c13213fe86a9",
    "submitter": {
        "id": 1183,
        "url": "http://patches.dpdk.org/api/people/1183/?format=api",
        "name": "Pavan Nikhilesh Bhagavatula",
        "email": "pbhagavatula@marvell.com"
    },
    "delegate": {
        "id": 310,
        "url": "http://patches.dpdk.org/api/users/310/?format=api",
        "username": "jerin",
        "first_name": "Jerin",
        "last_name": "Jacob",
        "email": "jerinj@marvell.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20210330082212.707-3-pbhagavatula@marvell.com/mbox/",
    "series": [
        {
            "id": 15971,
            "url": "http://patches.dpdk.org/api/series/15971/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=15971",
            "date": "2021-03-30T08:22:03",
            "name": "Introduce event vectorization",
            "version": 9,
            "mbox": "http://patches.dpdk.org/series/15971/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/90083/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/90083/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 1D685A034F;\n\tTue, 30 Mar 2021 10:22:41 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id D4E1C140DB4;\n\tTue, 30 Mar 2021 10:22:38 +0200 (CEST)",
            "from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com\n [67.231.148.174])\n by mails.dpdk.org (Postfix) with ESMTP id 9E04F140DB2\n for <dev@dpdk.org>; Tue, 30 Mar 2021 10:22:37 +0200 (CEST)",
            "from pps.filterd (m0045849.ppops.net [127.0.0.1])\n by mx0a-0016f401.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id\n 12U8KglB025696; Tue, 30 Mar 2021 01:22:34 -0700",
            "from dc5-exch02.marvell.com ([199.233.59.182])\n by mx0a-0016f401.pphosted.com with ESMTP id 37k63bcnm5-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);\n Tue, 30 Mar 2021 01:22:34 -0700",
            "from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.2;\n Tue, 30 Mar 2021 01:22:33 -0700",
            "from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.2 via Frontend\n Transport; Tue, 30 Mar 2021 01:22:32 -0700",
            "from BG-LT7430.marvell.com (BG-LT7430.marvell.com [10.28.177.176])\n by maili.marvell.com (Postfix) with ESMTP id 509F13F7041;\n Tue, 30 Mar 2021 01:22:28 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com;\n h=from : to : cc :\n subject : date : message-id : in-reply-to : references : mime-version :\n content-transfer-encoding : content-type; s=pfpt0220;\n bh=7acxaBFm0r5EAR9+vZDWZTVFcVK2FAfFK0W2w3BnARs=;\n b=R+G3B7cl+wBxM/jhzz5nqadRNxbvUljZwoB6h0uMcRm1iYnoDUo4vYZq7ZKMeND/VScp\n fF+TwDpBsjYLuPN1j1Ej4v6p5Mnj6ySE0BC6EPTaOukTF/ziawLJat4fZgyp1nRPY4b0\n zHz2RNnNd1nSx1wC45/Gh5P+VPTZnrWP53hgiPVlzhuVwWUGa2nUm/RJtX2aXpXF63SI\n GhArESuyBRinMCo+a1xw1dILGJ2hPfA7Rrr/C4uWrWDK0tHJaqcwPeevo7cMGvnPWDu1\n SPAs1Xnl/rQKZB5lDq5aRpBrsH2hzcvuEvMRmYUdX/qyfZ9F6lQ3y4xDJcIjGXdxytmp Dg==",
        "From": "<pbhagavatula@marvell.com>",
        "To": "<jerinj@marvell.com>, <jay.jayatheerthan@intel.com>,\n <erik.g.carrillo@intel.com>, <abhinandan.gujjar@intel.com>,\n <timothy.mcdaniel@intel.com>, <hemant.agrawal@nxp.com>,\n <harry.van.haaren@intel.com>, <mattias.ronnblom@ericsson.com>,\n <liang.j.ma@intel.com>, Ray Kinsella <mdr@ashroe.eu>, Neil Horman\n <nhorman@tuxdriver.com>",
        "CC": "<dev@dpdk.org>, Pavan Nikhilesh <pbhagavatula@marvell.com>",
        "Date": "Tue, 30 Mar 2021 13:52:05 +0530",
        "Message-ID": "<20210330082212.707-3-pbhagavatula@marvell.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20210330082212.707-1-pbhagavatula@marvell.com>",
        "References": "<20210326140850.7332-1-pbhagavatula@marvell.com>\n <20210330082212.707-1-pbhagavatula@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-ORIG-GUID": "lrzajTQpQ_raZY5c-CNJGW-Y7_V9kKxf",
        "X-Proofpoint-GUID": "lrzajTQpQ_raZY5c-CNJGW-Y7_V9kKxf",
        "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10434:6.0.369, 18.0.761\n definitions=2021-03-30_02:2021-03-26,\n 2021-03-30 signatures=0",
        "Subject": "[dpdk-dev] [PATCH v9 2/8] eventdev: introduce event vector Rx\n capability",
        "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: Pavan Nikhilesh <pbhagavatula@marvell.com>\n\nIntroduce event ethernet Rx adapter event vector capability.\n\nIf an event eth Rx adapter has the capability of\nRTE_EVENT_ETH_RX_ADAPTER_CAP_EVENT_VECTOR then a given Rx queue\ncan be configured to enable event vectorization by passing the\nflag RTE_EVENT_ETH_RX_ADAPTER_QUEUE_EVENT_VECTOR to\nrte_event_eth_rx_adapter_queue_conf::rx_queue_flags while configuring\nRx adapter through rte_event_eth_rx_adapter_queue_add().\n\nThe max vector size, vector timeout define the vector size and\nmempool used for allocating vector event are configured through\nrte_event_eth_rx_adapter_queue_add. The element size of the element\nin the vector pool should be equal to\n    sizeof(struct rte_event_vector) + (vector_sz * sizeof(uintptr_t))\n\nApplication can use `rte_event_vector_pool_create` to create the\nvector mempool used for\nrte_event_eth_rx_adapter_queue_conf::vector_mp.\n\nThe Rx adapter would be responsible for vectorizing the mbufs\nbased on the flow, the vector limits configured by the application\nand add the vector event of mbufs to the event queue set via\nrte_event_eth_rx_adapter_queue_conf::ev::queue_id.\nIt should also mark rte_event_vector::union_valid and fill\nrte_event_vector::port, rte_event_vector::queue.\n\nSigned-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>\nAcked-by: Jerin Jacob <jerinj@marvell.com>\nAcked-by: Ray Kinsella <mdr@ashroe.eu>\nAcked-by: Jay Jayatheerthan <jay.jayatheerthan@intel.com>\n---\n .../prog_guide/event_ethernet_rx_adapter.rst  |  38 ++++++\n lib/librte_eventdev/eventdev_pmd.h            |  53 ++++++++\n .../rte_event_eth_rx_adapter.c                | 114 ++++++++++++++++++\n .../rte_event_eth_rx_adapter.h                | 105 ++++++++++++++++\n lib/librte_eventdev/rte_eventdev.h            |  30 ++++-\n lib/librte_eventdev/version.map               |   2 +\n 6 files changed, 340 insertions(+), 2 deletions(-)",
    "diff": "diff --git a/doc/guides/prog_guide/event_ethernet_rx_adapter.rst b/doc/guides/prog_guide/event_ethernet_rx_adapter.rst\nindex cb44ce0e4..5eefef355 100644\n--- a/doc/guides/prog_guide/event_ethernet_rx_adapter.rst\n+++ b/doc/guides/prog_guide/event_ethernet_rx_adapter.rst\n@@ -186,3 +186,41 @@ the event buffer fill level is low. The\n ``rte_event_eth_rx_adapter_cb_register()`` function allow the application\n to register a callback that selects which packets to enqueue to the event\n device.\n+\n+Rx event vectorization\n+~~~~~~~~~~~~~~~~~~~~~~\n+\n+The event devices, ethernet device pairs which support the capability\n+``RTE_EVENT_ETH_RX_ADAPTER_CAP_EVENT_VECTOR`` can aggregate packets based on\n+flow characteristics and generate a ``rte_event`` containing ``rte_event_vector``\n+whose event type is either ``RTE_EVENT_TYPE_ETHDEV_VECTOR`` or\n+``RTE_EVENT_TYPE_ETH_RX_ADAPTER_VECTOR``.\n+The aggregation size and timeout are configurable at a queue level and the\n+maximum, minimum vector sizes and timeouts vary based on the device capability\n+and can be queried using ``rte_event_eth_rx_adapter_vector_limits_get``.\n+The Rx adapter additionally might include useful data such as ethernet device\n+port and queue identifier in the ``rte_event_vector::port`` and\n+``rte_event_vector::queue`` and mark ``rte_event_vector::attr_valid`` as true.\n+\n+A loop processing ``rte_event_vector`` containing mbufs is shown below.\n+\n+.. code-block:: c\n+\n+        event = rte_event_dequeue_burst(event_dev, event_port, &event,\n+                                        1, 0);\n+        if (!event)\n+                continue;\n+\n+        switch (ev.event_type) {\n+        case RTE_EVENT_TYPE_ETH_RX_ADAPTER_VECTOR:\n+        case RTE_EVENT_TYPE_ETHDEV_VECTOR:\n+                struct rte_mbufs **mbufs;\n+\n+                mbufs = (struct rte_mbufs **)ev[i].vec->mbufs;\n+                for (i = 0; i < ev.vec->nb_elem; i++) {\n+                        /* Process each mbuf. */\n+                }\n+        break;\n+        case ...\n+        ...\n+        }\ndiff --git a/lib/librte_eventdev/eventdev_pmd.h b/lib/librte_eventdev/eventdev_pmd.h\nindex 7eb9a7739..9297f1433 100644\n--- a/lib/librte_eventdev/eventdev_pmd.h\n+++ b/lib/librte_eventdev/eventdev_pmd.h\n@@ -645,6 +645,53 @@ typedef int (*eventdev_eth_rx_adapter_stats_reset)\n  */\n typedef int (*eventdev_selftest)(void);\n \n+struct rte_event_eth_rx_adapter_vector_limits;\n+/**\n+ * Get event vector limits for a given event, ethernet device pair.\n+ *\n+ * @param dev\n+ *   Event device pointer\n+ *\n+ * @param eth_dev\n+ *   Ethernet device pointer\n+ *\n+ * @param[out] limits\n+ *   Pointer to the limits structure to be filled.\n+ *\n+ * @return\n+ *   - 0: Success.\n+ *   - <0: Error code returned by the driver function.\n+ */\n+typedef int (*eventdev_eth_rx_adapter_vector_limits_get_t)(\n+\tconst struct rte_eventdev *dev, const struct rte_eth_dev *eth_dev,\n+\tstruct rte_event_eth_rx_adapter_vector_limits *limits);\n+\n+struct rte_event_eth_rx_adapter_event_vector_config;\n+/**\n+ * Enable event vector on an given Rx queue of a ethernet devices belonging to\n+ * the Rx adapter.\n+ *\n+ * @param dev\n+ *   Event device pointer\n+ *\n+ * @param eth_dev\n+ *   Ethernet device pointer\n+ *\n+ * @param rx_queue_id\n+ *   The Rx queue identifier\n+ *\n+ * @param config\n+ *   Pointer to the event vector configuration structure.\n+ *\n+ * @return\n+ *   - 0: Success.\n+ *   - <0: Error code returned by the driver function.\n+ */\n+typedef int (*eventdev_eth_rx_adapter_event_vector_config_t)(\n+\tconst struct rte_eventdev *dev, const struct rte_eth_dev *eth_dev,\n+\tint32_t rx_queue_id,\n+\tconst struct rte_event_eth_rx_adapter_event_vector_config *config);\n+\n typedef uint32_t rte_event_pmd_selftest_seqn_t;\n extern int rte_event_pmd_selftest_seqn_dynfield_offset;\n \n@@ -1067,6 +1114,12 @@ struct rte_eventdev_ops {\n \t/**< Get ethernet Rx stats */\n \teventdev_eth_rx_adapter_stats_reset eth_rx_adapter_stats_reset;\n \t/**< Reset ethernet Rx stats */\n+\teventdev_eth_rx_adapter_vector_limits_get_t\n+\t\teth_rx_adapter_vector_limits_get;\n+\t/**< Get event vector limits for the Rx adapter */\n+\teventdev_eth_rx_adapter_event_vector_config_t\n+\t\teth_rx_adapter_event_vector_config;\n+\t/**< Configure Rx adapter with event vector */\n \n \teventdev_timer_adapter_caps_get_t timer_adapter_caps_get;\n \t/**< Get timer adapter capabilities */\ndiff --git a/lib/librte_eventdev/rte_event_eth_rx_adapter.c b/lib/librte_eventdev/rte_event_eth_rx_adapter.c\nindex d8c635e99..ac8ba5bf0 100644\n--- a/lib/librte_eventdev/rte_event_eth_rx_adapter.c\n+++ b/lib/librte_eventdev/rte_event_eth_rx_adapter.c\n@@ -2263,6 +2263,120 @@ rte_event_eth_rx_adapter_queue_del(uint8_t id, uint16_t eth_dev_id,\n \treturn ret;\n }\n \n+int\n+rte_event_eth_rx_adapter_queue_event_vector_config(\n+\tuint8_t id, uint16_t eth_dev_id, int32_t rx_queue_id,\n+\tstruct rte_event_eth_rx_adapter_event_vector_config *config)\n+{\n+\tstruct rte_event_eth_rx_adapter_vector_limits limits;\n+\tstruct rte_event_eth_rx_adapter *rx_adapter;\n+\tstruct rte_eventdev *dev;\n+\tuint32_t cap;\n+\tint ret;\n+\n+\tRTE_EVENT_ETH_RX_ADAPTER_ID_VALID_OR_ERR_RET(id, -EINVAL);\n+\tRTE_ETH_VALID_PORTID_OR_ERR_RET(eth_dev_id, -EINVAL);\n+\n+\trx_adapter = rxa_id_to_adapter(id);\n+\tif ((rx_adapter == NULL) || (config == NULL))\n+\t\treturn -EINVAL;\n+\n+\tdev = &rte_eventdevs[rx_adapter->eventdev_id];\n+\tret = rte_event_eth_rx_adapter_caps_get(rx_adapter->eventdev_id,\n+\t\t\t\t\t\teth_dev_id, &cap);\n+\tif (ret) {\n+\t\tRTE_EDEV_LOG_ERR(\"Failed to get adapter caps edev %\" PRIu8\n+\t\t\t\t \"eth port %\" PRIu16,\n+\t\t\t\t id, eth_dev_id);\n+\t\treturn ret;\n+\t}\n+\n+\tif (!(cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_EVENT_VECTOR)) {\n+\t\tRTE_EDEV_LOG_ERR(\"Event vectorization is not supported,\"\n+\t\t\t\t \" eth port: %\" PRIu16 \" adapter id: %\" PRIu8,\n+\t\t\t\t eth_dev_id, id);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tret = rte_event_eth_rx_adapter_vector_limits_get(\n+\t\trx_adapter->eventdev_id, eth_dev_id, &limits);\n+\tif (ret) {\n+\t\tRTE_EDEV_LOG_ERR(\"Failed to get vector limits edev %\" PRIu8\n+\t\t\t\t \"eth port %\" PRIu16,\n+\t\t\t\t rx_adapter->eventdev_id, eth_dev_id);\n+\t\treturn ret;\n+\t}\n+\n+\tif (config->vector_sz < limits.min_sz ||\n+\t    config->vector_sz > limits.max_sz ||\n+\t    config->vector_timeout_ns < limits.min_timeout_ns ||\n+\t    config->vector_timeout_ns > limits.max_timeout_ns ||\n+\t    config->vector_mp == NULL) {\n+\t\tRTE_EDEV_LOG_ERR(\"Invalid event vector configuration,\"\n+\t\t\t\t \" eth port: %\" PRIu16 \" adapter id: %\" PRIu8,\n+\t\t\t\t eth_dev_id, id);\n+\t\treturn -EINVAL;\n+\t}\n+\tif (config->vector_mp->elt_size <\n+\t    (sizeof(struct rte_event_vector) +\n+\t     (sizeof(uintptr_t) * config->vector_sz))) {\n+\t\tRTE_EDEV_LOG_ERR(\"Invalid event vector configuration,\"\n+\t\t\t\t \" eth port: %\" PRIu16 \" adapter id: %\" PRIu8,\n+\t\t\t\t eth_dev_id, id);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tif (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT) {\n+\t\tRTE_FUNC_PTR_OR_ERR_RET(\n+\t\t\t*dev->dev_ops->eth_rx_adapter_event_vector_config,\n+\t\t\t-ENOTSUP);\n+\t\tret = dev->dev_ops->eth_rx_adapter_event_vector_config(\n+\t\t\tdev, &rte_eth_devices[eth_dev_id], rx_queue_id, config);\n+\t} else {\n+\t\tret = -ENOTSUP;\n+\t}\n+\n+\treturn ret;\n+}\n+\n+int\n+rte_event_eth_rx_adapter_vector_limits_get(\n+\tuint8_t dev_id, uint16_t eth_port_id,\n+\tstruct rte_event_eth_rx_adapter_vector_limits *limits)\n+{\n+\tstruct rte_eventdev *dev;\n+\tuint32_t cap;\n+\tint ret;\n+\n+\tRTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n+\tRTE_ETH_VALID_PORTID_OR_ERR_RET(eth_port_id, -EINVAL);\n+\n+\tif (limits == NULL)\n+\t\treturn -EINVAL;\n+\n+\tdev = &rte_eventdevs[dev_id];\n+\n+\tret = rte_event_eth_rx_adapter_caps_get(dev_id, eth_port_id, &cap);\n+\tif (ret) {\n+\t\tRTE_EDEV_LOG_ERR(\"Failed to get adapter caps edev %\" PRIu8\n+\t\t\t\t \"eth port %\" PRIu16,\n+\t\t\t\t dev_id, eth_port_id);\n+\t\treturn ret;\n+\t}\n+\n+\tif (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT) {\n+\t\tRTE_FUNC_PTR_OR_ERR_RET(\n+\t\t\t*dev->dev_ops->eth_rx_adapter_vector_limits_get,\n+\t\t\t-ENOTSUP);\n+\t\tret = dev->dev_ops->eth_rx_adapter_vector_limits_get(\n+\t\t\tdev, &rte_eth_devices[eth_port_id], limits);\n+\t} else {\n+\t\tret = -ENOTSUP;\n+\t}\n+\n+\treturn ret;\n+}\n+\n int\n rte_event_eth_rx_adapter_start(uint8_t id)\n {\ndiff --git a/lib/librte_eventdev/rte_event_eth_rx_adapter.h b/lib/librte_eventdev/rte_event_eth_rx_adapter.h\nindex 21bb1e54c..7407cde00 100644\n--- a/lib/librte_eventdev/rte_event_eth_rx_adapter.h\n+++ b/lib/librte_eventdev/rte_event_eth_rx_adapter.h\n@@ -92,6 +92,10 @@ extern \"C\" {\n /**< This flag indicates the flow identifier is valid\n  * @see rte_event_eth_rx_adapter_queue_conf::rx_queue_flags\n  */\n+#define RTE_EVENT_ETH_RX_ADAPTER_QUEUE_EVENT_VECTOR\t0x2\n+/**< This flag indicates that mbufs arriving on the queue need to be vectorized\n+ * @see rte_event_eth_rx_adapter_queue_conf::rx_queue_flags\n+ */\n \n /**\n  * Adapter configuration structure that the adapter configuration callback\n@@ -169,6 +173,36 @@ struct rte_event_eth_rx_adapter_queue_conf {\n \t */\n };\n \n+struct rte_event_eth_rx_adapter_event_vector_config {\n+\tuint16_t vector_sz;\n+\t/**<\n+\t * Indicates the maximum number for mbufs to combine and form a vector.\n+\t * Should be within\n+\t * @see rte_event_eth_rx_adapter_vector_limits::min_vector_sz\n+\t * @see rte_event_eth_rx_adapter_vector_limits::max_vector_sz\n+\t * Valid when RTE_EVENT_ETH_RX_ADAPTER_QUEUE_EVENT_VECTOR flag is set in\n+\t * @see rte_event_eth_rx_adapter_queue_conf::rx_queue_flags\n+\t */\n+\tuint64_t vector_timeout_ns;\n+\t/**<\n+\t * Indicates the maximum number of nanoseconds to wait for receiving\n+\t * mbufs. Should be within vectorization limits of the\n+\t * adapter\n+\t * @see rte_event_eth_rx_adapter_vector_limits::min_vector_ns\n+\t * @see rte_event_eth_rx_adapter_vector_limits::max_vector_ns\n+\t * Valid when RTE_EVENT_ETH_RX_ADAPTER_QUEUE_EVENT_VECTOR flag is set in\n+\t * @see rte_event_eth_rx_adapter_queue_conf::rx_queue_flags\n+\t */\n+\tstruct rte_mempool *vector_mp;\n+\t/**<\n+\t * Indicates the mempool that should be used for allocating\n+\t * rte_event_vector container.\n+\t * Should be created by using `rte_event_vector_pool_create`.\n+\t * Valid when RTE_EVENT_ETH_RX_ADAPTER_QUEUE_EVENT_VECTOR flag is set in\n+\t * @see rte_event_eth_rx_adapter_queue_conf::rx_queue_flags.\n+\t */\n+};\n+\n /**\n  * A structure used to retrieve statistics for an eth rx adapter instance.\n  */\n@@ -199,6 +233,32 @@ struct rte_event_eth_rx_adapter_stats {\n \t/**< Received packet count for interrupt mode Rx queues */\n };\n \n+/**\n+ * A structure used to retrieve eth rx adapter vector limits.\n+ */\n+struct rte_event_eth_rx_adapter_vector_limits {\n+\tuint16_t min_sz;\n+\t/**< Minimum vector limit configurable.\n+\t * @see rte_event_eth_rx_adapter_event_vector_config::vector_sz\n+\t */\n+\tuint16_t max_sz;\n+\t/**< Maximum vector limit configurable.\n+\t * @see rte_event_eth_rx_adapter_event_vector_config::vector_sz\n+\t */\n+\tuint8_t log2_sz;\n+\t/**< True if the size configured should be in log2.\n+\t * @see rte_event_eth_rx_adapter_event_vector_config::vector_sz\n+\t */\n+\tuint64_t min_timeout_ns;\n+\t/**< Minimum vector timeout configurable.\n+\t * @see rte_event_eth_rx_adapter_event_vector_config::vector_timeout_ns\n+\t */\n+\tuint64_t max_timeout_ns;\n+\t/**< Maximum vector timeout configurable.\n+\t * @see rte_event_eth_rx_adapter_event_vector_config::vector_timeout_ns\n+\t */\n+};\n+\n /**\n  *\n  * Callback function invoked by the SW adapter before it continues\n@@ -467,6 +527,51 @@ int rte_event_eth_rx_adapter_cb_register(uint8_t id, uint16_t eth_dev_id,\n \t\t\t\t\t rte_event_eth_rx_adapter_cb_fn cb_fn,\n \t\t\t\t\t void *cb_arg);\n \n+/**\n+ * Retrieve vector limits for a given event dev and eth dev pair.\n+ * @see rte_event_eth_rx_adapter_vector_limits\n+ *\n+ * @param dev_id\n+ *  Event device identifier.\n+ * @param eth_port_id\n+ *  Port identifier of the ethernet device.\n+ * @param [out] limits\n+ *  A pointer to rte_event_eth_rx_adapter_vector_limits structure that has to\n+ * be filled.\n+ *\n+ * @return\n+ *  - 0: Success.\n+ *  - <0: Error code on failure.\n+ */\n+__rte_experimental\n+int rte_event_eth_rx_adapter_vector_limits_get(\n+\tuint8_t dev_id, uint16_t eth_port_id,\n+\tstruct rte_event_eth_rx_adapter_vector_limits *limits);\n+\n+/**\n+ * Configure event vectorization for a given ethernet device queue, that has\n+ * been added to a event eth Rx adapter.\n+ *\n+ * @param id\n+ *  The identifier of the ethernet Rx event adapter.\n+ *\n+ * @param eth_dev_id\n+ *  The identifier of the ethernet device.\n+ *\n+ * @param rx_queue_id\n+ *  Ethernet device receive queue index.\n+ *  If rx_queue_id is -1, then all Rx queues configured for the ethernet device\n+ *  are configured with event vectorization.\n+ *\n+ * @return\n+ *  - 0: Success, Receive queue configured correctly.\n+ *  - <0: Error code on failure.\n+ */\n+__rte_experimental\n+int rte_event_eth_rx_adapter_queue_event_vector_config(\n+\tuint8_t id, uint16_t eth_dev_id, int32_t rx_queue_id,\n+\tstruct rte_event_eth_rx_adapter_event_vector_config *config);\n+\n #ifdef __cplusplus\n }\n #endif\ndiff --git a/lib/librte_eventdev/rte_eventdev.h b/lib/librte_eventdev/rte_eventdev.h\nindex dee468ed0..936c97cc2 100644\n--- a/lib/librte_eventdev/rte_eventdev.h\n+++ b/lib/librte_eventdev/rte_eventdev.h\n@@ -919,10 +919,28 @@ rte_event_dev_close(uint8_t dev_id);\n  * Event vector structure.\n  */\n struct rte_event_vector {\n-\tuint64_t nb_elem : 16;\n+\tuint16_t nb_elem;\n \t/**< Number of elements in this event vector. */\n-\tuint64_t rsvd : 48;\n+\tuint16_t rsvd : 15;\n \t/**< Reserved for future use */\n+\tuint16_t attr_valid : 1;\n+\t/**< Indicates that the below union attributes have valid information.\n+\t */\n+\tunion {\n+\t\t/* Used by Rx adapter.\n+\t\t * Indicates that all the elements in this vector belong to the\n+\t\t * same port and queue pair when originating from Rx adapter,\n+\t\t * valid only when event type is ETHDEV_VECTOR or\n+\t\t * ETH_RX_ADAPTER_VECTOR.\n+\t\t */\n+\t\tstruct {\n+\t\t\tuint16_t port;\n+\t\t\t/* Ethernet device port id. */\n+\t\t\tuint16_t queue;\n+\t\t\t/* Ethernet device queue id. */\n+\t\t};\n+\t};\n+\t/**< Union to hold common attributes of the vector array. */\n \tuint64_t impl_opaque;\n \t/**< Implementation specific opaque value.\n \t * An implementation may use this field to hold implementation specific\n@@ -1025,8 +1043,14 @@ struct rte_event_vector {\n  *\t\t// Classify and handle event.\n  *\t}\n  */\n+#define RTE_EVENT_TYPE_ETHDEV_VECTOR                                           \\\n+\t(RTE_EVENT_TYPE_VECTOR | RTE_EVENT_TYPE_ETHDEV)\n+/**< The event vector generated from ethdev subsystem */\n #define RTE_EVENT_TYPE_CPU_VECTOR (RTE_EVENT_TYPE_VECTOR | RTE_EVENT_TYPE_CPU)\n /**< The event vector generated from cpu for pipelining. */\n+#define RTE_EVENT_TYPE_ETH_RX_ADAPTER_VECTOR                                   \\\n+\t(RTE_EVENT_TYPE_VECTOR | RTE_EVENT_TYPE_ETH_RX_ADAPTER)\n+/**< The event vector generated from eth Rx adapter. */\n \n #define RTE_EVENT_TYPE_MAX              0x10\n /**< Maximum number of event types */\n@@ -1171,6 +1195,8 @@ struct rte_event {\n  * @see struct rte_event_eth_rx_adapter_queue_conf::ev\n  * @see struct rte_event_eth_rx_adapter_queue_conf::rx_queue_flags\n  */\n+#define RTE_EVENT_ETH_RX_ADAPTER_CAP_EVENT_VECTOR\t0x8\n+/**< Adapter supports event vectorization per ethdev. */\n \n /**\n  * Retrieve the event device's ethdev Rx adapter capabilities for the\ndiff --git a/lib/librte_eventdev/version.map b/lib/librte_eventdev/version.map\nindex a070ef56e..902df0ae3 100644\n--- a/lib/librte_eventdev/version.map\n+++ b/lib/librte_eventdev/version.map\n@@ -141,6 +141,8 @@ EXPERIMENTAL {\n \n \t#added in 21.05\n \trte_event_vector_pool_create;\n+\trte_event_eth_rx_adapter_vector_limits_get;\n+\trte_event_eth_rx_adapter_queue_event_vector_config;\n };\n \n INTERNAL {\n",
    "prefixes": [
        "v9",
        "2/8"
    ]
}