From patchwork Sat Jan 7 16:18:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Naga Harish K, S V" X-Patchwork-Id: 121696 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id 16C10A00C2; Sat, 7 Jan 2023 17:19:01 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A518B4021D; Sat, 7 Jan 2023 17:19:00 +0100 (CET) Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by mails.dpdk.org (Postfix) with ESMTP id 4008140141 for ; Sat, 7 Jan 2023 17:18:57 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1673108338; x=1704644338; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=7Hdj2ooWLpSO2tMHt8F7iZjqbUh0rkuzsiPkJ8UWlLk=; b=P4YeUaPSvGHruFHlkpQOU9AILDfOgonMQguggqrW9s2sv4iZJI/ZfHtk 4IkHtk1Wij+HFb1OUl9ZWKQfUmzf6NxC8zFAXmOtHT/LNBdJnQS3CA+99 G3t9XBE4E64upuPTIT1BLaML83g5dPZzpyXLEuHa8Xv1adrnb/e59bEHs XGrmeaTVGVMcWXSxvFO4sRaHIRPt7aL+iQoAqBDMeJbk0UJkrLEHKp0zv TC7iHUHAdiYDJyhpqgWrTt7XikEh2cWd5cA+ev1wpn79mdXvD/rBX8E7q z05ISZmmPSyujDFe4JpwuHoBqnQGXQbWstpyoLGLO2rsT8vd9myWD1UM6 g==; X-IronPort-AV: E=McAfee;i="6500,9779,10583"; a="384952337" X-IronPort-AV: E=Sophos;i="5.96,308,1665471600"; d="scan'208";a="384952337" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Jan 2023 08:18:57 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10583"; a="686770142" X-IronPort-AV: E=Sophos;i="5.96,308,1665471600"; d="scan'208";a="686770142" Received: from txandevlnx322.an.intel.com ([10.123.117.44]) by orsmga008.jf.intel.com with ESMTP; 07 Jan 2023 08:18:56 -0800 From: Naga Harish K S V To: jerinj@marvell.com, abhinandan.gujjar@intel.com Cc: dev@dpdk.org, jay.jayatheerthan@intel.com Subject: [PATCH 1/3] eventdev/eth_rx: add params set/get APIs Date: Sat, 7 Jan 2023 10:18:50 -0600 Message-Id: <20230107161852.3708690-1-s.v.naga.harish.k@intel.com> X-Mailer: git-send-email 2.23.0 MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The adapter configuration parameters defined in the ``struct rte_event_eth_rx_adapter_config_params`` can be configured and retrieved using ``rte_event_eth_rx_adapter_set_params`` and ``rte_event_eth_tx_adapter_get_params`` respectively. Signed-off-by: Naga Harish K S V --- app/test/test_event_eth_rx_adapter.c | 62 ++++++++++++++++++ .../prog_guide/event_ethernet_rx_adapter.rst | 20 ++++++ lib/eventdev/rte_event_eth_rx_adapter.c | 49 ++++++++++++++- lib/eventdev/rte_event_eth_rx_adapter.h | 63 ++++++++++++++++++- lib/eventdev/version.map | 4 ++ 5 files changed, 196 insertions(+), 2 deletions(-) diff --git a/app/test/test_event_eth_rx_adapter.c b/app/test/test_event_eth_rx_adapter.c index 1da7782560..f548e3c059 100644 --- a/app/test/test_event_eth_rx_adapter.c +++ b/app/test/test_event_eth_rx_adapter.c @@ -1198,6 +1198,66 @@ adapter_intrq_instance_get(void) return TEST_SUCCESS; } +static int +adapter_get_set_params(void) +{ + int err; + struct rte_event_eth_rx_adapter_runtime_params in_params; + struct rte_event_eth_rx_adapter_runtime_params out_params; + + /* Case 1: Get the default value of mbufs processed by Rx adapter */ + err = rte_event_eth_rx_adapter_get_params(TEST_INST_ID, &out_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + /* Case 2: Set max_nb_rx = 32 (=BATCH_SEIZE) */ + in_params.max_nb_rx = 32; + + err = rte_event_eth_rx_adapter_set_params(TEST_INST_ID, &in_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_eth_rx_adapter_get_params(TEST_INST_ID, &out_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + TEST_ASSERT(in_params.max_nb_rx == out_params.max_nb_rx, "Expected %u got %u", + in_params.max_nb_rx, out_params.max_nb_rx); + + /* Case 3: Set max_nb_rx = 192 */ + in_params.max_nb_rx = 192; + + err = rte_event_eth_rx_adapter_set_params(TEST_INST_ID, &in_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_eth_rx_adapter_get_params(TEST_INST_ID, &out_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + TEST_ASSERT(in_params.max_nb_rx == out_params.max_nb_rx, "Expected %u got %u", + in_params.max_nb_rx, out_params.max_nb_rx); + + /* Case 4: Set max_nb_rx = 256 */ + in_params.max_nb_rx = 256; + + err = rte_event_eth_rx_adapter_set_params(TEST_INST_ID, &in_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_eth_rx_adapter_get_params(TEST_INST_ID, &out_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + TEST_ASSERT(in_params.max_nb_rx == out_params.max_nb_rx, "Expected %u got %u", + in_params.max_nb_rx, out_params.max_nb_rx); + + /* Case 5: Set max_nb_rx = 30(event_port_id = port_id; - conf->max_nb_rx = 128; + conf->max_nb_rx = RXA_NB_RX_WORK_DEFAULT; if (started) ret = rte_event_dev_start(dev_id); rx_adapter->default_cb_arg = 1; @@ -3433,6 +3435,51 @@ rte_event_eth_rx_adapter_instance_get(uint16_t eth_dev_id, return -EINVAL; } +int +rte_event_eth_rx_adapter_set_params(uint8_t id, + struct rte_event_eth_rx_adapter_runtime_params *params) +{ + struct event_eth_rx_adapter *rx_adapter; + + if (rxa_memzone_lookup()) + return -ENOMEM; + + if (params == NULL) + return -EINVAL; + + rx_adapter = rxa_id_to_adapter(id); + if (rx_adapter == NULL) + return -EINVAL; + + rte_spinlock_lock(&rx_adapter->rx_lock); + rx_adapter->max_nb_rx = params->max_nb_rx; + rte_spinlock_unlock(&rx_adapter->rx_lock); + + return 0; +} + +int +rte_event_eth_rx_adapter_get_params(uint8_t id, + struct rte_event_eth_rx_adapter_runtime_params *params) +{ + struct event_eth_rx_adapter *rx_adapter; + + if (rxa_memzone_lookup()) + return -ENOMEM; + + if (params == NULL) + return -EINVAL; + + rx_adapter = rxa_id_to_adapter(id); + if (rx_adapter == NULL) + return -EINVAL; + + params->max_nb_rx = rx_adapter->max_nb_rx; + + return 0; +} + +/* RX-adapter telemetry callbacks */ #define RXA_ADD_DICT(stats, s) rte_tel_data_add_dict_u64(d, #s, stats.s) static int diff --git a/lib/eventdev/rte_event_eth_rx_adapter.h b/lib/eventdev/rte_event_eth_rx_adapter.h index d0e7d0092c..d05525d3e2 100644 --- a/lib/eventdev/rte_event_eth_rx_adapter.h +++ b/lib/eventdev/rte_event_eth_rx_adapter.h @@ -39,10 +39,20 @@ * - rte_event_eth_rx_adapter_queue_stats_reset() * - rte_event_eth_rx_adapter_event_port_get() * - rte_event_eth_rx_adapter_instance_get() + * - rte_event_eth_rx_adapter_set_params() + * - rte_event_eth_rx_adapter_get_params() * * The application creates an ethernet to event adapter using * rte_event_eth_rx_adapter_create_ext() or rte_event_eth_rx_adapter_create() * or rte_event_eth_rx_adapter_create_with_params() functions. + * + * rte_event_eth_rx_adapter_create() or rte_event_eth_adapter_create_with_params() + * configures the adapter with default value of maximum packets processed per + * iteration to RXA_NB_RX_WORK_DEFAULT(128). rte_event_eth_rx_adapter_set_params() + * allows to re-configure maximum packets processed per iteration. This is + * alternative to using rte_event_eth_rx_adapter_create_ext() with parameter + * rte_event_eth_rx_adapter_conf::max_nb_rx + * * The adapter needs to know which ethernet rx queues to poll for mbufs as well * as event device parameters such as the event queue identifier, event * priority and scheduling type that the adapter should use when constructing @@ -299,6 +309,17 @@ struct rte_event_eth_rx_adapter_params { /**< flag to indicate that event buffer is separate for each queue */ }; +/** + * Adapter configuration parameters + */ +struct rte_event_eth_rx_adapter_runtime_params { + uint32_t max_nb_rx; + /**< The adapter can return early if it has processed at least + * max_nb_rx mbufs. This isn't treated as a requirement; batching may + * cause the adapter to process more than max_nb_rx mbufs. + */ +}; + /** * * Callback function invoked by the SW adapter before it continues @@ -377,7 +398,7 @@ int rte_event_eth_rx_adapter_create_ext(uint8_t id, uint8_t dev_id, * Create a new ethernet Rx event adapter with the specified identifier. * This function uses an internal configuration function that creates an event * port. This default function reconfigures the event device with an - * additional event port and setups up the event port using the port_config + * additional event port and setup the event port using the port_config * parameter passed into this function. In case the application needs more * control in configuration of the service, it should use the * rte_event_eth_rx_adapter_create_ext() version. @@ -729,6 +750,46 @@ rte_event_eth_rx_adapter_instance_get(uint16_t eth_dev_id, uint16_t rx_queue_id, uint8_t *rxa_inst_id); +/** + * Set the adapter configuration parameters + * + * This API is to be used after adding at least one queue to the adapter. + * + * @param id + * Adapter identifier + * + * @param params + * A pointer to structure of type struct rte_event_eth_rx_adapter_runtime_params + * with configuration parameter values. + * + * @return + * - 0: Success + * - <0: Error code on failure + */ +__rte_experimental +int +rte_event_eth_rx_adapter_set_params(uint8_t id, + struct rte_event_eth_rx_adapter_runtime_params *params); + +/** + * Get the adapter configuration parameters + * + * @param id + * Adapter identifier + * + * @param[out] params + * A pointer to structure of type struct rte_event_eth_rx_adapter_runtime_params + * containing valid adapter parameters when return value is 0 + * + * @return + * - 0: Success + * - <0: Error code on failure + */ +__rte_experimental +int +rte_event_eth_rx_adapter_get_params(uint8_t id, + struct rte_event_eth_rx_adapter_runtime_params *params); + #ifdef __cplusplus } #endif diff --git a/lib/eventdev/version.map b/lib/eventdev/version.map index dd63ec6f68..01ae975a26 100644 --- a/lib/eventdev/version.map +++ b/lib/eventdev/version.map @@ -118,6 +118,10 @@ EXPERIMENTAL { rte_event_eth_tx_adapter_instance_get; rte_event_eth_tx_adapter_queue_start; rte_event_eth_tx_adapter_queue_stop; + + # added in 23.03 + rte_event_eth_rx_adapter_get_params; + rte_event_eth_rx_adapter_set_params; }; INTERNAL { From patchwork Sat Jan 7 16:18:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Naga Harish K, S V" X-Patchwork-Id: 121697 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id 5079BA00C2; Sat, 7 Jan 2023 17:19:09 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C814E42D1F; Sat, 7 Jan 2023 17:19:02 +0100 (CET) Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by mails.dpdk.org (Postfix) with ESMTP id A916C4067C for ; Sat, 7 Jan 2023 17:19:00 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1673108340; x=1704644340; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=JLZTuRdR3/dfBTVNylNBsH0MMPo1Fc+SyBRZbmzl50o=; b=lqeRw4RuUTu0Kn63Lo3sMn/CUlAIMaEkmY6pcOZ/63rYEgnMplmNntTg KDIXzQPIWSWr9apFY8JR20NcXDJaZ7txhAH7TnXTTkDfMsg8W+ptaNoTV x/ZvpwcC479wxaTlyx1Si/z+VsZHciX1mU8Wo8PQVYvwdIiF0GprsAas2 2b4AOODfu9K7CA+hyJc9PTCruh/J4VGzR63UhkUBv50oaeKBTKJHCHxtW HyOfp3IfZe5p6awhkASbPQOIkzXQyuymQygpa+ZlE1PBv3YyyhM/Fzfuo 7sfgmEqcQe/VGEttZQELarPN1sm3uIfablFSNJKckL4ZUYwzh3PV+n6QP g==; X-IronPort-AV: E=McAfee;i="6500,9779,10583"; a="384952339" X-IronPort-AV: E=Sophos;i="5.96,308,1665471600"; d="scan'208";a="384952339" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Jan 2023 08:19:00 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10583"; a="686770151" X-IronPort-AV: E=Sophos;i="5.96,308,1665471600"; d="scan'208";a="686770151" Received: from txandevlnx322.an.intel.com ([10.123.117.44]) by orsmga008.jf.intel.com with ESMTP; 07 Jan 2023 08:18:59 -0800 From: Naga Harish K S V To: jerinj@marvell.com, abhinandan.gujjar@intel.com Cc: dev@dpdk.org, jay.jayatheerthan@intel.com Subject: [PATCH 2/3] eventdev/eth_tx: add params set/get APIs Date: Sat, 7 Jan 2023 10:18:51 -0600 Message-Id: <20230107161852.3708690-2-s.v.naga.harish.k@intel.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20230107161852.3708690-1-s.v.naga.harish.k@intel.com> References: <20230107161852.3708690-1-s.v.naga.harish.k@intel.com> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The adapter configuration parameters defined in the ``struct rte_event_eth_tx_adapter_params`` can be configured and retrieved using ``rte_event_eth_tx_adapter_set_params`` and ``rte_event_eth_tx_adapter_get_params`` respectively. Signed-off-by: Naga Harish K S V --- app/test/test_event_eth_tx_adapter.c | 100 ++++++++++++++++++ .../prog_guide/event_ethernet_tx_adapter.rst | 22 ++++ lib/eventdev/rte_event_eth_tx_adapter.c | 50 ++++++++- lib/eventdev/rte_event_eth_tx_adapter.h | 58 ++++++++++ lib/eventdev/version.map | 2 + 5 files changed, 231 insertions(+), 1 deletion(-) diff --git a/app/test/test_event_eth_tx_adapter.c b/app/test/test_event_eth_tx_adapter.c index c19a87a86a..8e08379b33 100644 --- a/app/test/test_event_eth_tx_adapter.c +++ b/app/test/test_event_eth_tx_adapter.c @@ -40,6 +40,8 @@ test_event_eth_tx_adapter_common(void) #define PORT(p) default_params.port[(p)] #define TEST_ETHDEV_ID PORT(0) #define TEST_ETHDEV_PAIR_ID PORT(PAIR_PORT_INDEX(0)) +#define DEFAULT_FLUSH_THRESHOLD 1024 +#define TXA_NB_TX_WORK_DEFAULT 128 #define EDEV_RETRY 0xffff @@ -795,6 +797,102 @@ tx_adapter_queue_start_stop(void) return TEST_SUCCESS; } +static int +tx_adapter_set_get_params(void) +{ + int err; + struct rte_event_eth_tx_adapter_params in_params; + struct rte_event_eth_tx_adapter_params out_params; + + err = rte_event_eth_tx_adapter_queue_add(TEST_INST_ID, + TEST_ETHDEV_ID, + 0); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + /* Case 1: Get the default values of adapter */ + err = rte_event_eth_tx_adapter_get_params(TEST_INST_ID, &out_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + TEST_ASSERT(out_params.flush_threshold == DEFAULT_FLUSH_THRESHOLD, + "Expected %u got %u", + DEFAULT_FLUSH_THRESHOLD, out_params.flush_threshold); + TEST_ASSERT(out_params.max_nb_tx == TXA_NB_TX_WORK_DEFAULT, + "Expected %u got %u", + TXA_NB_TX_WORK_DEFAULT, out_params.max_nb_tx); + + /* Case 2: Set max_nb_tx = 32 (=TXA_BATCH_SEIZE) */ + in_params.max_nb_tx = 32; + in_params.flush_threshold = DEFAULT_FLUSH_THRESHOLD; + + err = rte_event_eth_tx_adapter_set_params(TEST_INST_ID, &in_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_eth_tx_adapter_get_params(TEST_INST_ID, &out_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + TEST_ASSERT(in_params.max_nb_tx == out_params.max_nb_tx, + "Expected %u got %u", + in_params.max_nb_tx, out_params.max_nb_tx); + TEST_ASSERT(in_params.flush_threshold == out_params.flush_threshold, + "Expected %u got %u", + in_params.flush_threshold, out_params.flush_threshold); + + /* Case 3: Set max_nb_tx = 192 */ + in_params.max_nb_tx = 192; + + err = rte_event_eth_tx_adapter_set_params(TEST_INST_ID, &in_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_eth_tx_adapter_get_params(TEST_INST_ID, &out_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + TEST_ASSERT(in_params.max_nb_tx == out_params.max_nb_tx, "Expected %u got %u", + in_params.max_nb_tx, out_params.max_nb_tx); + + /* Case 4: Set max_nb_tx = 256 */ + in_params.max_nb_tx = 256; + + err = rte_event_eth_tx_adapter_set_params(TEST_INST_ID, &in_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_eth_tx_adapter_get_params(TEST_INST_ID, &out_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + TEST_ASSERT(in_params.max_nb_tx == out_params.max_nb_tx, "Expected %u got %u", + in_params.max_nb_tx, out_params.max_nb_tx); + + /* Case 5: Set max_nb_tx = 30(loop_cnt++ & (TXA_FLUSH_THRESHOLD - 1)) == 0) { + if (txa->loop_cnt++ == txa->flush_threshold) { struct txa_service_ethdev *tdi; struct txa_service_queue_info *tqi; struct rte_eth_dev *dev; uint16_t i; + txa->loop_cnt = 0; tdi = txa->txa_ethdev; nb_tx = 0; @@ -767,6 +770,7 @@ txa_service_adapter_create_ext(uint8_t id, struct rte_eventdev *dev, txa->service_id = TXA_INVALID_SERVICE_ID; rte_spinlock_init(&txa->tx_lock); txa_service_data_array[id] = txa; + txa->flush_threshold = TXA_FLUSH_THRESHOLD; return 0; } @@ -1279,6 +1283,50 @@ rte_event_eth_tx_adapter_stats_reset(uint8_t id) return ret; } +int +rte_event_eth_tx_adapter_set_params(uint8_t id, + struct rte_event_eth_tx_adapter_params *txa_params) +{ + struct txa_service_data *txa; + if (txa_lookup()) + return -ENOMEM; + + TXA_CHECK_OR_ERR_RET(id); + + if (txa_params == NULL) + return -EINVAL; + + txa = txa_service_id_to_data(id); + rte_spinlock_lock(&txa->tx_lock); + txa->flush_threshold = txa_params->flush_threshold; + txa->max_nb_tx = txa_params->max_nb_tx; + rte_spinlock_unlock(&txa->tx_lock); + + return 0; +} + +int +rte_event_eth_tx_adapter_get_params(uint8_t id, + struct rte_event_eth_tx_adapter_params *txa_params) +{ + struct txa_service_data *txa; + if (txa_lookup()) + return -ENOMEM; + + TXA_CHECK_OR_ERR_RET(id); + + if (txa_params == NULL) + return -EINVAL; + + txa = txa_service_id_to_data(id); + rte_spinlock_lock(&txa->tx_lock); + txa_params->flush_threshold = txa->flush_threshold; + txa_params->max_nb_tx = txa->max_nb_tx; + rte_spinlock_unlock(&txa->tx_lock); + + return 0; +} + int rte_event_eth_tx_adapter_stop(uint8_t id) { diff --git a/lib/eventdev/rte_event_eth_tx_adapter.h b/lib/eventdev/rte_event_eth_tx_adapter.h index 645b87b78a..ca72fc7b2f 100644 --- a/lib/eventdev/rte_event_eth_tx_adapter.h +++ b/lib/eventdev/rte_event_eth_tx_adapter.h @@ -103,6 +103,21 @@ struct rte_event_eth_tx_adapter_conf { */ }; +/** + * Adapter configuration parameters + */ +struct rte_event_eth_tx_adapter_params { + uint32_t max_nb_tx; + /**< The adapter can return early if it has processed at least + * max_nb_tx mbufs. This isn't treated as a requirement; batching may + * cause the adapter to process more than max_nb_tx mbufs. + */ + uint16_t flush_threshold; + /**< the number of service function iteration count to + * flush buffered packets. + */ +}; + /** * Function type used for adapter configuration callback. The callback is * used to fill in members of the struct rte_event_eth_tx_adapter_conf, this @@ -502,6 +517,49 @@ __rte_experimental int rte_event_eth_tx_adapter_queue_stop(uint16_t eth_dev_id, uint16_t tx_queue_id); +/** + * Set the configuration parameters for adapter. + * + * In case not all fields are to be updated, the suggested way to use this + * api is read the current values using rte_event_eth_tx_adapter_get_params() + * and modify the required parameters and then call + * rte_event_eth_tx_adapter_set_params(). + * + * This API is to be used after adding at least one queue to the adapter. + * + * @param id + * Adapter identifier + * @param params + * A pointer to structure of type struct rte_event_eth_tx_adapter_params + * with configuration parameter values. + * + * @return + * - 0: Success + * - <0: Error code on failure + */ +__rte_experimental +int +rte_event_eth_tx_adapter_set_params(uint8_t id, + struct rte_event_eth_tx_adapter_params *params); + +/** + * Get the configuration parameters of adapter. + * + * @param id + * Adapter identifier + * @param[out] params + * A pointer to structure of type struct rte_event_eth_tx_adapter_params + * containing valid Tx adapter parameters when return value is 0 + * + * @return + * - 0: Success + * - <0: Error code on failure + */ +__rte_experimental +int +rte_event_eth_tx_adapter_get_params(uint8_t id, + struct rte_event_eth_tx_adapter_params *params); + #ifdef __cplusplus } #endif diff --git a/lib/eventdev/version.map b/lib/eventdev/version.map index 01ae975a26..55e8cb514c 100644 --- a/lib/eventdev/version.map +++ b/lib/eventdev/version.map @@ -122,6 +122,8 @@ EXPERIMENTAL { # added in 23.03 rte_event_eth_rx_adapter_get_params; rte_event_eth_rx_adapter_set_params; + rte_event_eth_tx_adapter_get_params; + rte_event_eth_tx_adapter_set_params; }; INTERNAL { From patchwork Sat Jan 7 16:18:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Naga Harish K, S V" X-Patchwork-Id: 121698 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id E273DA00C2; Sat, 7 Jan 2023 17:19:17 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D29DA42D16; Sat, 7 Jan 2023 17:19:17 +0100 (CET) Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by mails.dpdk.org (Postfix) with ESMTP id B0AC642D24 for ; Sat, 7 Jan 2023 17:19:15 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1673108355; x=1704644355; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=CSFLmQT1YhvayyZZttKMz/OAU7hoW3p5rzgNcRzWl/Y=; b=btGsQgFieB8UILFS68cfihAzzqqoGOg0Ifp9XDJ5qyQ3ZI1GaUrYJaJb cKgDPa3JO5/fnRQMe83nDACIwf0+uJ4QkSj5z39YmsePBucVgJxcwIuip NsG2yxEMoTfcAvk0hBP7GFdJ5uKHDRIbtwK9gcERZND2hUpLt0McU1npN x2mf8sJgToCckwRK9nraTToqn+ZZkWOQeWxXb1+Cj7vozxbGgoxOK9ufj qn1q7Cc2wUi2Nq1/Jlt5uWF8AwcPm6m+paakxiDXVzz2h5RQ5N2syjVw8 mLrLL8XBRZuglveWjLGjR8kCNfPjbfU9ww6mxoSo3GNtgNOkY0iZwLxCn g==; X-IronPort-AV: E=McAfee;i="6500,9779,10583"; a="384952369" X-IronPort-AV: E=Sophos;i="5.96,308,1665471600"; d="scan'208";a="384952369" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Jan 2023 08:19:14 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10583"; a="686770175" X-IronPort-AV: E=Sophos;i="5.96,308,1665471600"; d="scan'208";a="686770175" Received: from txandevlnx322.an.intel.com ([10.123.117.44]) by orsmga008.jf.intel.com with ESMTP; 07 Jan 2023 08:19:14 -0800 From: Naga Harish K S V To: jerinj@marvell.com, abhinandan.gujjar@intel.com Cc: dev@dpdk.org, jay.jayatheerthan@intel.com Subject: [PATCH 3/3] eventdev/crypto: add params set/get APIs Date: Sat, 7 Jan 2023 10:18:52 -0600 Message-Id: <20230107161852.3708690-3-s.v.naga.harish.k@intel.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20230107161852.3708690-1-s.v.naga.harish.k@intel.com> References: <20230107161852.3708690-1-s.v.naga.harish.k@intel.com> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The adapter configuration parameters defined in the ``struct rte_event_crypto_adapter_params`` can be configured and retrieved using ``rte_event_crypto_adapter_set_params`` and ``rte_event_eth_rx_adapter_get_params`` respectively. Signed-off-by: Naga Harish K S V --- app/test/test_event_crypto_adapter.c | 63 +++++++++++++++++++ .../prog_guide/event_crypto_adapter.rst | 19 ++++++ lib/eventdev/rte_event_crypto_adapter.c | 46 ++++++++++++++ lib/eventdev/rte_event_crypto_adapter.h | 53 ++++++++++++++++ lib/eventdev/version.map | 2 + 5 files changed, 183 insertions(+) diff --git a/app/test/test_event_crypto_adapter.c b/app/test/test_event_crypto_adapter.c index a38e389abd..c443192c58 100644 --- a/app/test/test_event_crypto_adapter.c +++ b/app/test/test_event_crypto_adapter.c @@ -272,6 +272,65 @@ test_crypto_adapter_stats(void) return TEST_SUCCESS; } +static int +test_crypto_adapter_params(void) +{ + int err; + struct rte_event_crypto_adapter_params in_params; + struct rte_event_crypto_adapter_params out_params; + + /* Case 1: Get the default value of mbufs processed by adapter */ + err = rte_event_crypto_adapter_get_params(TEST_ADAPTER_ID, &out_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + /* Case 2: Set max_nb = 32 (=BATCH_SEIZE) */ + in_params.max_nb = 32; + + err = rte_event_crypto_adapter_set_params(TEST_ADAPTER_ID, &in_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_crypto_adapter_get_params(TEST_ADAPTER_ID, &out_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + TEST_ASSERT(in_params.max_nb == out_params.max_nb, "Expected %u got %u", + in_params.max_nb, out_params.max_nb); + + /* Case 3: Set max_nb = 192 */ + in_params.max_nb = 192; + + err = rte_event_crypto_adapter_set_params(TEST_ADAPTER_ID, &in_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_crypto_adapter_get_params(TEST_ADAPTER_ID, &out_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + TEST_ASSERT(in_params.max_nb == out_params.max_nb, "Expected %u got %u", + in_params.max_nb, out_params.max_nb); + + /* Case 4: Set max_nb = 256 */ + in_params.max_nb = 256; + + err = rte_event_crypto_adapter_set_params(TEST_ADAPTER_ID, &in_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_crypto_adapter_get_params(TEST_ADAPTER_ID, &out_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + TEST_ASSERT(in_params.max_nb == out_params.max_nb, "Expected %u got %u", + in_params.max_nb, out_params.max_nb); + + /* Case 5: Set max_nb = 30(lock); + adapter->max_nb = params->max_nb; + rte_spinlock_unlock(&adapter->lock); + + return 0; +} + +int +rte_event_crypto_adapter_get_params(uint8_t id, + struct rte_event_crypto_adapter_params *params) +{ + struct event_crypto_adapter *adapter; + + EVENT_CRYPTO_ADAPTER_ID_VALID_OR_ERR_RET(id, -EINVAL); + + if (params == NULL) { + RTE_EDEV_LOG_ERR("params pointer is NULL\n"); + return -EINVAL; + } + + adapter = eca_id_to_adapter(id); + if (adapter == NULL) + return -EINVAL; + + params->max_nb = adapter->max_nb; + + return 0; +} + int rte_event_crypto_adapter_service_id_get(uint8_t id, uint32_t *service_id) { diff --git a/lib/eventdev/rte_event_crypto_adapter.h b/lib/eventdev/rte_event_crypto_adapter.h index 83d154a6ce..ed744526e9 100644 --- a/lib/eventdev/rte_event_crypto_adapter.h +++ b/lib/eventdev/rte_event_crypto_adapter.h @@ -138,6 +138,8 @@ * - rte_event_crypto_adapter_stop() * - rte_event_crypto_adapter_stats_get() * - rte_event_crypto_adapter_stats_reset() + * - rte_event_crypto_adapter_get_params() + * - rte_event_crypto_adapter_set_params() * The application creates an instance using rte_event_crypto_adapter_create() * or rte_event_crypto_adapter_create_ext(). @@ -253,6 +255,17 @@ struct rte_event_crypto_adapter_conf { */ }; +/** + * Adapter configuration parameters + */ +struct rte_event_crypto_adapter_params { + uint32_t max_nb; + /**< The adapter can return early if it has processed at least + * max_nb crypto ops. This isn't treated as a requirement; batching + * may cause the adapter to process more than max_nb crypto ops. + */ +}; + #define RTE_EVENT_CRYPTO_ADAPTER_EVENT_VECTOR 0x1 /**< This flag indicates that crypto operations processed on the crypto * adapter need to be vectorized @@ -594,6 +607,46 @@ rte_event_crypto_adapter_service_id_get(uint8_t id, uint32_t *service_id); int rte_event_crypto_adapter_event_port_get(uint8_t id, uint8_t *event_port_id); +/** + * Set the adapter configuration parameters + * + * This api need to be called after adding at least one qp to adapter + * + * @param id + * Adapter identifier + * + * @param params + * A pointer to structure of type struct rte_event_crypto_adapter_params + * with configuration parameter values. + * + * @return + * - 0: Success + * - <0: Error code on failure + */ +__rte_experimental +int +rte_event_crypto_adapter_set_params(uint8_t id, + struct rte_event_crypto_adapter_params *params); + +/** + * Get the adapter configuration parameters + * + * @param id + * Adapter identifier + * + * @param[out] params + * A pointer to structure of type struct rte_event_crypto_adapter_params + * containing valid adapter parameters when return value is 0 + * + * @return + * - 0: Success + * - <0: Error code on failure + */ +__rte_experimental +int +rte_event_crypto_adapter_get_params(uint8_t id, + struct rte_event_crypto_adapter_params *params); + /** * Retrieve vector limits for a given event dev and crypto dev pair. * @see rte_event_crypto_adapter_vector_limits diff --git a/lib/eventdev/version.map b/lib/eventdev/version.map index 55e8cb514c..d17e67356c 100644 --- a/lib/eventdev/version.map +++ b/lib/eventdev/version.map @@ -120,6 +120,8 @@ EXPERIMENTAL { rte_event_eth_tx_adapter_queue_stop; # added in 23.03 + rte_event_crypto_adapter_get_params; + rte_event_crypto_adapter_set_params; rte_event_eth_rx_adapter_get_params; rte_event_eth_rx_adapter_set_params; rte_event_eth_tx_adapter_get_params;