DPDK patches and discussions
 help / color / mirror / Atom feed
* [PATCH] eventdev/eth_rx:  add new adapter create API
@ 2023-08-17  5:37 Naga Harish K S V
  2023-08-17  6:03 ` [PATCH v2] " Naga Harish K S V
  0 siblings, 1 reply; 19+ messages in thread
From: Naga Harish K S V @ 2023-08-17  5:37 UTC (permalink / raw)
  To: jerinjacobk; +Cc: dev, jay.jayatheerthan

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 <s.v.naga.harish.k@intel.com>
---
 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 {
-- 
2.25.1


^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH v2] eventdev/eth_rx:  add new adapter create API
  2023-08-17  5:37 [PATCH] eventdev/eth_rx: add new adapter create API Naga Harish K S V
@ 2023-08-17  6:03 ` Naga Harish K S V
  2023-08-17  8:57   ` Jerin Jacob
  2023-08-17 10:33   ` [PATCH v3] " Naga Harish K S V
  0 siblings, 2 replies; 19+ messages in thread
From: Naga Harish K S V @ 2023-08-17  6:03 UTC (permalink / raw)
  To: jerinjacobk; +Cc: dev, jay.jayatheerthan

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 <s.v.naga.harish.k@intel.com>
---
v2:
 * Fix warning
---
---
 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..767b4a8a31 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 {
-- 
2.25.1


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v2] eventdev/eth_rx: add new adapter create API
  2023-08-17  6:03 ` [PATCH v2] " Naga Harish K S V
@ 2023-08-17  8:57   ` Jerin Jacob
  2023-08-17  9:36     ` Naga Harish K, S V
  2023-08-17 10:33   ` [PATCH v3] " Naga Harish K S V
  1 sibling, 1 reply; 19+ messages in thread
From: Jerin Jacob @ 2023-08-17  8:57 UTC (permalink / raw)
  To: Naga Harish K S V
  Cc: dev, jay.jayatheerthan, Erik Gabriel Carrillo, Gujjar,
	Abhinandan S, McDaniel, Timothy, Pavan Nikhilesh,
	Shijith Thotton, Hemant Agrawal, Sachin Saxena, Van Haaren,
	Harry, Mattias Rönnblom, Liang Ma, Peter Mccarthy

On Thu, Aug 17, 2023 at 11:33 AM Naga Harish K S V
<s.v.naga.harish.k@intel.com> wrote:
>
> 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 <s.v.naga.harish.k@intel.com>

> + */
> +__rte_experimental
> +int __rte_cold

Is there any specific reason to keep __rte_cold here? None of the
other libraries has this.
Rest looks good to me.

For library changes, please keep all evendev maintainers in Cc. I have
added those now for this email.


> +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);

^ permalink raw reply	[flat|nested] 19+ messages in thread

* RE: [PATCH v2] eventdev/eth_rx: add new adapter create API
  2023-08-17  8:57   ` Jerin Jacob
@ 2023-08-17  9:36     ` Naga Harish K, S V
  2023-08-17  9:48       ` Jerin Jacob
  0 siblings, 1 reply; 19+ messages in thread
From: Naga Harish K, S V @ 2023-08-17  9:36 UTC (permalink / raw)
  To: Jerin Jacob
  Cc: dev, Jayatheerthan, Jay, Carrillo, Erik G, Gujjar, Abhinandan S,
	McDaniel, Timothy, Pavan Nikhilesh, Shijith Thotton,
	Hemant Agrawal, Sachin Saxena, Van Haaren, Harry,
	mattias.ronnblom, Liang Ma, Mccarthy, Peter



> -----Original Message-----
> From: Jerin Jacob <jerinjacobk@gmail.com>
> Sent: Thursday, August 17, 2023 2:27 PM
> To: Naga Harish K, S V <s.v.naga.harish.k@intel.com>
> Cc: dev@dpdk.org; Jayatheerthan, Jay <jay.jayatheerthan@intel.com>;
> Carrillo, Erik G <erik.g.carrillo@intel.com>; Gujjar, Abhinandan S
> <abhinandan.gujjar@intel.com>; McDaniel, Timothy
> <timothy.mcdaniel@intel.com>; Pavan Nikhilesh
> <pbhagavatula@marvell.com>; Shijith Thotton <sthotton@marvell.com>;
> Hemant Agrawal <hemant.agrawal@nxp.com>; Sachin Saxena
> <sachin.saxena@oss.nxp.com>; Van Haaren, Harry
> <harry.van.haaren@intel.com>; mattias.ronnblom
> <mattias.ronnblom@ericsson.com>; Liang Ma <liangma@liangbit.com>;
> Mccarthy, Peter <peter.mccarthy@intel.com>
> Subject: Re: [PATCH v2] eventdev/eth_rx: add new adapter create API
> 
> On Thu, Aug 17, 2023 at 11:33 AM Naga Harish K S V
> <s.v.naga.harish.k@intel.com> wrote:
> >
> > 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 <s.v.naga.harish.k@intel.com>
> 
> > + */
> > +__rte_experimental
> > +int __rte_cold
> 
> Is there any specific reason to keep __rte_cold here? None of the other
> libraries has this.

__rte_cold is a hint function in the cold path. It is used for code optimization purposes
and many net PMDs are using this.
 
> Rest looks good to me.
> 
> For library changes, please keep all evendev maintainers in Cc. I have added
> those now for this email.
> 
> 
> > +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);

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v2] eventdev/eth_rx: add new adapter create API
  2023-08-17  9:36     ` Naga Harish K, S V
