From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 726C8430CA; Tue, 22 Aug 2023 06:56:03 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0E9364021D; Tue, 22 Aug 2023 06:56:03 +0200 (CEST) Received: from mail-ua1-f52.google.com (mail-ua1-f52.google.com [209.85.222.52]) by mails.dpdk.org (Postfix) with ESMTP id 68D1540041 for ; Tue, 22 Aug 2023 06:56:00 +0200 (CEST) Received: by mail-ua1-f52.google.com with SMTP id a1e0cc1a2514c-7a25071d633so892558241.0 for ; Mon, 21 Aug 2023 21:56:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1692680159; x=1693284959; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=D2hXjngJQyMKxyWr8mBSvZjJ4jsbhfizqEkv+jFH56A=; b=kueIKVw8aH5Yz7CQ7NvP0SJiH9dFtEpzjfQCOJaG1L0/iq6EZrqiqAJhxN4Y0SJyIE us7k2YuSu3E0HfwPw80K370xssA2PqF+qFRdD1j4pKFf/gTAFeCAQV/f+2EfVUvlGWGr OxjCfWDiT8A/PevPx6bBYTVxyr7EZJVmz5Y/61p7JFiy2SKm+AGgHTytWH6Ih8bGOCkl TtkKUv2oyglXRipT924cBvOrGijP2yDSz6MTjcj/TpiAj9SAsZ9bYzTQkc8AEQnm8/VC 3Z9SjvEb5EWoNh7OmP5lGTbhxf0bDaC0pYQ7Ja/3hSxTBPeF8pImUySKGD08/zK4lZjq QjJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692680159; x=1693284959; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=D2hXjngJQyMKxyWr8mBSvZjJ4jsbhfizqEkv+jFH56A=; b=VKnHheSAtVvv3A3V9l2b8g+Sz06HzkWY2ZLnq4FGPdKNKZCv0DYjW/kb1LH4GhWygV sDYTXwYL26wFLb1UdeB+WjZssHI9RCrNxjvcqgcT8L1rxGyxH3f3ZICIyHZqDFAErBah KzihGmPCQJs6IZVzOYCrH3COJuNy/Rrq6FJFCzSveSf9C63bxB7olgUJLAResK9OSrQ1 yK6ymQS59i4LDCqo2J6epPplYV4Jt4GteNzTW+d2MELiZsengmcc9u2WSsIpLfl63t6l CUfNvNstqcs8Xc+IFatFjcIztVSL0eW/fRZhrg1qmMXa/u3Ocwp/Wkh5f4SRKbZyRxVZ uqjA== X-Gm-Message-State: AOJu0YyKzWaG4w2TnBLuYUmTpnCvMV0jC5/ZgKSV+fclLYNVWAPqcUSd OjojocCts0YohrijOt2l+AxJswBOTa0X6LEpE9s= X-Google-Smtp-Source: AGHT+IEWBaqD1BCVsqfGX+D0bwSQulUebIrlcxUMS+q5Njyl77SkD4FKkYhnhmm5+o2DiGYOhZrdnul7uJh9N8vDixM= X-Received: by 2002:a67:ec57:0:b0:443:6deb:2b4 with SMTP id z23-20020a67ec57000000b004436deb02b4mr7427319vso.2.1692680159547; Mon, 21 Aug 2023 21:55:59 -0700 (PDT) MIME-Version: 1.0 References: <20230821152857.808884-1-s.v.naga.harish.k@intel.com> <20230821154445.810015-1-s.v.naga.harish.k@intel.com> In-Reply-To: <20230821154445.810015-1-s.v.naga.harish.k@intel.com> From: Jerin Jacob Date: Tue, 22 Aug 2023 10:25:33 +0530 Message-ID: Subject: Re: [PATCH v7] eventdev/eth_rx: add new adapter create API To: Naga Harish K S V Cc: dev@dpdk.org, erik.g.carrillo@intel.com, abhinandan.gujjar@intel.com, timothy.mcdaniel@intel.com, pbhagavatula@marvell.com, sthotton@marvell.com, hemant.agrawal@nxp.com, sachin.saxena@oss.nxp.com, harry.van.haaren@intel.com, mattias.ronnblom@ericsson.com, liangma@liangbit.com, peter.mccarthy@intel.com, jay.jayatheerthan@intel.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org On Mon, Aug 21, 2023 at 9:14=E2=80=AFPM Naga Harish K S V 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 Acked-by: Jerin Jacob 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_e= th_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 =3D {0}; > + uint32_t started; > + static int port_allocated; > + static uint8_t port_id; > + int ret; > + > + if (port_allocated) { > + conf->event_port_id =3D port_id; > + conf->max_nb_rx =3D 128; > + return 0; > + } > + > + RTE_SET_USED(id); > + > + ret =3D rte_event_dev_attr_get(event_dev_id, RTE_EVENT_DEV_ATTR_S= TARTED, > + &started); > + if (ret < 0) > + return ret; > + > + if (started) > + rte_event_dev_stop(event_dev_id); > + > + port_id =3D 1; > + > + if (conf_arg !=3D NULL) > + port_conf =3D conf_arg; > + else { > + port_conf =3D &def_port_conf; > + ret =3D rte_event_port_default_conf_get(event_dev_id, por= t_id, > + port_conf); > + if (ret < 0) > + return ret; > + } > + > + ret =3D rte_event_port_setup(event_dev_id, port_id, port_conf); > + if (ret < 0) > + return ret; > + > + conf->event_port_id =3D port_id; > + conf->max_nb_rx =3D 128; > + > + if (started) > + rte_event_dev_start(event_dev_id); > + > + /* Reuse this port number next time this is called */ > + port_allocated =3D 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 =3D rte_event_dev_info_get(TEST_DEV_ID, &dev_info); > + TEST_ASSERT(err =3D=3D 0, "Expected 0 got %d", err); > + > + rxa_params.use_queue_event_buf =3D false; > + rxa_params.event_buf_size =3D 0; > + > + err =3D 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 =3D=3D -EINVAL, "Expected -EINVAL got %d", err); > + > + rxa_params.event_buf_size =3D 128; > + > + err =3D 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 =3D=3D 0, "Expected 0 got %d", err); > + > + err =3D 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 =3D=3D -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 = =3D { > 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/gu= ides/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 por= t > 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 b= e used. > + > Event device configuration for service based adapter > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > diff --git a/doc/guides/rel_notes/release_23_11.rst b/doc/guides/rel_note= s/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. > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D > > +* **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_e= vent_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_p= arams, > + struct rte_event_eth_rx_adapter_params *temp_p= arams) > +{ > + if (rxa_params =3D=3D NULL) { > + /* use default values if rxa_params is NULL */ > + temp_params->event_buf_size =3D ETH_EVENT_BUFFER_SIZE; > + temp_params->use_queue_event_buf =3D false; > + } else if (!rxa_params->use_queue_event_buf && > + rxa_params->event_buf_size =3D=3D 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 !=3D 0) { > + RTE_EDEV_LOG_ERR("event buffer size needs to be configure= d " > + "as part of queue add\n"); > + return -EINVAL; > + } > + > + *temp_params =3D *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 =3D > + RTE_ALIGN(temp_params->event_buf_size, BATCH_SIZE= ); > + temp_params->event_buf_size +=3D (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 =3D=3D NULL) > return -EINVAL; > > - if (rxa_params =3D=3D NULL) { > - /* use default values if rxa_params is NULL */ > - rxa_params =3D &temp_params; > - rxa_params->event_buf_size =3D ETH_EVENT_BUFFER_SIZE; > - rxa_params->use_queue_event_buf =3D false; > - } else if ((!rxa_params->use_queue_event_buf && > - rxa_params->event_buf_size =3D=3D 0) || > - (rxa_params->use_queue_event_buf && > - rxa_params->event_buf_size !=3D 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 fetchi= ng > - * packets from NIC rx queues to get full buffer utilizat= ion > - * and prevent unnecessary rollovers. > - */ > - > - rxa_params->event_buf_size =3D > - RTE_ALIGN(rxa_params->event_buf_size, BATCH_SIZE)= ; > - rxa_params->event_buf_size +=3D (BATCH_SIZE + BATCH_SIZE)= ; > - } > + ret =3D rxa_config_params_validate(rxa_params, &temp_params); > + if (ret !=3D 0) > + return ret; > > pc =3D rte_malloc(NULL, sizeof(*pc), 0); > if (pc =3D=3D NULL) > @@ -2539,7 +2554,7 @@ rte_event_eth_rx_adapter_create_with_params(uint8_t= id, uint8_t dev_id, > > *pc =3D *port_config; > > - ret =3D rxa_create(id, dev_id, rxa_params, rxa_default_conf_cb, p= c); > + ret =3D 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_param= s) > +{ > + struct rte_event_eth_rx_adapter_params temp_params =3D {0}; > + int ret; > + > + ret =3D rxa_config_params_validate(rxa_params, &temp_params); > + if (ret !=3D 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_e= vent_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_cre= ate() > - * 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(uint= 8_t id, uint8_t dev_id, > struct rte_event_port_conf *port_config, > struct rte_event_eth_rx_adapter_params *rxa_param= s); > > +/** > + * This is a variant of rte_event_eth_rx_adapter_create_ext() with addit= ional > + * 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_param= s); > + > /** > * 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 >