get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 123697,
    "url": "https://patches.dpdk.org/api/patches/123697/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20230210173744.3597666-2-s.v.naga.harish.k@intel.com/",
    "project": {
        "id": 1,
        "url": "https://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": "<20230210173744.3597666-2-s.v.naga.harish.k@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20230210173744.3597666-2-s.v.naga.harish.k@intel.com",
    "date": "2023-02-10T17:37:43",
    "name": "[v6,2/3] eventdev/eth_tx: add params set/get APIs",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "dd033e8b2c7e1e843c38f82852d1238513871e91",
    "submitter": {
        "id": 2280,
        "url": "https://patches.dpdk.org/api/people/2280/?format=api",
        "name": "Naga Harish K, S V",
        "email": "s.v.naga.harish.k@intel.com"
    },
    "delegate": {
        "id": 310,
        "url": "https://patches.dpdk.org/api/users/310/?format=api",
        "username": "jerin",
        "first_name": "Jerin",
        "last_name": "Jacob",
        "email": "jerinj@marvell.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20230210173744.3597666-2-s.v.naga.harish.k@intel.com/mbox/",
    "series": [
        {
            "id": 26955,
            "url": "https://patches.dpdk.org/api/series/26955/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=26955",
            "date": "2023-02-10T17:37:42",
            "name": "[v6,1/3] eventdev/eth_rx: add params set/get APIs",
            "version": 6,
            "mbox": "https://patches.dpdk.org/series/26955/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/123697/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/123697/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 9A08241C50;\n\tFri, 10 Feb 2023 18:38:45 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 12AC242D0E;\n\tFri, 10 Feb 2023 18:38:41 +0100 (CET)",
            "from mga04.intel.com (mga04.intel.com [192.55.52.120])\n by mails.dpdk.org (Postfix) with ESMTP id B019A427F2\n for <dev@dpdk.org>; Fri, 10 Feb 2023 18:38:39 +0100 (CET)",
            "from fmsmga003.fm.intel.com ([10.253.24.29])\n by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 10 Feb 2023 09:37:51 -0800",
            "from txandevlnx322.an.intel.com ([10.123.117.44])\n by FMSMGA003.fm.intel.com with ESMTP; 10 Feb 2023 09:37:50 -0800"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple;\n d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n t=1676050720; x=1707586720;\n h=from:to:cc:subject:date:message-id:in-reply-to:\n references:mime-version:content-transfer-encoding;\n bh=sO/1ejrHrDtswXDUtf2nE7DQqZhUQv/VXc/f1Yf8HHU=;\n b=nyYpUN08vslmk7J/XS5kvkz+NqTLue71+QSg+qC3Kms9YibVT/l30Zsv\n rykkEBddvZd8ceM/ZhDZj7+b2MXEZG4fBDA6V7qCHVsvJjNKCa13nt5Ka\n P2VqULkwgrttTEM4j0GjYltw1LcqejxfA9izHMxUYHT2bZqQ31b5U65V3\n tjGtMkker4+lljy3TO9+CjlbBjTH+FH4fRVOgK1nhYpZVd+RX/7y/GhdF\n UOLYNgpRcWElAxR8sBoA2hA1Tsj9w2y79ug5nnOrTCMq/Vcqz93c4ClTc\n 1ExhGyNdvGR/xlyyUFOOcT6oy2PG2uav+/thBX6cVXcFDdtHebzfRluij A==;",
        "X-IronPort-AV": [
            "E=McAfee;i=\"6500,9779,10617\"; a=\"329108996\"",
            "E=Sophos;i=\"5.97,287,1669104000\"; d=\"scan'208\";a=\"329108996\"",
            "E=McAfee;i=\"6500,9779,10617\"; a=\"756857456\"",
            "E=Sophos;i=\"5.97,287,1669104000\"; d=\"scan'208\";a=\"756857456\""
        ],
        "X-ExtLoop1": "1",
        "From": "Naga Harish K S V <s.v.naga.harish.k@intel.com>",
        "To": "jerinj@marvell.com, erik.g.carrillo@intel.com, abhinandan.gujjar@intel.com",
        "Cc": "dev@dpdk.org,\n\tjay.jayatheerthan@intel.com",
        "Subject": "[PATCH v6 2/3] eventdev/eth_tx: add params set/get APIs",
        "Date": "Fri, 10 Feb 2023 11:37:43 -0600",
        "Message-Id": "<20230210173744.3597666-2-s.v.naga.harish.k@intel.com>",
        "X-Mailer": "git-send-email 2.23.0",
        "In-Reply-To": "<20230210173744.3597666-1-s.v.naga.harish.k@intel.com>",
        "References": "<20230210134646.3407253-1-s.v.naga.harish.k@intel.com>\n <20230210173744.3597666-1-s.v.naga.harish.k@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "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": "The adapter runtime configuration parameters defined in the\nstruct rte_event_eth_tx_adapter_runtime_params can be\nconfigured and retrieved using\nrte_event_eth_tx_adapter_runtime_params_set() and\nrte_event_eth_tx_adapter_runtime_params_get() respectively.\n\nSigned-off-by: Naga Harish K S V <s.v.naga.harish.k@intel.com>\n---\nv6:\n* updated doxygen comments as per review comments\n---\n---\n app/test/test_event_eth_tx_adapter.c          | 132 ++++++++++++++++++\n .../prog_guide/event_ethernet_tx_adapter.rst  |   9 ++\n lib/eventdev/rte_event_eth_tx_adapter.c       | 115 ++++++++++++++-\n lib/eventdev/rte_event_eth_tx_adapter.h       |  89 ++++++++++++\n lib/eventdev/version.map                      |   3 +\n 5 files changed, 347 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/app/test/test_event_eth_tx_adapter.c b/app/test/test_event_eth_tx_adapter.c\nindex c19a87a86a..4e1d821bf9 100644\n--- a/app/test/test_event_eth_tx_adapter.c\n+++ b/app/test/test_event_eth_tx_adapter.c\n@@ -40,6 +40,8 @@ test_event_eth_tx_adapter_common(void)\n #define PORT(p)\t\t\tdefault_params.port[(p)]\n #define TEST_ETHDEV_ID\t\tPORT(0)\n #define TEST_ETHDEV_PAIR_ID\tPORT(PAIR_PORT_INDEX(0))\n+#define DEFAULT_FLUSH_THRESHOLD 1024\n+#define TXA_NB_TX_WORK_DEFAULT  128\n \n #define EDEV_RETRY\t\t0xffff\n \n@@ -795,6 +797,134 @@ tx_adapter_queue_start_stop(void)\n \treturn TEST_SUCCESS;\n }\n \n+static int\n+tx_adapter_set_get_params(void)\n+{\n+\tint err;\n+\tstruct rte_event_eth_tx_adapter_runtime_params in_params;\n+\tstruct rte_event_eth_tx_adapter_runtime_params out_params;\n+\n+\terr = rte_event_eth_tx_adapter_queue_add(TEST_INST_ID,\n+\t\t\t\t\t\t TEST_ETHDEV_ID,\n+\t\t\t\t\t\t 0);\n+\tTEST_ASSERT(err == 0, \"Expected 0 got %d\", err);\n+\n+\terr = rte_event_eth_tx_adapter_runtime_params_init(&in_params);\n+\tTEST_ASSERT(err == 0, \"Expected 0 got %d\", err);\n+\terr = rte_event_eth_tx_adapter_runtime_params_init(&out_params);\n+\tTEST_ASSERT(err == 0, \"Expected 0 got %d\", err);\n+\n+\t/* Case 1: Get the default values of adapter */\n+\terr = rte_event_eth_tx_adapter_runtime_params_get(TEST_INST_ID,\n+\t\t\t\t\t\t\t  &out_params);\n+\tTEST_ASSERT(err == 0, \"Expected 0 got %d\", err);\n+\tTEST_ASSERT(out_params.flush_threshold == DEFAULT_FLUSH_THRESHOLD,\n+\t\t    \"Expected %u got %u\",\n+\t\t    DEFAULT_FLUSH_THRESHOLD, out_params.flush_threshold);\n+\tTEST_ASSERT(out_params.max_nb_tx == TXA_NB_TX_WORK_DEFAULT,\n+\t\t    \"Expected %u got %u\",\n+\t\t    TXA_NB_TX_WORK_DEFAULT, out_params.max_nb_tx);\n+\n+\t/* Case 2: Set max_nb_tx = 32 (=TXA_BATCH_SEIZE) */\n+\tin_params.max_nb_tx = 32;\n+\tin_params.flush_threshold = DEFAULT_FLUSH_THRESHOLD;\n+\n+\terr = rte_event_eth_tx_adapter_runtime_params_set(TEST_INST_ID,\n+\t\t\t\t\t\t\t  &in_params);\n+\tTEST_ASSERT(err == 0, \"Expected 0 got %d\", err);\n+\n+\terr = rte_event_eth_tx_adapter_runtime_params_get(TEST_INST_ID,\n+\t\t\t\t\t\t\t  &out_params);\n+\tTEST_ASSERT(err == 0, \"Expected 0 got %d\", err);\n+\tTEST_ASSERT(in_params.max_nb_tx == out_params.max_nb_tx,\n+\t\t    \"Expected %u got %u\",\n+\t\t    in_params.max_nb_tx, out_params.max_nb_tx);\n+\tTEST_ASSERT(in_params.flush_threshold == out_params.flush_threshold,\n+\t\t    \"Expected %u got %u\",\n+\t\t    in_params.flush_threshold, out_params.flush_threshold);\n+\n+\t/* Case 3: Set max_nb_tx = 192 */\n+\tin_params.max_nb_tx = 192;\n+\n+\terr = rte_event_eth_tx_adapter_runtime_params_set(TEST_INST_ID,\n+\t\t\t\t\t\t\t  &in_params);\n+\tTEST_ASSERT(err == 0, \"Expected 0 got %d\", err);\n+\n+\terr = rte_event_eth_tx_adapter_runtime_params_get(TEST_INST_ID,\n+\t\t\t\t\t\t\t  &out_params);\n+\tTEST_ASSERT(err == 0, \"Expected 0 got %d\", err);\n+\tTEST_ASSERT(in_params.max_nb_tx == out_params.max_nb_tx,\n+\t\t    \"Expected %u got %u\",\n+\t\t    in_params.max_nb_tx, out_params.max_nb_tx);\n+\n+\t/* Case 4: Set max_nb_tx = 256 */\n+\tin_params.max_nb_tx = 256;\n+\n+\terr = rte_event_eth_tx_adapter_runtime_params_set(TEST_INST_ID,\n+\t\t\t\t\t\t\t  &in_params);\n+\tTEST_ASSERT(err == 0, \"Expected 0 got %d\", err);\n+\n+\terr = rte_event_eth_tx_adapter_runtime_params_get(TEST_INST_ID,\n+\t\t\t\t\t\t\t  &out_params);\n+\tTEST_ASSERT(err == 0, \"Expected 0 got %d\", err);\n+\tTEST_ASSERT(in_params.max_nb_tx == out_params.max_nb_tx,\n+\t\t    \"Expected %u got %u\",\n+\t\t    in_params.max_nb_tx, out_params.max_nb_tx);\n+\n+\t/* Case 5: Set max_nb_tx = 30(<TXA_BATCH_SIZE) */\n+\tin_params.max_nb_tx = 30;\n+\n+\terr = rte_event_eth_tx_adapter_runtime_params_set(TEST_INST_ID,\n+\t\t\t\t\t\t\t  &in_params);\n+\tTEST_ASSERT(err == 0, \"Expected 0 got %d\", err);\n+\n+\terr = rte_event_eth_tx_adapter_runtime_params_get(TEST_INST_ID,\n+\t\t\t\t\t\t\t  &out_params);\n+\tTEST_ASSERT(err == 0, \"Expected 0 got %d\", err);\n+\tTEST_ASSERT(in_params.max_nb_tx == out_params.max_nb_tx,\n+\t\t    \"Expected %u got %u\",\n+\t\t    in_params.max_nb_tx, out_params.max_nb_tx);\n+\n+\t/* Case 6: Set max_nb_tx = 512 */\n+\tin_params.max_nb_tx = 512;\n+\n+\terr = rte_event_eth_tx_adapter_runtime_params_set(TEST_INST_ID,\n+\t\t\t\t\t\t\t  &in_params);\n+\tTEST_ASSERT(err == 0, \"Expected 0 got %d\", err);\n+\n+\terr = rte_event_eth_tx_adapter_runtime_params_get(TEST_INST_ID,\n+\t\t\t\t\t\t\t  &out_params);\n+\tTEST_ASSERT(err == 0, \"Expected 0 got %d\", err);\n+\tTEST_ASSERT(in_params.max_nb_tx == out_params.max_nb_tx,\n+\t\t    \"Expected %u got %u\",\n+\t\t    in_params.max_nb_tx, out_params.max_nb_tx);\n+\n+\t/* Case 7: Set flush_threshold = 10 */\n+\tin_params.max_nb_tx = 128;\n+\tin_params.flush_threshold = 10;\n+\n+\terr = rte_event_eth_tx_adapter_runtime_params_set(TEST_INST_ID,\n+\t\t\t\t\t\t\t  &in_params);\n+\tTEST_ASSERT(err == 0, \"Expected 0 got %d\", err);\n+\n+\terr = rte_event_eth_tx_adapter_runtime_params_get(TEST_INST_ID,\n+\t\t\t\t\t\t\t  &out_params);\n+\tTEST_ASSERT(err == 0, \"Expected 0 got %d\", err);\n+\tTEST_ASSERT(in_params.max_nb_tx == out_params.max_nb_tx,\n+\t\t    \"Expected %u got %u\",\n+\t\t    in_params.max_nb_tx, out_params.max_nb_tx);\n+\tTEST_ASSERT(in_params.flush_threshold == out_params.flush_threshold,\n+\t\t    \"Expected %u got %u\",\n+\t\t    in_params.flush_threshold, out_params.flush_threshold);\n+\n+\terr = rte_event_eth_tx_adapter_queue_del(TEST_INST_ID,\n+\t\t\t\t\t\t TEST_ETHDEV_ID,\n+\t\t\t\t\t\t 0);\n+\tTEST_ASSERT(err == 0, \"Expected 0 got %d\", err);\n+\n+\treturn TEST_SUCCESS;\n+}\n+\n static int\n tx_adapter_dynamic_device(void)\n {\n@@ -856,6 +986,8 @@ static struct unit_test_suite event_eth_tx_tests = {\n \t\t\t\t\ttx_adapter_instance_get),\n \t\tTEST_CASE_ST(tx_adapter_create, tx_adapter_free,\n \t\t\t\t\ttx_adapter_queue_start_stop),\n+\t\tTEST_CASE_ST(tx_adapter_create, tx_adapter_free,\n+\t\t\t\t\ttx_adapter_set_get_params),\n \t\tTEST_CASE_ST(NULL, NULL, tx_adapter_dynamic_device),\n \t\tTEST_CASES_END() /**< NULL terminate unit test array */\n \t}\ndiff --git a/doc/guides/prog_guide/event_ethernet_tx_adapter.rst b/doc/guides/prog_guide/event_ethernet_tx_adapter.rst\nindex d8f9a58571..02726115f0 100644\n--- a/doc/guides/prog_guide/event_ethernet_tx_adapter.rst\n+++ b/doc/guides/prog_guide/event_ethernet_tx_adapter.rst\n@@ -225,3 +225,12 @@ Stop function stops the adapter runtime function from enqueueing any\n packets to the associated Tx queue. This API also frees any packets that\n may have been buffered for this queue. All inflight packets destined to the\n queue are freed by the adapter runtime until the queue is started again.\n+\n+Set/Get adapter runtime configuration parameters\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+The runtime configuration parameters of adapter can be set/get using\n+``rte_event_eth_tx_adapter_runtime_params_set()`` and\n+``rte_event_eth_tx_adapter_runtime_params_get()`` respectively. The parameters\n+that can be set/get are defined in\n+``struct rte_event_eth_tx_adapter_runtime_params``.\ndiff --git a/lib/eventdev/rte_event_eth_tx_adapter.c b/lib/eventdev/rte_event_eth_tx_adapter.c\nindex cce50c3c18..131e11e01d 100644\n--- a/lib/eventdev/rte_event_eth_tx_adapter.c\n+++ b/lib/eventdev/rte_event_eth_tx_adapter.c\n@@ -124,6 +124,8 @@ struct txa_service_data {\n \tuint16_t dev_count;\n \t/* Loop count to flush Tx buffers */\n \tint loop_cnt;\n+\t/* Loop count threshold to flush Tx buffers */\n+\tuint16_t flush_threshold;\n \t/* Per ethernet device structure */\n \tstruct txa_service_ethdev *txa_ethdev;\n \t/* Statistics */\n@@ -665,13 +667,14 @@ txa_service_func(void *args)\n \t\tret = 0;\n \t}\n \n-\tif ((txa->loop_cnt++ & (TXA_FLUSH_THRESHOLD - 1)) == 0) {\n+\tif (txa->loop_cnt++ == txa->flush_threshold) {\n \n \t\tstruct txa_service_ethdev *tdi;\n \t\tstruct txa_service_queue_info *tqi;\n \t\tstruct rte_eth_dev *dev;\n \t\tuint16_t i;\n \n+\t\ttxa->loop_cnt = 0;\n \t\ttdi = txa->txa_ethdev;\n \t\tnb_tx = 0;\n \n@@ -769,6 +772,7 @@ txa_service_adapter_create_ext(uint8_t id, struct rte_eventdev *dev,\n \ttxa->service_id = TXA_INVALID_SERVICE_ID;\n \trte_spinlock_init(&txa->tx_lock);\n \ttxa_service_data_array[id] = txa;\n+\ttxa->flush_threshold = TXA_FLUSH_THRESHOLD;\n \n \treturn 0;\n }\n@@ -1291,6 +1295,115 @@ rte_event_eth_tx_adapter_stats_reset(uint8_t id)\n \treturn ret;\n }\n \n+int\n+rte_event_eth_tx_adapter_runtime_params_init(\n+\t\tstruct rte_event_eth_tx_adapter_runtime_params *txa_params)\n+{\n+\tif (txa_params == NULL)\n+\t\treturn -EINVAL;\n+\n+\tmemset(txa_params, 0, sizeof(*txa_params));\n+\ttxa_params->max_nb_tx = TXA_MAX_NB_TX;\n+\ttxa_params->flush_threshold = TXA_FLUSH_THRESHOLD;\n+\n+\treturn 0;\n+}\n+\n+static int\n+txa_caps_check(uint8_t id, struct txa_service_data *txa)\n+{\n+\tuint32_t caps = 0;\n+\tstruct rte_eth_dev *eth_dev = NULL;\n+\tstruct txa_service_ethdev *tdi;\n+\tint i;\n+\n+\tif (!txa->dev_count)\n+\t\treturn -EINVAL;\n+\n+\t/* The eth_dev used is always the same type.\n+\t * Hence first valid eth_dev is taken.\n+\t */\n+\tfor (i = 0; i < txa->dev_count; i++) {\n+\t\ttdi = &txa->txa_ethdev[i];\n+\t\tif (tdi->nb_queues) {\n+\t\t\teth_dev = tdi->dev;\n+\t\t\tbreak;\n+\t\t}\n+\t}\n+\tif (eth_dev == NULL)\n+\t\treturn -EINVAL;\n+\n+\tif (txa_dev_caps_get(id))\n+\t\ttxa_dev_caps_get(id)(txa_evdev(id), eth_dev, &caps);\n+\n+\tif (caps & RTE_EVENT_ETH_TX_ADAPTER_CAP_INTERNAL_PORT)\n+\t\treturn -ENOTSUP;\n+\n+\treturn 0;\n+}\n+\n+int\n+rte_event_eth_tx_adapter_runtime_params_set(uint8_t id,\n+\t\tstruct rte_event_eth_tx_adapter_runtime_params *txa_params)\n+{\n+\tstruct txa_service_data *txa;\n+\tint ret;\n+\n+\tif (txa_lookup())\n+\t\treturn -ENOMEM;\n+\n+\tTXA_CHECK_OR_ERR_RET(id);\n+\n+\tif (txa_params == NULL)\n+\t\treturn -EINVAL;\n+\n+\ttxa = txa_service_id_to_data(id);\n+\tif (txa == NULL)\n+\t\treturn -EINVAL;\n+\n+\tret = txa_caps_check(id, txa);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\trte_spinlock_lock(&txa->tx_lock);\n+\ttxa->flush_threshold = txa_params->flush_threshold;\n+\ttxa->max_nb_tx = txa_params->max_nb_tx;\n+\trte_spinlock_unlock(&txa->tx_lock);\n+\n+\treturn 0;\n+}\n+\n+int\n+rte_event_eth_tx_adapter_runtime_params_get(uint8_t id,\n+\t\tstruct rte_event_eth_tx_adapter_runtime_params *txa_params)\n+{\n+\tstruct txa_service_data *txa;\n+\tint ret;\n+\n+\tif (txa_lookup())\n+\t\treturn -ENOMEM;\n+\n+\tTXA_CHECK_OR_ERR_RET(id);\n+\n+\tif (txa_params == NULL)\n+\t\treturn -EINVAL;\n+\n+\ttxa = txa_service_id_to_data(id);\n+\tif (txa == NULL)\n+\t\treturn -EINVAL;\n+\n+\tret = txa_caps_check(id, txa);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\trte_spinlock_lock(&txa->tx_lock);\n+\ttxa_params->flush_threshold = txa->flush_threshold;\n+\ttxa_params->max_nb_tx = txa->max_nb_tx;\n+\trte_spinlock_unlock(&txa->tx_lock);\n+\n+\treturn 0;\n+}\n+\n int\n rte_event_eth_tx_adapter_stop(uint8_t id)\n {\ndiff --git a/lib/eventdev/rte_event_eth_tx_adapter.h b/lib/eventdev/rte_event_eth_tx_adapter.h\nindex cd539af7ef..1ea9a15316 100644\n--- a/lib/eventdev/rte_event_eth_tx_adapter.h\n+++ b/lib/eventdev/rte_event_eth_tx_adapter.h\n@@ -37,6 +37,9 @@\n  *  - rte_event_eth_tx_adapter_instance_get()\n  *  - rte_event_eth_tx_adapter_queue_start()\n  *  - rte_event_eth_tx_adapter_queue_stop()\n+ *  - rte_event_eth_tx_adapter_runtime_params_get()\n+ *  - rte_event_eth_tx_adapter_runtime_params_init()\n+ *  - rte_event_eth_tx_adapter_runtime_params_set()\n  *\n  * The application creates the adapter using\n  * rte_event_eth_tx_adapter_create() or rte_event_eth_tx_adapter_create_ext().\n@@ -103,6 +106,37 @@ struct rte_event_eth_tx_adapter_conf {\n \t */\n };\n \n+/**\n+ * Adapter runtime configuration parameters\n+ */\n+struct rte_event_eth_tx_adapter_runtime_params {\n+\tuint32_t max_nb_tx;\n+\t/**< The adapter can return early if it has processed at least\n+\t * max_nb_tx mbufs. This isn't treated as a requirement; batching may\n+\t * cause the adapter to process more than max_nb_tx mbufs.\n+\t *\n+\t * rte_event_eth_tx_adapter_create() configures the\n+\t * adapter with default value of max_nb_tx.\n+\t * rte_event_eth_tx_adapter_create_ext() configures the adapter with\n+\t * user provided value of max_nb_tx through\n+\t * rte_event_eth_tx_adapter_conf::max_nb_tx parameter.\n+\t * rte_event_eth_tx_adapter_runtime_params_set() allows to re-configure\n+\t * max_nb_tx during runtime (after adding at least one queue)\n+\t *\n+\t * This is valid for the devices without\n+\t * RTE_EVENT_ETH_TX_ADAPTER_CAP_INTERNAL_PORT capability.\n+\t */\n+\tuint16_t flush_threshold;\n+\t/**< the number of service function iteration count to\n+\t * flush buffered packets.\n+\t *\n+\t * This is valid for the devices without\n+\t * RTE_EVENT_ETH_TX_ADAPTER_CAP_INTERNAL_PORT capability.\n+\t */\n+\tuint16_t rsvd[29];\n+\t/**< Reserved fields for future expansion */\n+};\n+\n /**\n  * Function type used for adapter configuration callback. The callback is\n  * used to fill in members of the struct rte_event_eth_tx_adapter_conf, this\n@@ -516,6 +550,61 @@ __rte_experimental\n int\n rte_event_eth_tx_adapter_queue_stop(uint16_t eth_dev_id, uint16_t tx_queue_id);\n \n+/**\n+ * Initialize the adapter runtime configuration parameters with default values\n+ *\n+ * @param txa_params\n+ *  A pointer to structure of type struct rte_event_eth_tx_adapter_runtime_params\n+ *\n+ * @return\n+ *  -  0: Success\n+ *  - <0: Error code on failure\n+ */\n+__rte_experimental\n+int\n+rte_event_eth_tx_adapter_runtime_params_init(\n+\t\tstruct rte_event_eth_tx_adapter_runtime_params *txa_params);\n+\n+/**\n+ * Set the runtime configuration parameters for adapter.\n+ *\n+ * @param id\n+ *  Adapter identifier\n+ * @param params\n+ *  A pointer to structure of type struct rte_event_eth_tx_adapter_runtime_params\n+ *  with configuration parameter values. The reserved fields of this structure\n+ *  must be initialized to zero and the valid fields need to be set appropriately.\n+ *  This structure can be initialized using\n+ *  rte_event_eth_tx_adapter_runtime_params_init() API to default values or\n+ *  application may reset this structure and update required fields.\n+ *\n+ * @return\n+ * -  0: Success\n+ * - <0: Error code on failure\n+ */\n+__rte_experimental\n+int\n+rte_event_eth_tx_adapter_runtime_params_set(uint8_t id,\n+\t\tstruct rte_event_eth_tx_adapter_runtime_params *params);\n+\n+/**\n+ * Get the runtime configuration parameters of adapter.\n+ *\n+ * @param id\n+ *  Adapter identifier\n+ * @param[out] params\n+ *  A pointer to structure of type struct rte_event_eth_tx_adapter_runtime_params\n+ *  containing valid Tx adapter parameters when return value is 0.\n+ *\n+ * @return\n+ * -  0: Success\n+ * - <0: Error code on failure\n+ */\n+__rte_experimental\n+int\n+rte_event_eth_tx_adapter_runtime_params_get(uint8_t id,\n+\t\tstruct rte_event_eth_tx_adapter_runtime_params *params);\n+\n #ifdef __cplusplus\n }\n #endif\ndiff --git a/lib/eventdev/version.map b/lib/eventdev/version.map\nindex ef9c3b86b2..7b93736dff 100644\n--- a/lib/eventdev/version.map\n+++ b/lib/eventdev/version.map\n@@ -124,6 +124,9 @@ EXPERIMENTAL {\n \trte_event_eth_rx_adapter_runtime_params_get;\n \trte_event_eth_rx_adapter_runtime_params_init;\n \trte_event_eth_rx_adapter_runtime_params_set;\n+\trte_event_eth_tx_adapter_runtime_params_get;\n+\trte_event_eth_tx_adapter_runtime_params_init;\n+\trte_event_eth_tx_adapter_runtime_params_set;\n \trte_event_timer_remaining_ticks_get;\n };\n \n",
    "prefixes": [
        "v6",
        "2/3"
    ]
}