@ 2023-08-17  9:48       ` Jerin Jacob
  2023-08-17 10:36         ` Naga Harish K, S V
  0 siblings, 1 reply; 19+ messages in thread
From: Jerin Jacob @ 2023-08-17  9:48 UTC (permalink / raw)
  To: Naga Harish K, S V
  Cc: dev, Jayatheerthan, Jay, Carrillo, Erik G, Gujjar, Abhinandan S,
	McDaniel, Timothy, Pavan Nikhilesh, Shijith Thotton,
	Hemant Agrawal, Sachin Saxena, Van Haaren, Harry,
	mattias.ronnblom, Liang Ma, Mccarthy, Peter

On Thu, Aug 17, 2023 at 3:06 PM Naga Harish K, S V
<s.v.naga.harish.k@intel.com> wrote:
>
>
>
> > -----Original Message-----
> > From: Jerin Jacob <jerinjacobk@gmail.com>
> > Sent: Thursday, August 17, 2023 2:27 PM
> > To: Naga Harish K, S V <s.v.naga.harish.k@intel.com>
> > Cc: dev@dpdk.org; Jayatheerthan, Jay <jay.jayatheerthan@intel.com>;
> > Carrillo, Erik G <erik.g.carrillo@intel.com>; Gujjar, Abhinandan S
> > <abhinandan.gujjar@intel.com>; McDaniel, Timothy
> > <timothy.mcdaniel@intel.com>; Pavan Nikhilesh
> > <pbhagavatula@marvell.com>; Shijith Thotton <sthotton@marvell.com>;
> > Hemant Agrawal <hemant.agrawal@nxp.com>; Sachin Saxena
> > <sachin.saxena@oss.nxp.com>; Van Haaren, Harry
> > <harry.van.haaren@intel.com>; mattias.ronnblom
> > <mattias.ronnblom@ericsson.com>; Liang Ma <liangma@liangbit.com>;
> > Mccarthy, Peter <peter.mccarthy@intel.com>
> > Subject: Re: [PATCH v2] eventdev/eth_rx: add new adapter create API
> >
> > On Thu, Aug 17, 2023 at 11:33 AM Naga Harish K S V
> > <s.v.naga.harish.k@intel.com> wrote:
> > >
> > > 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 <s.v.naga.harish.k@intel.com>
> >
> > > + */
> > > +__rte_experimental
> > > +int __rte_cold
> >
> > Is there any specific reason to keep __rte_cold here? None of the other
> > libraries has this.
>
> __rte_cold is a hint function in the cold path. It is used for code optimization purposes
> and many net PMDs are using this.

I understand that, the question was more on what is the significance
of that for this specific API ?
There are a lot of slow path APIs in evendev and all other library
none of them use it.
It just put into different section of binary and optimize more for
size. I think, there is no specific reason to add this ONLY for this
API
to make it standout.

Also, The cold attribute is not implemented in GCC versions earlier than 4.3.




>
> > Rest looks good to me.
> >
> > For library changes, please keep all evendev maintainers in Cc. I have added
> > those now for this email.
> >
> >
> > > +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);

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH v3] eventdev/eth_rx:  add new adapter create API
  2023-08-17  6:03 ` [PATCH v2] " Naga Harish K S V
  2023-08-17  8:57   ` Jerin Jacob
@ 2023-08-17 10:33   ` Naga Harish K S V
  2023-08-17 10:42     ` Jerin Jacob
  2023-08-17 14:50     ` [PATCH v4] " Naga Harish K S V
  1 sibling, 2 replies; 19+ messages in thread
From: Naga Harish K S V @ 2023-08-17 10:33 UTC (permalink / raw)
  To: jerinjacobk
  Cc: dev, erik.g.carrillo, abhinandan.gujjar, timothy.mcdaniel,
	pbhagavatula, sthotton, hemant.agrawal, sachin.saxena,
	harry.van.haaren, mattias.ronnblom, liangma, peter.mccarthy,
	jay.jayatheerthan

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 <s.v.naga.harish.k@intel.com>
---
v2:
 * Fix warning
v3:
 * remove __rte_cold hint as per review comments
---
---
 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..1574c89678 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_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 {
-- 
2.25.1


^ permalink raw reply	[flat|nested] 19+ messages in thread

* RE: [PATCH v2] eventdev/eth_rx: add new adapter create API
  2023-08-17  9:48       ` Jerin Jacob
