[v2] eventdev/eth_rx: add new adapter create API

Message ID 20230817060318.4101024-1-s.v.naga.harish.k@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Jerin Jacob
Headers
Series [v2] eventdev/eth_rx: add new adapter create API |

Checks

Context Check Description
ci/loongarch-compilation success Compilation OK
ci/checkpatch success coding style OK
ci/loongarch-unit-testing success Unit Testing PASS
ci/github-robot: build success github build: passed
ci/iol-compile-amd64-testing success Testing PASS
ci/iol-sample-apps-testing success Testing PASS
ci/iol-unit-amd64-testing success Testing PASS
ci/iol-compile-arm64-testing success Testing PASS
ci/iol-unit-arm64-testing success Testing PASS
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-broadcom-Functional success Functional Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/intel-Functional success Functional PASS

Commit Message

Naga Harish K, S V Aug. 17, 2023, 6:03 a.m. UTC
  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(-)
  

Comments

Jerin Jacob Aug. 17, 2023, 8:57 a.m. UTC | #1
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);
  
Naga Harish K, S V Aug. 17, 2023, 9:36 a.m. UTC | #2
> -----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);
  
Jerin Jacob Aug. 17, 2023, 9:48 a.m. UTC | #3
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);
  
Naga Harish K, S V Aug. 17, 2023, 10:36 a.m. UTC | #4
> -----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);
  

Patch

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 {