From patchwork Thu Aug 17 05:37:10 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: 130459 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 F39E143083; Thu, 17 Aug 2023 07:37:17 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CFC8F40ED8; Thu, 17 Aug 2023 07:37:17 +0200 (CEST) Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.88]) by mails.dpdk.org (Postfix) with ESMTP id 7282D40685 for ; Thu, 17 Aug 2023 07:37:15 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1692250635; x=1723786635; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=CIqA4V31nRugwChw/lD8Y2kidTmiRWEaBa1ottf2TF8=; b=fNE3TPu4z2Qf1nUMR5UU2hck+Y5qhE1tzDeoWREawvP3LqbroBD9KBeh Vm1uIoRZz+QXWhngf8Z2suv5oHG+QfPMuRKm936gLjCfbnzDwvdop9Ihn bN3YgNsDsuoSdGjss9eTiXmmyHudpMyk8kOcC1hZFP/vaN8qCn9cBK70E bmZ3nlMisz6DnNZ/WxZe4/OenFiPbQESRDriX/l+o2XEdQcWruQ1UhkmZ x56yZ/02RtvQSsUqM2KVnb/BUUZJaJzQ9hJCtv0GJgu3VPIbNKQ/cXmZf S9H5gygbvo3UVaET37TJlELZcNrXuBg1Jy/fVs0VTUaR/UdSNjxZZqwpQ w==; X-IronPort-AV: E=McAfee;i="6600,9927,10803"; a="403697931" X-IronPort-AV: E=Sophos;i="6.01,179,1684825200"; d="scan'208";a="403697931" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Aug 2023 22:37:13 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10803"; a="737571182" X-IronPort-AV: E=Sophos;i="6.01,179,1684825200"; d="scan'208";a="737571182" Received: from txandevlnx321.an.intel.com ([10.123.117.43]) by fmsmga007.fm.intel.com with ESMTP; 16 Aug 2023 22:37:12 -0700 From: Naga Harish K S V To: jerinjacobk@gmail.com Cc: dev@dpdk.org, jay.jayatheerthan@intel.com Subject: [PATCH] eventdev/eth_rx: add new adapter create API Date: Thu, 17 Aug 2023 00:37:10 -0500 Message-Id: <20230817053710.3985750-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 Add new API "rte_event_eth_rx_adapter_create_ext_with_params()" for creating Rx adapter instance. This API is similar to rte_event_eth_rx_adapter_create_ext() with an additional input argument for adapter configuration parameters of type "struct rte_event_eth_rx_adapter_params". Signed-off-by: Naga Harish K S V --- app/test/test_event_eth_rx_adapter.c | 87 +++++++++++++++++++ .../prog_guide/event_ethernet_rx_adapter.rst | 3 + lib/eventdev/rte_event_eth_rx_adapter.c | 75 +++++++++++----- lib/eventdev/rte_event_eth_rx_adapter.h | 37 +++++++- lib/eventdev/version.map | 3 + 5 files changed, 182 insertions(+), 23 deletions(-) diff --git a/app/test/test_event_eth_rx_adapter.c b/app/test/test_event_eth_rx_adapter.c index 52d146f97c..2d5e197666 100644 --- a/app/test/test_event_eth_rx_adapter.c +++ b/app/test/test_event_eth_rx_adapter.c @@ -444,6 +444,91 @@ adapter_create_with_params(void) return TEST_SUCCESS; } +static int +test_port_conf_cb(uint8_t id, uint8_t event_dev_id, + struct rte_event_eth_rx_adapter_conf *conf, + void *conf_arg) +{ + struct rte_event_port_conf *port_conf, def_port_conf = {0}; + uint32_t started; + static int port_allocated; + static uint8_t port_id; + int ret; + + if (port_allocated) { + conf->event_port_id = port_id; + conf->max_nb_rx = 128; + return 0; + } + + RTE_SET_USED(id); + + ret = rte_event_dev_attr_get(event_dev_id, RTE_EVENT_DEV_ATTR_STARTED, + &started); + if (ret < 0) + return ret; + + if (started) + rte_event_dev_stop(event_dev_id); + + port_id = 1; + + if (conf_arg != NULL) + port_conf = conf_arg; + else { + port_conf = &def_port_conf; + ret = rte_event_port_default_conf_get(event_dev_id, port_id, + port_conf); + if (ret < 0) + return ret; + } + + ret = rte_event_port_setup(event_dev_id, port_id, port_conf); + if (ret < 0) + return ret; + + conf->event_port_id = port_id; + conf->max_nb_rx = 128; + + if (started) + rte_event_dev_start(event_dev_id); + + /* Reuse this port number next time this is called */ + port_allocated = 1; + + return 0; +} + +static int +adapter_create_ext_with_params(void) +{ + int err; + struct rte_event_dev_info dev_info; + struct rte_event_eth_rx_adapter_params rxa_params; + + err = rte_event_dev_info_get(TEST_DEV_ID, &dev_info); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + rxa_params.use_queue_event_buf = false; + rxa_params.event_buf_size = 0; + + err = rte_event_eth_rx_adapter_create_ext_with_params(TEST_INST_ID, + TEST_DEV_ID, test_port_conf_cb, NULL, &rxa_params); + TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err); + + rxa_params.event_buf_size = 128; + + err = rte_event_eth_rx_adapter_create_ext_with_params(TEST_INST_ID, + TEST_DEV_ID, test_port_conf_cb, NULL, &rxa_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_eth_rx_adapter_create_ext_with_params(TEST_INST_ID, + TEST_DEV_ID, test_port_conf_cb, NULL, &rxa_params); + TEST_ASSERT(err == -EEXIST, "Expected -EEXIST got %d", err); + + return TEST_SUCCESS; +} + static int adapter_queue_event_buf_test(void) { @@ -1337,6 +1422,8 @@ static struct unit_test_suite event_eth_rx_tests = { adapter_pollq_instance_get), TEST_CASE_ST(adapter_create, adapter_free, adapter_get_set_params), + TEST_CASE_ST(adapter_create_ext_with_params, adapter_free, + adapter_start_stop), TEST_CASES_END() /**< NULL terminate unit test array */ } }; diff --git a/doc/guides/prog_guide/event_ethernet_rx_adapter.rst b/doc/guides/prog_guide/event_ethernet_rx_adapter.rst index 7c5e73b9fd..2e68cca798 100644 --- a/doc/guides/prog_guide/event_ethernet_rx_adapter.rst +++ b/doc/guides/prog_guide/event_ethernet_rx_adapter.rst @@ -71,6 +71,9 @@ set to true. The function is passed the event device to be associated with the adapter and port configuration for the adapter to setup an event port if the adapter needs to use a service function. +If the application desires to control both the event port allocation and event +buffer size, ``rte_event_eth_rx_adapter_create_ext_with_params()`` can be used. + Event device configuration for service based adapter ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/lib/eventdev/rte_event_eth_rx_adapter.c b/lib/eventdev/rte_event_eth_rx_adapter.c index f7f93ccdfd..33408023f7 100644 --- a/lib/eventdev/rte_event_eth_rx_adapter.c +++ b/lib/eventdev/rte_event_eth_rx_adapter.c @@ -2485,6 +2485,39 @@ rxa_create(uint8_t id, uint8_t dev_id, return 0; } +static int __rte_cold +rxa_config_params_validate(struct rte_event_eth_rx_adapter_params *rxa_params, + struct rte_event_eth_rx_adapter_params *temp_params) + { + if (rxa_params == NULL) { + /* use default values if rxa_params is NULL */ + temp_params->event_buf_size = ETH_EVENT_BUFFER_SIZE; + temp_params->use_queue_event_buf = false; + } else if (!rxa_params->use_queue_event_buf && + rxa_params->event_buf_size == 0) { + RTE_EDEV_LOG_ERR("event buffer size can't be zero\n"); + return -EINVAL; + } else if (rxa_params->use_queue_event_buf && + rxa_params->event_buf_size != 0) { + RTE_EDEV_LOG_ERR("event buffer size needs to be configured " + "as part of queue add\n"); + return -EINVAL; + } + + *temp_params = *rxa_params; + /* adjust event buff size with BATCH_SIZE used for fetching + * packets from NIC rx queues to get full buffer utilization + * and prevent unnecessary rollovers. + */ + if (!temp_params->use_queue_event_buf) { + temp_params->event_buf_size = + RTE_ALIGN(temp_params->event_buf_size, BATCH_SIZE); + temp_params->event_buf_size += (BATCH_SIZE + BATCH_SIZE); + } + + return 0; +} + int rte_event_eth_rx_adapter_create_ext(uint8_t id, uint8_t dev_id, rte_event_eth_rx_adapter_conf_cb conf_cb, @@ -2511,27 +2544,9 @@ rte_event_eth_rx_adapter_create_with_params(uint8_t id, uint8_t dev_id, if (port_config == NULL) return -EINVAL; - if (rxa_params == NULL) { - /* use default values if rxa_params is NULL */ - rxa_params = &temp_params; - rxa_params->event_buf_size = ETH_EVENT_BUFFER_SIZE; - rxa_params->use_queue_event_buf = false; - } else if ((!rxa_params->use_queue_event_buf && - rxa_params->event_buf_size == 0) || - (rxa_params->use_queue_event_buf && - rxa_params->event_buf_size != 0)) { - RTE_EDEV_LOG_ERR("Invalid adapter params\n"); - return -EINVAL; - } else if (!rxa_params->use_queue_event_buf) { - /* adjust event buff size with BATCH_SIZE used for fetching - * packets from NIC rx queues to get full buffer utilization - * and prevent unnecessary rollovers. - */ - - rxa_params->event_buf_size = - RTE_ALIGN(rxa_params->event_buf_size, BATCH_SIZE); - rxa_params->event_buf_size += (BATCH_SIZE + BATCH_SIZE); - } + ret = rxa_config_params_validate(rxa_params, &temp_params); + if (ret != 0) + return ret; pc = rte_malloc(NULL, sizeof(*pc), 0); if (pc == NULL) @@ -2539,7 +2554,7 @@ rte_event_eth_rx_adapter_create_with_params(uint8_t id, uint8_t dev_id, *pc = *port_config; - ret = rxa_create(id, dev_id, rxa_params, rxa_default_conf_cb, pc); + ret = rxa_create(id, dev_id, &temp_params, rxa_default_conf_cb, pc); if (ret) rte_free(pc); @@ -2549,6 +2564,22 @@ rte_event_eth_rx_adapter_create_with_params(uint8_t id, uint8_t dev_id, return ret; } +int __rte_cold +rte_event_eth_rx_adapter_create_ext_with_params(uint8_t id, uint8_t dev_id, + rte_event_eth_rx_adapter_conf_cb conf_cb, + void *conf_arg, + struct rte_event_eth_rx_adapter_params *rxa_params) +{ + struct rte_event_eth_rx_adapter_params temp_params = {0}; + int ret; + + ret = rxa_config_params_validate(rxa_params, &temp_params); + if (ret != 0) + return ret; + + return rxa_create(id, dev_id, &temp_params, conf_cb, conf_arg); +} + int rte_event_eth_rx_adapter_create(uint8_t id, uint8_t dev_id, struct rte_event_port_conf *port_config) diff --git a/lib/eventdev/rte_event_eth_rx_adapter.h b/lib/eventdev/rte_event_eth_rx_adapter.h index fe2a6bdd2c..77054833be 100644 --- a/lib/eventdev/rte_event_eth_rx_adapter.h +++ b/lib/eventdev/rte_event_eth_rx_adapter.h @@ -27,6 +27,7 @@ * - rte_event_eth_rx_adapter_create_ext() * - rte_event_eth_rx_adapter_create() * - rte_event_eth_rx_adapter_create_with_params() + * - rte_event_eth_rx_adapter_create_ext_with_params() * - rte_event_eth_rx_adapter_free() * - rte_event_eth_rx_adapter_queue_add() * - rte_event_eth_rx_adapter_queue_del() @@ -45,7 +46,8 @@ * * 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. + * or rte_event_eth_rx_adapter_create_with_params() or + * rte_event_eth_rx_adapter_create_ext_with_params() functions. * * 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 @@ -469,6 +471,39 @@ int rte_event_eth_rx_adapter_create_with_params(uint8_t id, uint8_t dev_id, struct rte_event_port_conf *port_config, struct rte_event_eth_rx_adapter_params *rxa_params); +/** + * This is a variant of rte_event_eth_rx_adapter_create_ext() with additional + * adapter params specified in ``struct rte_event_eth_rx_adapter_params``. + * + * @param id + * The identifier of the ethernet Rx event adapter. + * + * @param dev_id + * The identifier of the event device to configure. + * + * @param conf_cb + * Callback function that fills in members of a + * struct rte_event_eth_rx_adapter_conf struct passed into + * it. + * + * @param conf_arg + * Argument that is passed to the conf_cb function. + * + * @param rxa_params + * Pointer to struct rte_event_eth_rx_adapter_params. + * In case of NULL, default values are used. + * + * @return + * - 0: Success + * - <0: Error code on failure + */ +__rte_experimental +int __rte_cold +rte_event_eth_rx_adapter_create_ext_with_params(uint8_t id, uint8_t dev_id, + rte_event_eth_rx_adapter_conf_cb conf_cb, + void *conf_arg, + struct rte_event_eth_rx_adapter_params *rxa_params); + /** * Free an event adapter * diff --git a/lib/eventdev/version.map b/lib/eventdev/version.map index b03c10d99f..7ce09a87bb 100644 --- a/lib/eventdev/version.map +++ b/lib/eventdev/version.map @@ -131,6 +131,9 @@ EXPERIMENTAL { rte_event_eth_tx_adapter_runtime_params_init; rte_event_eth_tx_adapter_runtime_params_set; rte_event_timer_remaining_ticks_get; + + # added in 23.11 + rte_event_eth_rx_adapter_create_ext_with_params; }; INTERNAL {