@ 2023-08-17 10:36         ` Naga Harish K, S V
  0 siblings, 0 replies; 19+ messages in thread
From: Naga Harish K, S V @ 2023-08-17 10:36 UTC (permalink / raw)
  To: Jerin Jacob
  Cc: dev, Jayatheerthan, Jay, Carrillo, Erik G, Gujjar, Abhinandan S,
	McDaniel, Timothy, Pavan Nikhilesh, Shijith Thotton,
	Hemant Agrawal, Sachin Saxena, Van Haaren, Harry,
	mattias.ronnblom, Liang Ma, Mccarthy, Peter



> -----Original Message-----
> From: Jerin Jacob <jerinjacobk@gmail.com>
> Sent: Thursday, August 17, 2023 3:18 PM
> To: Naga Harish K, S V <s.v.naga.harish.k@intel.com>
> Cc: dev@dpdk.org; Jayatheerthan, Jay <jay.jayatheerthan@intel.com>;
> Carrillo, Erik G <erik.g.carrillo@intel.com>; Gujjar, Abhinandan S
> <abhinandan.gujjar@intel.com>; McDaniel, Timothy
> <timothy.mcdaniel@intel.com>; Pavan Nikhilesh
> <pbhagavatula@marvell.com>; Shijith Thotton <sthotton@marvell.com>;
> Hemant Agrawal <hemant.agrawal@nxp.com>; Sachin Saxena
> <sachin.saxena@oss.nxp.com>; Van Haaren, Harry
> <harry.van.haaren@intel.com>; mattias.ronnblom
> <mattias.ronnblom@ericsson.com>; Liang Ma <liangma@liangbit.com>;
> Mccarthy, Peter <peter.mccarthy@intel.com>
> Subject: Re: [PATCH v2] eventdev/eth_rx: add new adapter create API
> 
> On Thu, Aug 17, 2023 at 3:06 PM Naga Harish K, S V
> <s.v.naga.harish.k@intel.com> wrote:
> >
> >
> >
> > > -----Original Message-----
> > > From: Jerin Jacob <jerinjacobk@gmail.com>
> > > Sent: Thursday, August 17, 2023 2:27 PM
> > > To: Naga Harish K, S V <s.v.naga.harish.k@intel.com>
> > > Cc: dev@dpdk.org; Jayatheerthan, Jay <jay.jayatheerthan@intel.com>;
> > > Carrillo, Erik G <erik.g.carrillo@intel.com>; Gujjar, Abhinandan S
> > > <abhinandan.gujjar@intel.com>; McDaniel, Timothy
> > > <timothy.mcdaniel@intel.com>; Pavan Nikhilesh
> > > <pbhagavatula@marvell.com>; Shijith Thotton <sthotton@marvell.com>;
> > > Hemant Agrawal <hemant.agrawal@nxp.com>; Sachin Saxena
> > > <sachin.saxena@oss.nxp.com>; Van Haaren, Harry
> > > <harry.van.haaren@intel.com>; mattias.ronnblom
> > > <mattias.ronnblom@ericsson.com>; Liang Ma <liangma@liangbit.com>;
> > > Mccarthy, Peter <peter.mccarthy@intel.com>
> > > Subject: Re: [PATCH v2] eventdev/eth_rx: add new adapter create API
> > >
> > > On Thu, Aug 17, 2023 at 11:33 AM Naga Harish K S V
> > > <s.v.naga.harish.k@intel.com> wrote:
> > > >
> > > > 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 <s.v.naga.harish.k@intel.com>
> > >
> > > > + */
> > > > +__rte_experimental
> > > > +int __rte_cold
> > >
> > > Is there any specific reason to keep __rte_cold here? None of the
> > > other libraries has this.
> >
> > __rte_cold is a hint function in the cold path. It is used for code
> > optimization purposes and many net PMDs are using this.
> 
> I understand that, the question was more on what is the significance of that
> for this specific API ?
> There are a lot of slow path APIs in evendev and all other library none of
> them use it.
> It just put into different section of binary and optimize more for size. I think,
> there is no specific reason to add this ONLY for this API to make it standout.
> 

Removed __rte_cold attribute for this API to be in sync with other eventdev library APIs.
The updated patch is posted in V3.

> Also, The cold attribute is not implemented in GCC versions earlier than 4.3.
> 
> 
> 
> 
> >
> > > Rest looks good to me.
> > >
> > > For library changes, please keep all evendev maintainers in Cc. I
> > > have added those now for this email.
> > >
> > >
> > > > +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);

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v3] eventdev/eth_rx: add new adapter create API
  2023-08-17 10:33   ` [PATCH v3] " Naga Harish K S V
@ 2023-08-17 10:42     ` Jerin Jacob
  2023-08-17 14:52       ` Naga Harish K, S V
  2023-08-17 14:50     ` [PATCH v4] " Naga Harish K S V
  1 sibling, 1 reply; 19+ messages in thread
From: Jerin Jacob @ 2023-08-17 10:42 UTC (permalink / raw)
  To: Naga Harish K S V
  Cc: dev, erik.g.carrillo, abhinandan.gujjar, timothy.mcdaniel,
	pbhagavatula, sthotton, hemant.agrawal, sachin.saxena,
	harry.van.haaren, mattias.ronnblom, liangma, peter.mccarthy,
	jay.jayatheerthan

On Thu, Aug 17, 2023 at 4:03 PM Naga Harish K S V
<s.v.naga.harish.k@intel.com> wrote:
>
> 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 <s.v.naga.harish.k@intel.com>
> ---
> v2:
>  * Fix warning
> v3:
>  * remove __rte_cold hint as per review comments

> +int __rte_cold

Missed to remove here.

> +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);

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH v4] eventdev/eth_rx:  add new adapter create API
  2023-08-17 10:33   ` [PATCH v3] " Naga Harish K S V
  2023-08-17 10:42     ` Jerin Jacob
@ 2023-08-17 14:50     ` Naga Harish K S V
  2023-08-17 15:19       ` Jerin Jacob
  2023-08-18  9:37       ` [PATCH v5] " Naga Harish K S V
  1 sibling, 2 replies; 19+ messages in thread
From: Naga Harish K S V @ 2023-08-17 14:50 UTC (permalink / raw)
  To: jerinjacobk
  Cc: dev, erik.g.carrillo, abhinandan.gujjar, timothy.mcdaniel,
	pbhagavatula, sthotton, hemant.agrawal, sachin.saxena,
	harry.van.haaren, mattias.ronnblom, liangma, peter.mccarthy,
	jay.jayatheerthan

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 <s.v.naga.harish.k@intel.com>
---
v2:
 * Fix warning
v3:
 * remove __rte_cold hint as per review comments
v4:
 * address review comments
---
---
 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..1574c89678 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_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..842581e87e 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_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 {
-- 
2.25.1


^ permalink raw reply	[flat|nested] 19+ messages in thread

* RE: [PATCH v3] eventdev/eth_rx: add new adapter create API
  2023-08-17 10:42     ` Jerin Jacob
@ 2023-08-17 14:52       ` Naga Harish K, S V
  0 siblings, 0 replies; 19+ messages in thread
From: Naga Harish K, S V @ 2023-08-17 14:52 UTC (permalink / raw)
  To: Jerin Jacob
  Cc: dev, Carrillo, Erik G, Gujjar, Abhinandan S, McDaniel, Timothy,
	pbhagavatula, sthotton, hemant.agrawal, sachin.saxena,
	Van Haaren, Harry, mattias.ronnblom, liangma, Mccarthy, Peter,
	Jayatheerthan, Jay



> -----Original Message-----
> From: Jerin Jacob <jerinjacobk@gmail.com>
> Sent: Thursday, August 17, 2023 4:13 PM
> To: Naga Harish K, S V <s.v.naga.harish.k@intel.com>
> Cc: dev@dpdk.org; Carrillo, Erik G <erik.g.carrillo@intel.com>; Gujjar,
> Abhinandan S <abhinandan.gujjar@intel.com>; McDaniel, Timothy
> <timothy.mcdaniel@intel.com>; pbhagavatula@marvell.com;
> sthotton@marvell.com; hemant.agrawal@nxp.com;
> sachin.saxena@oss.nxp.com; Van Haaren, Harry
> <harry.van.haaren@intel.com>; mattias.ronnblom
> <mattias.ronnblom@ericsson.com>; liangma@liangbit.com; Mccarthy, Peter
> <peter.mccarthy@intel.com>; Jayatheerthan, Jay
> <jay.jayatheerthan@intel.com>
> Subject: Re: [PATCH v3] eventdev/eth_rx: add new adapter create API
> 
> On Thu, Aug 17, 2023 at 4:03 PM Naga Harish K S V
> <s.v.naga.harish.k@intel.com> wrote:
> >
> > 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 <s.v.naga.harish.k@intel.com>
> > ---
> > v2:
> >  * Fix warning
> > v3:
> >  * remove __rte_cold hint as per review comments
> 
> > +int __rte_cold
> 
> Missed to remove here.
> 

Addressed in v4 patch

> > +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);

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v4] eventdev/eth_rx: add new adapter create API
  2023-08-17 14:50     ` [PATCH v4] " Naga Harish K S V
@ 2023-08-17 15:19       ` Jerin Jacob
  2023-08-18  9:39         ` Naga Harish K, S V
  2023-08-18  9:37       ` [PATCH v5] " Naga Harish K S V
  1 sibling, 1 reply; 19+ messages in thread
From: Jerin Jacob @ 2023-08-17 15:19 UTC (permalink / raw)
  To: Naga Harish K S V
  Cc: dev, erik.g.carrillo, abhinandan.gujjar, timothy.mcdaniel,
	pbhagavatula, sthotton, hemant.agrawal, sachin.saxena,
	harry.van.haaren, mattias.ronnblom, liangma, peter.mccarthy,
	jay.jayatheerthan

On Thu, Aug 17, 2023 at 8:20 PM Naga Harish K S V
<s.v.naga.harish.k@intel.com> wrote:
>
> 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 <s.v.naga.harish.k@intel.com>
> ---
> v2:
>  * Fix warning
> v3:
>  * remove __rte_cold hint as per review comments
> v4:
>  * address review comments

Please update doc/guides/rel_notes/release_23_11.rst as well.

Good to merge next version.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH v5] eventdev/eth_rx:  add new adapter create API
  2023-08-17 14:50     ` [PATCH v4] " Naga Harish K S V
  2023-08-17 15:19       ` Jerin Jacob
@ 2023-08-18  9:37       ` Naga Harish K S V
  2023-08-21  9:52         ` Jerin Jacob
  2023-08-21 15:28         ` [PATCH v6] " Naga Harish K S V
  1 sibling, 2 replies; 19+ messages in thread
From: Naga Harish K S V @ 2023-08-18  9:37 UTC (permalink / raw)
  To: jerinjacobk
  Cc: dev, erik.g.carrillo, abhinandan.gujjar, timothy.mcdaniel,
	pbhagavatula, sthotton, hemant.agrawal, sachin.saxena,
	harry.van.haaren, mattias.ronnblom, liangma, peter.mccarthy,
	jay.jayatheerthan

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 <s.v.naga.harish.k@intel.com>
---
v2:
 * Fix warning
v3:
 * remove __rte_cold hint as per review comments
v4:
 * address review comments
v5:
 * Update release notes document
---
---
 app/test/test_event_eth_rx_adapter.c          | 87 +++++++++++++++++++
 .../prog_guide/event_ethernet_rx_adapter.rst  |  3 +
 doc/guides/rel_notes/release_23_11.rst        |  4 +
 lib/eventdev/rte_event_eth_rx_adapter.c       | 75 +++++++++++-----
 lib/eventdev/rte_event_eth_rx_adapter.h       | 37 +++++++-
 lib/eventdev/version.map                      |  3 +
 6 files changed, 186 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/doc/guides/rel_notes/release_23_11.rst b/doc/guides/rel_notes/release_23_11.rst
index 4411bb32c1..0f4e677ee9 100644
--- a/doc/guides/rel_notes/release_23_11.rst
+++ b/doc/guides/rel_notes/release_23_11.rst
@@ -72,6 +72,10 @@ New Features
      Also, make sure to start the actual text at the margin.
      =======================================================
 
+* **Added new Ethernet Rx Adapter create API.**
+
+  * Added new API ``rte_event_eth_rx_adapter_create_ext_with_params()``
+    for creating Rx adapter instance.
 
 Removed Items
 -------------
diff --git a/lib/eventdev/rte_event_eth_rx_adapter.c b/lib/eventdev/rte_event_eth_rx_adapter.c
index f7f93ccdfd..1574c89678 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_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..842581e87e 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_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 {
-- 
2.25.1


^ permalink raw reply	[flat|nested] 19+ messages in thread

* RE: [PATCH v4] eventdev/eth_rx: add new adapter create API
  2023-08-17 15:19       ` Jerin Jacob
@ 2023-08-18  9:39         ` Naga Harish K, S V
  0 siblings, 0 replies; 19+ messages in thread
From: Naga Harish K, S V @ 2023-08-18  9:39 UTC (permalink / raw)
  To: Jerin Jacob
  Cc: dev, Carrillo, Erik G, Gujjar, Abhinandan S, McDaniel, Timothy,
	pbhagavatula, sthotton, hemant.agrawal, sachin.saxena,
	Van Haaren, Harry, mattias.ronnblom, liangma, Mccarthy, Peter,
	Jayatheerthan, Jay



> -----Original Message-----
> From: Jerin Jacob <jerinjacobk@gmail.com>
> Sent: Thursday, August 17, 2023 8:50 PM
> To: Naga Harish K, S V <s.v.naga.harish.k@intel.com>
> Cc: dev@dpdk.org; Carrillo, Erik G <erik.g.carrillo@intel.com>; Gujjar,
> Abhinandan S <abhinandan.gujjar@intel.com>; McDaniel, Timothy
> <timothy.mcdaniel@intel.com>; pbhagavatula@marvell.com;
> sthotton@marvell.com; hemant.agrawal@nxp.com;
> sachin.saxena@oss.nxp.com; Van Haaren, Harry
> <harry.van.haaren@intel.com>; mattias.ronnblom
> <mattias.ronnblom@ericsson.com>; liangma@liangbit.com; Mccarthy, Peter
> <peter.mccarthy@intel.com>; Jayatheerthan, Jay
> <jay.jayatheerthan@intel.com>
> Subject: Re: [PATCH v4] eventdev/eth_rx: add new adapter create API
> 
> On Thu, Aug 17, 2023 at 8:20 PM Naga Harish K S V
> <s.v.naga.harish.k@intel.com> wrote:
> >
> > 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 <s.v.naga.harish.k@intel.com>
> > ---
> > v2:
> >  * Fix warning
> > v3:
> >  * remove __rte_cold hint as per review comments
> > v4:
> >  * address review comments
> 
> Please update doc/guides/rel_notes/release_23_11.rst as well.
> 

Updated the 23.11 release notes in V5 patch.

> Good to merge next version.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v5] eventdev/eth_rx: add new adapter create API
  2023-08-18  9:37       ` [PATCH v5] " Naga Harish K S V
@ 2023-08-21  9:52         ` Jerin Jacob
  2023-08-21 15:28         ` [PATCH v6] " Naga Harish K S V
  1 sibling, 0 replies; 19+ messages in thread
From: Jerin Jacob @ 2023-08-21  9:52 UTC (permalink / raw)
  To: Naga Harish K S V
  Cc: dev, erik.g.carrillo, abhinandan.gujjar, timothy.mcdaniel,
	pbhagavatula, sthotton, hemant.agrawal, sachin.saxena,
	harry.van.haaren, mattias.ronnblom, liangma, peter.mccarthy,
	jay.jayatheerthan

On Fri, Aug 18, 2023 at 3:07 PM Naga Harish K S V
<s.v.naga.harish.k@intel.com> wrote:
>
> 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 <s.v.naga.harish.k@intel.com>
> ---
> 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/doc/guides/rel_notes/release_23_11.rst b/doc/guides/rel_notes/release_23_11.rst
> index 4411bb32c1..0f4e677ee9 100644
> --- a/doc/guides/rel_notes/release_23_11.rst
> +++ b/doc/guides/rel_notes/release_23_11.rst
> @@ -72,6 +72,10 @@ New Features
>       Also, make sure to start the actual text at the margin.
>       =======================================================
>
> +* **Added new Ethernet Rx Adapter create API.**
> +
> +  * Added new API ``rte_event_eth_rx_adapter_create_ext_with_params()``
> +    for creating Rx adapter instance

Please add

for application desires to control both the event port allocation and event
buffer size,

>
>  Removed Items
>  -------------
> diff --git a/lib/eventdev/rte_event_eth_rx_adapter.c b/lib/eventdev/rte_event_eth_rx_adapter.c
> index f7f93ccdfd..1574c89678 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

Another instance of __rte_cold which is not removed.

Please pay some attention when sending the new patch versions.

> +rxa_config_params_validate(struct rte_event_eth_rx_adapter_params *rxa_params,
> +                          struct rte_event_eth_rx_adapter_params *temp_params)

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH v6] eventdev/eth_rx:  add new adapter create API
  2023-08-18  9:37       ` [PATCH v5] " Naga Harish K S V
  2023-08-21  9:52         ` Jerin Jacob
@ 2023-08-21 15:28         ` Naga Harish K S V
  2023-08-21 15:36           ` Jerin Jacob
  2023-08-21 15:44           ` [PATCH v7] " Naga Harish K S V
  1 sibling, 2 replies; 19+ messages in thread
From: Naga Harish K S V @ 2023-08-21 15:28 UTC (permalink / raw)
  To: jerinjacobk
  Cc: dev, erik.g.carrillo, abhinandan.gujjar, timothy.mcdaniel,
	pbhagavatula, sthotton, hemant.agrawal, sachin.saxena,
	harry.van.haaren, mattias.ronnblom, liangma, peter.mccarthy,
	jay.jayatheerthan

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 <s.v.naga.harish.k@intel.com>
---
v2:
 * Fix warning
v3:
 * remove __rte_cold hint as per review comments
v4:
 * address review comments
v5:
 * Update release notes document
v6:
 * incorporate review comments
---
---
 app/test/test_event_eth_rx_adapter.c          | 87 +++++++++++++++++++
 .../prog_guide/event_ethernet_rx_adapter.rst  |  3 +
 doc/guides/rel_notes/release_23_11.rst        |  5 ++
 lib/eventdev/rte_event_eth_rx_adapter.c       | 75 +++++++++++-----
 lib/eventdev/rte_event_eth_rx_adapter.h       | 37 +++++++-
 lib/eventdev/version.map                      |  3 +
 6 files changed, 187 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/doc/guides/rel_notes/release_23_11.rst b/doc/guides/rel_notes/release_23_11.rst
index 4411bb32c1..81b629ea2e 100644
--- a/doc/guides/rel_notes/release_23_11.rst
+++ b/doc/guides/rel_notes/release_23_11.rst
@@ -72,6 +72,11 @@ New Features
      Also, make sure to start the actual text at the margin.
      =======================================================
 
+* **Added new Ethernet Rx Adapter create API.**
+
+  * Added new API ``rte_event_eth_rx_adapter_create_ext_with_params()``
+    for creating Rx adapter instance for the applications desire to
+    control both the event port allocation and event buffer size.
 
 Removed Items
 -------------
diff --git a/lib/eventdev/rte_event_eth_rx_adapter.c b/lib/eventdev/rte_event_eth_rx_adapter.c
index f7f93ccdfd..1574c89678 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_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..842581e87e 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_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 {
-- 
2.25.1


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v6] eventdev/eth_rx: add new adapter create API
  2023-08-21 15:28         ` [PATCH v6] " Naga Harish K S V
@ 2023-08-21 15:36           ` Jerin Jacob
  2023-08-22  1:05             ` Naga Harish K, S V
  2023-08-21 15:44           ` [PATCH v7] " Naga Harish K S V
  1 sibling, 1 reply; 19+ messages in thread
From: Jerin Jacob @ 2023-08-21 15:36 UTC (permalink / raw)
  To: Naga Harish K S V
  Cc: dev, erik.g.carrillo, abhinandan.gujjar, timothy.mcdaniel,
	pbhagavatula, sthotton, hemant.agrawal, sachin.saxena,
	harry.van.haaren, mattias.ronnblom, liangma, peter.mccarthy,
	jay.jayatheerthan

On Mon, Aug 21, 2023 at 8:59 PM Naga Harish K S V
<s.v.naga.harish.k@intel.com> wrote:
>
> 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 <s.v.naga.harish.k@intel.com>
> ---
> v2:
>  * Fix warning
> v3:
>  * remove __rte_cold hint as per review comments
> v4:
>  * address review comments
> v5:
>  * Update release notes document
> v6:
>  * incorporate review comments

> +static int __rte_cold

Missed again to remove _rte_cold.
Seriously, Please pay some attention when sending the patch(Same
comment given in last time).


> +rxa_config_params_validate(struct rte_event_eth_rx_adapter_params *rxa_params,
> +                          struct rte_event_eth_rx_adapter_params *temp_params)

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH v7] eventdev/eth_rx:  add new adapter create API
  2023-08-21 15:28         ` [PATCH v6] " Naga Harish K S V
  2023-08-21 15:36           ` Jerin Jacob
@ 2023-08-21 15:44           ` Naga Harish K S V
  2023-08-22  4:55             ` Jerin Jacob
  1 sibling, 1 reply; 19+ messages in thread
From: Naga Harish K S V @ 2023-08-21 15:44 UTC (permalink / raw)
  To: jerinjacobk
  Cc: dev, erik.g.carrillo, abhinandan.gujjar, timothy.mcdaniel,
	pbhagavatula, sthotton, hemant.agrawal, sachin.saxena,
	harry.van.haaren, mattias.ronnblom, liangma, peter.mccarthy,
	jay.jayatheerthan

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 <s.v.naga.harish.k@intel.com>
---
v2:
 * Fix warning
v3:
 * remove __rte_cold hint as per review comments
v4:
 * address review comments
v5:
 * Update release notes document
v6:
 * incorporate review comments
v7:
 * remove __rte_cold that is still remaining
---
---
 app/test/test_event_eth_rx_adapter.c          | 87 +++++++++++++++++++
 .../prog_guide/event_ethernet_rx_adapter.rst  |  3 +
 doc/guides/rel_notes/release_23_11.rst        |  5 ++
 lib/eventdev/rte_event_eth_rx_adapter.c       | 75 +++++++++++-----
 lib/eventdev/rte_event_eth_rx_adapter.h       | 37 +++++++-
 lib/eventdev/version.map                      |  3 +
 6 files changed, 187 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/doc/guides/rel_notes/release_23_11.rst b/doc/guides/rel_notes/release_23_11.rst
index 4411bb32c1..81b629ea2e 100644
--- a/doc/guides/rel_notes/release_23_11.rst
+++ b/doc/guides/rel_notes/release_23_11.rst
@@ -72,6 +72,11 @@ New Features
      Also, make sure to start the actual text at the margin.
      =======================================================
 
+* **Added new Ethernet Rx Adapter create API.**
+
+  * Added new API ``rte_event_eth_rx_adapter_create_ext_with_params()``
+    for creating Rx adapter instance for the applications desire to
+    control both the event port allocation and event buffer size.
 
 Removed Items
 -------------
diff --git a/lib/eventdev/rte_event_eth_rx_adapter.c b/lib/eventdev/rte_event_eth_rx_adapter.c
index f7f93ccdfd..93bed18e93 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
+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_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..842581e87e 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_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 {
-- 
2.25.1


^ permalink raw reply	[flat|nested] 19+ messages in thread

* RE: [PATCH v6] eventdev/eth_rx: add new adapter create API
  2023-08-21 15:36           ` Jerin Jacob
@ 2023-08-22  1:05             ` Naga Harish K, S V
  0 siblings, 0 replies; 19+ messages in thread
From: Naga Harish K, S V @ 2023-08-22  1:05 UTC (permalink / raw)
  To: Jerin Jacob
  Cc: dev, Carrillo, Erik G, Gujjar, Abhinandan S, McDaniel, Timothy,
	pbhagavatula, sthotton, hemant.agrawal, sachin.saxena,
	Van Haaren, Harry, mattias.ronnblom, liangma, Mccarthy, Peter,
	Jayatheerthan, Jay



> -----Original Message-----
> From: Jerin Jacob <jerinjacobk@gmail.com>
> Sent: Monday, August 21, 2023 9:07 PM
> To: Naga Harish K, S V <s.v.naga.harish.k@intel.com>
> Cc: dev@dpdk.org; Carrillo, Erik G <erik.g.carrillo@intel.com>; Gujjar,
> Abhinandan S <abhinandan.gujjar@intel.com>; McDaniel, Timothy
> <timothy.mcdaniel@intel.com>; pbhagavatula@marvell.com;
> sthotton@marvell.com; hemant.agrawal@nxp.com;
> sachin.saxena@oss.nxp.com; Van Haaren, Harry
> <harry.van.haaren@intel.com>; mattias.ronnblom
> <mattias.ronnblom@ericsson.com>; liangma@liangbit.com; Mccarthy, Peter
> <peter.mccarthy@intel.com>; Jayatheerthan, Jay
> <jay.jayatheerthan@intel.com>
> Subject: Re: [PATCH v6] eventdev/eth_rx: add new adapter create API
> 
> On Mon, Aug 21, 2023 at 8:59 PM Naga Harish K S V
> <s.v.naga.harish.k@intel.com> wrote:
> >
> > 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 <s.v.naga.harish.k@intel.com>
> > ---
> > v2:
> >  * Fix warning
> > v3:
> >  * remove __rte_cold hint as per review comments
> > v4:
> >  * address review comments
> > v5:
> >  * Update release notes document
> > v6:
> >  * incorporate review comments
> 
> > +static int __rte_cold
> 
> Missed again to remove _rte_cold.
> Seriously, Please pay some attention when sending the patch(Same comment
> given in last time).
> 
__rte_cold is already removed for API definition and prototype. 
I thought having __rte_cold for this internal function is fine.
It is removed in the latest patch, thanks.

> 
> > +rxa_config_params_validate(struct rte_event_eth_rx_adapter_params
> *rxa_params,
> > +                          struct rte_event_eth_rx_adapter_params
> > +*temp_params)

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v7] eventdev/eth_rx: add new adapter create API
  2023-08-21 15:44           ` [PATCH v7] " Naga Harish K S V
@ 2023-08-22  4:55             ` Jerin Jacob
  0 siblings, 0 replies; 19+ messages in thread
From: Jerin Jacob @ 2023-08-22  4:55 UTC (permalink / raw)
  To: Naga Harish K S V
  Cc: dev, erik.g.carrillo, abhinandan.gujjar, timothy.mcdaniel,
	pbhagavatula, sthotton, hemant.agrawal, sachin.saxena,
	harry.van.haaren, mattias.ronnblom, liangma, peter.mccarthy,
	jay.jayatheerthan

On Mon, Aug 21, 2023 at 9:14 PM Naga Harish K S V
<s.v.naga.harish.k@intel.com> wrote:
>
> 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 <s.v.naga.harish.k@intel.com>


Acked-by: Jerin Jacob <jerinj@marvell.com>
Applied to dpdk-next-net-eventdev/for-main. Thanks


> ---
> v2:
>  * Fix warning
> v3:
>  * remove __rte_cold hint as per review comments
> v4:
>  * address review comments
> v5:
>  * Update release notes document
> v6:
>  * incorporate review comments
> v7:
>  * remove __rte_cold that is still remaining
> ---
> ---
>  app/test/test_event_eth_rx_adapter.c          | 87 +++++++++++++++++++
>  .../prog_guide/event_ethernet_rx_adapter.rst  |  3 +
>  doc/guides/rel_notes/release_23_11.rst        |  5 ++
>  lib/eventdev/rte_event_eth_rx_adapter.c       | 75 +++++++++++-----
>  lib/eventdev/rte_event_eth_rx_adapter.h       | 37 +++++++-
>  lib/eventdev/version.map                      |  3 +
>  6 files changed, 187 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/doc/guides/rel_notes/release_23_11.rst b/doc/guides/rel_notes/release_23_11.rst
> index 4411bb32c1..81b629ea2e 100644
> --- a/doc/guides/rel_notes/release_23_11.rst
> +++ b/doc/guides/rel_notes/release_23_11.rst
> @@ -72,6 +72,11 @@ New Features
>       Also, make sure to start the actual text at the margin.
>       =======================================================
>
> +* **Added new Ethernet Rx Adapter create API.**
> +
> +  * Added new API ``rte_event_eth_rx_adapter_create_ext_with_params()``
> +    for creating Rx adapter instance for the applications desire to
> +    control both the event port allocation and event buffer size.
>
>  Removed Items
>  -------------
> diff --git a/lib/eventdev/rte_event_eth_rx_adapter.c b/lib/eventdev/rte_event_eth_rx_adapter.c
> index f7f93ccdfd..93bed18e93 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
> +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_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..842581e87e 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_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 {
> --
> 2.25.1
>

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2023-08-22  4:56 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-17  5:37 [PATCH] eventdev/eth_rx: add new adapter create API Naga Harish K S V
2023-08-17  6:03 ` [PATCH v2] " Naga Harish K S V
2023-08-17  8:57   ` Jerin Jacob
2023-08-17  9:36     ` Naga Harish K, S V
2023-08-17  9:48       ` Jerin Jacob
2023-08-17 10:36         ` Naga Harish K, S V
2023-08-17 10:33   ` [PATCH v3] " Naga Harish K S V
2023-08-17 10:42     ` Jerin Jacob
2023-08-17 14:52       ` Naga Harish K, S V
2023-08-17 14:50     ` [PATCH v4] " Naga Harish K S V
2023-08-17 15:19       ` Jerin Jacob
2023-08-18  9:39         ` Naga Harish K, S V
2023-08-18  9:37       ` [PATCH v5] " Naga Harish K S V
2023-08-21  9:52         ` Jerin Jacob
2023-08-21 15:28         ` [PATCH v6] " Naga Harish K S V
2023-08-21 15:36           ` Jerin Jacob
2023-08-22  1:05             ` Naga Harish K, S V
2023-08-21 15:44           ` [PATCH v7] " Naga Harish K S V
2023-08-22  4:55             ` Jerin Jacob

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).