From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 027A5C433F5 for ; Wed, 29 Sep 2021 07:36:38 +0000 (UTC) Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by mail.kernel.org (Postfix) with ESMTP id 6FAE160230 for ; Wed, 29 Sep 2021 07:36:37 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 6FAE160230 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=dpdk.org Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 62F7A40E3C; Wed, 29 Sep 2021 09:36:36 +0200 (CEST) Received: from mail-io1-f47.google.com (mail-io1-f47.google.com [209.85.166.47]) by mails.dpdk.org (Postfix) with ESMTP id 8C4784068F for ; Wed, 29 Sep 2021 09:36:34 +0200 (CEST) Received: by mail-io1-f47.google.com with SMTP id h129so1962573iof.1 for ; Wed, 29 Sep 2021 00:36:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=zYdFe07WjPWKEEwhFJ8EfK/23hh9CIrPt5aOqbsY6/w=; b=YUb09PnqKq8RrHGXeC0lMTuTKS7PqAaXBNUY9ut63UZhJNAOLn9ULpasvN7BgvUEtn hMUII2JWHiZCGWgw9TRUQYoi+C3X+fkhPYJpyGC5LgGN3cQpAn/BR4VltMdPJZaA9HBb ST5qprpB+Ni92MbA8x4r+jwMi+AfgBR0C2BnxwsvWVtwaU+bqnIbC2MsbY3HVSVTwXoh FzuYDxYDF+yP+b4wBDZ+ZQRfbA9UsmCCtk+VILi+RwpUBPUD9r49gKnXHLELnYkzHLx4 lRKPFHN1GGxNUBOqJzc6KPMZXDOQWMw8y0a4NAsG6HNqr/jorIdguMFRbrMML1FRPgeY X30g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=zYdFe07WjPWKEEwhFJ8EfK/23hh9CIrPt5aOqbsY6/w=; b=I/JSjfecsfhlYd439etg3qqJmgxQPfa6CVxeNJJzPRJDkEoatBMl2pLCcbThewxmPS T7UuVsXSYk5N5jJe+ydnjg5/Qppe4fMu0yx/k6sfiWvdMeeoMUo3xqt01oarr677PEOB z8r7bvYQtiMZbTGSj62BjeIgESpEchTOnldkbw92FOws8q4fN8TROTEMt/qsD2ZIhCpW Z8bafgNOLc1hb/b9E8y9xNCgeNWdGz5shmjCwMBT5H8607t3fJBBdS0vzrApSzNwcbtf RWuUd0ozPb2DAtzAnBoIB4Vm08Urz8LdMYVzkDudEAqniI6xWKoBvi2rBJRcUXBir/zL qiRA== X-Gm-Message-State: AOAM53279RXtaCLrg+g9Co6bd5sspKgo7XwytxXuas2Y6zPuR6hb2EXt JX2BFW60kZpYbpK6BNz19lZlej+9NC8XqFSjqDm6B9UbApY= X-Google-Smtp-Source: ABdhPJzs9BGmhc6UVI+J/DOzAiMOFRx5Vavk4yWTYJ/KJM3uHwixDHWTEhX25+wPmwWjfWwobyEF1UWvUmY1LDbZB+c= X-Received: by 2002:a05:6638:1a4:: with SMTP id b4mr8232519jaq.2.1632900993691; Wed, 29 Sep 2021 00:36:33 -0700 (PDT) MIME-Version: 1.0 References: <20210912155858.1397453-1-ganapati.kundapura@intel.com> <20210916125107.2024111-1-ganapati.kundapura@intel.com> In-Reply-To: From: Jerin Jacob Date: Wed, 29 Sep 2021 13:06:07 +0530 Message-ID: To: "Jayatheerthan, Jay" Cc: "Kundapura, Ganapati" , "dev@dpdk.org" , "Yigit, Ferruh" Content-Type: text/plain; charset="UTF-8" Subject: Re: [dpdk-dev] [PATCH v5 1/2] eventdev: add rx queue conf get api 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 Sender: "dev" On Tue, Sep 28, 2021 at 3:04 PM Jayatheerthan, Jay wrote: > > > -----Original Message----- > > From: Kundapura, Ganapati > > Sent: Thursday, September 16, 2021 6:21 PM > > To: Jayatheerthan, Jay ; jerinjacobk@gmail.com > > Cc: dev@dpdk.org; Yigit, Ferruh > > Subject: [PATCH v5 1/2] eventdev: add rx queue conf get api > > > > Added rte_event_eth_rx_adapter_queue_conf_get() API to get rx queue > > information - event queue identifier, flags for handling received packets, > > scheduler type, event priority, polling frequency of the receive queue > > and flow identifier in rte_event_eth_rx_adapter_queue_conf structure > > > > Signed-off-by: Ganapati Kundapura > > > > --- > > v5: > > * Filled queue_conf after memzone lookup > > * PMD callback if not NULL, invoked to override queue_conf struct > > * Added memzone lookup for stats_get(), stats_reset(), service_id_get() > > api's called by secondary applications. > > > > v4: > > * squashed 1/3 and 3/3 > > * reused rte_event_eth_rx_adapter_queue_conf structure in place of > > rte_event_eth_rx_adapter_queue_info > > * renamed to rte_event_eth_rx_adapter_queue_info_get() to > > rte_event_eth_rx_adapter_queue_conf_get to align with > > rte_event_eth_rx_adapter_queue_conf structure > > > > v3: > > * Split single patch into implementaion, test and document updation > > patches separately > > > > v2: > > * Fixed build issue due to missing entry in version.map > > > > v1: > > * Initial patch with implementaion, test and doc together > > --- > > --- > > .../prog_guide/event_ethernet_rx_adapter.rst | 8 ++ > > lib/eventdev/eventdev_pmd.h | 28 +++++++ > > lib/eventdev/rte_event_eth_rx_adapter.c | 91 +++++++++++++++++++++- > > lib/eventdev/rte_event_eth_rx_adapter.h | 27 +++++++ > > lib/eventdev/version.map | 1 + > > 5 files changed, 154 insertions(+), 1 deletion(-) > > > > diff --git a/doc/guides/prog_guide/event_ethernet_rx_adapter.rst b/doc/guides/prog_guide/event_ethernet_rx_adapter.rst > > index 0780b6f..ce23d8a 100644 > > --- a/doc/guides/prog_guide/event_ethernet_rx_adapter.rst > > +++ b/doc/guides/prog_guide/event_ethernet_rx_adapter.rst > > @@ -146,6 +146,14 @@ if the callback is supported, and the counts maintained by the service function, > > if one exists. The service function also maintains a count of cycles for which > > it was not able to enqueue to the event device. > > > > +Getting Adapter queue config > > +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > + > > +The ``rte_event_eth_rx_adapter_queue_conf_get()`` function reports > > +flags for handling received packets, event queue identifier, scheduler type, > > +event priority, polling frequency of the receive queue and flow identifier > > +in struct ``rte_event_eth_rx_adapter_queue_conf``. > > + > > Interrupt Based Rx Queues > > ~~~~~~~~~~~~~~~~~~~~~~~~~~ > > > > diff --git a/lib/eventdev/eventdev_pmd.h b/lib/eventdev/eventdev_pmd.h > > index 63b3bc4..e69644b 100644 > > --- a/lib/eventdev/eventdev_pmd.h > > +++ b/lib/eventdev/eventdev_pmd.h > > @@ -562,6 +562,32 @@ typedef int (*eventdev_eth_rx_adapter_queue_del_t) > > int32_t rx_queue_id); > > > > /** > > + * Retrieve Rx adapter queue config information for the specified > > + * rx queue ID. > > + * > > + * @param dev > > + * Event device pointer > > + * > > + * @param eth_dev > > + * Ethernet device pointer > > + * > > + * @param rx_queue_id > > + * Ethernet device receive queue index. > > + * > > + * @param[out] queue_conf > > + * Pointer to rte_event_eth_rx_adapter_queue_conf structure > > + * > > + * @return > > + * - 0: Success > > + * - <0: Error code on failure. > > + */ > > +typedef int (*eventdev_eth_rx_adapter_queue_conf_get_t) > > + (const struct rte_eventdev *dev, > > + const struct rte_eth_dev *eth_dev, > > + uint16_t rx_queue_id, > > + struct rte_event_eth_rx_adapter_queue_conf *queue_conf); > > + > > +/** > > * Start ethernet Rx adapter. This callback is invoked if > > * the caps returned from eventdev_eth_rx_adapter_caps_get(.., eth_port_id) > > * has RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT set and Rx queues > > @@ -1081,6 +1107,8 @@ struct rte_eventdev_ops { > > /**< Add Rx queues to ethernet Rx adapter */ > > eventdev_eth_rx_adapter_queue_del_t eth_rx_adapter_queue_del; > > /**< Delete Rx queues from ethernet Rx adapter */ > > + eventdev_eth_rx_adapter_queue_conf_get_t eth_rx_adapter_queue_conf_get; > > + /**< Get Rx adapter queue info */ > > eventdev_eth_rx_adapter_start_t eth_rx_adapter_start; > > /**< Start ethernet Rx adapter */ > > eventdev_eth_rx_adapter_stop_t eth_rx_adapter_stop; > > diff --git a/lib/eventdev/rte_event_eth_rx_adapter.c b/lib/eventdev/rte_event_eth_rx_adapter.c > > index f2dc695..6cc4210 100644 > > --- a/lib/eventdev/rte_event_eth_rx_adapter.c > > +++ b/lib/eventdev/rte_event_eth_rx_adapter.c > > @@ -40,6 +40,8 @@ > > /* Sentinel value to detect initialized file handle */ > > #define INIT_FD -1 > > > > +#define RXA_ADAPTER_ARRAY "rte_event_eth_rx_adapter_array" > > + > > /* > > * Used to store port and queue ID of interrupting Rx queue > > */ > > @@ -1347,7 +1349,7 @@ rxa_service_func(void *args) > > static int > > rte_event_eth_rx_adapter_init(void) > > { > > - const char *name = "rte_event_eth_rx_adapter_array"; > > + const char *name = RXA_ADAPTER_ARRAY; > > const struct rte_memzone *mz; > > unsigned int sz; > > > > @@ -1370,6 +1372,21 @@ rte_event_eth_rx_adapter_init(void) > > return 0; > > } > > > > +static int > > +rxa_memzone_lookup(void) > > +{ > > + const struct rte_memzone *mz; > > + > > + if (event_eth_rx_adapter == NULL) { > > + mz = rte_memzone_lookup(RXA_ADAPTER_ARRAY); > > + if (mz == NULL) > > + return -ENOMEM; > > + event_eth_rx_adapter = mz->addr; > > + } > > + > > + return 0; > > +} > > + > > static inline struct rte_event_eth_rx_adapter * > > rxa_id_to_adapter(uint8_t id) > > { > > @@ -2631,6 +2648,9 @@ rte_event_eth_rx_adapter_stats_get(uint8_t id, > > uint32_t i; > > int ret; > > > > + if (rxa_memzone_lookup()) > > + return -ENOMEM; > > + > > RTE_EVENT_ETH_RX_ADAPTER_ID_VALID_OR_ERR_RET(id, -EINVAL); > > > > rx_adapter = rxa_id_to_adapter(id); > > @@ -2669,6 +2689,9 @@ rte_event_eth_rx_adapter_stats_reset(uint8_t id) > > struct eth_device_info *dev_info; > > uint32_t i; > > > > + if (rxa_memzone_lookup()) > > + return -ENOMEM; > > + > > RTE_EVENT_ETH_RX_ADAPTER_ID_VALID_OR_ERR_RET(id, -EINVAL); > > > > rx_adapter = rxa_id_to_adapter(id); > > @@ -2694,6 +2717,9 @@ rte_event_eth_rx_adapter_service_id_get(uint8_t id, uint32_t *service_id) > > { > > struct rte_event_eth_rx_adapter *rx_adapter; > > > > + if (rxa_memzone_lookup()) > > + return -ENOMEM; > > + > > RTE_EVENT_ETH_RX_ADAPTER_ID_VALID_OR_ERR_RET(id, -EINVAL); > > > > rx_adapter = rxa_id_to_adapter(id); > > @@ -2750,3 +2776,66 @@ rte_event_eth_rx_adapter_cb_register(uint8_t id, > > > > return 0; > > } > > + > > +int > > +rte_event_eth_rx_adapter_queue_conf_get(uint8_t id, > > + uint16_t eth_dev_id, > > + uint16_t rx_queue_id, > > + struct rte_event_eth_rx_adapter_queue_conf *queue_conf) > > +{ > > + struct rte_eventdev *dev; > > + struct rte_event_eth_rx_adapter *rx_adapter; > > + struct eth_device_info *dev_info; > > + struct eth_rx_queue_info *queue_info; > > + struct rte_event *qi_ev; > > + int ret; > > + > > + if (rxa_memzone_lookup()) > > + return -ENOMEM; > > + > > + RTE_EVENT_ETH_RX_ADAPTER_ID_VALID_OR_ERR_RET(id, -EINVAL); > > + RTE_ETH_VALID_PORTID_OR_ERR_RET(eth_dev_id, -EINVAL); > > + > > + if (rx_queue_id >= rte_eth_devices[eth_dev_id].data->nb_rx_queues) { > > + RTE_EDEV_LOG_ERR("Invalid rx queue_id %u", rx_queue_id); > > + return -EINVAL; > > + } > > + > > + if (queue_conf == NULL) { > > + RTE_EDEV_LOG_ERR("Rx queue conf struct cannot be NULL"); > > + return -EINVAL; > > + } > > + > > + rx_adapter = rxa_id_to_adapter(id); > > + if (rx_adapter == NULL) > > + return -EINVAL; > > + > > + dev_info = &rx_adapter->eth_devices[eth_dev_id]; > > + queue_info = &dev_info->rx_queue[rx_queue_id]; > > + if (!queue_info->queue_enabled) { > > + RTE_EDEV_LOG_ERR("Rx queue %u not added", rx_queue_id); > > + return -EINVAL; > > + } > > + > > + qi_ev = (struct rte_event *)&queue_info->event; > > + > > + memset(queue_conf, 0, sizeof(*queue_conf)); > > + queue_conf->rx_queue_flags = 0; > > + if (queue_info->flow_id_mask != 0) > > + queue_conf->rx_queue_flags |= > > + RTE_EVENT_ETH_RX_ADAPTER_QUEUE_FLOW_ID_VALID; > > + queue_conf->servicing_weight = queue_info->wt; > > + > > + memcpy(&queue_conf->ev, qi_ev, sizeof(*qi_ev)); > > + > > + dev = &rte_eventdevs[rx_adapter->eventdev_id]; > > + if (dev->dev_ops->eth_rx_adapter_queue_conf_get != NULL) { > > + ret = (*dev->dev_ops->eth_rx_adapter_queue_conf_get)(dev, > > + &rte_eth_devices[eth_dev_id], > > + rx_queue_id, > > + queue_conf); > > + return ret; > > + } > > + > > + return 0; > > +} > > diff --git a/lib/eventdev/rte_event_eth_rx_adapter.h b/lib/eventdev/rte_event_eth_rx_adapter.h > > index 3f8b362..470543e 100644 > > --- a/lib/eventdev/rte_event_eth_rx_adapter.h > > +++ b/lib/eventdev/rte_event_eth_rx_adapter.h > > @@ -33,6 +33,7 @@ > > * - rte_event_eth_rx_adapter_stop() > > * - rte_event_eth_rx_adapter_stats_get() > > * - rte_event_eth_rx_adapter_stats_reset() > > + * - rte_event_eth_rx_adapter_queue_conf_get() > > * > > * The application creates an ethernet to event adapter using > > * rte_event_eth_rx_adapter_create_ext() or rte_event_eth_rx_adapter_create() > > @@ -545,6 +546,32 @@ int rte_event_eth_rx_adapter_vector_limits_get( > > uint8_t dev_id, uint16_t eth_port_id, > > struct rte_event_eth_rx_adapter_vector_limits *limits); > > > > +/** > > + * Retrieve Rx queue config information. > > + * > > + * @param id > > + * Adapter identifier. > > + > > + * @param eth_dev_id > > + * Port identifier of Ethernet device. > > + > > + * @param rx_queue_id > > + * Ethernet device receive queue index. > > + > > + * @param[out] queue_conf > > + * Pointer to struct rte_event_eth_rx_adapter_queue_conf > > + > > + * @return > > + * - 0: Success, Receive queue added correctly. > > + * - <0: Error code on failure. > > + */ > > +__rte_experimental > > +int rte_event_eth_rx_adapter_queue_conf_get(uint8_t id, > > + uint16_t eth_dev_id, > > + uint16_t rx_queue_id, > > + struct rte_event_eth_rx_adapter_queue_conf *queue_conf); > > + > > + > > #ifdef __cplusplus > > } > > #endif > > diff --git a/lib/eventdev/version.map b/lib/eventdev/version.map > > index cd86d2d..9f28016 100644 > > --- a/lib/eventdev/version.map > > +++ b/lib/eventdev/version.map > > @@ -143,6 +143,7 @@ EXPERIMENTAL { > > rte_event_vector_pool_create; > > rte_event_eth_rx_adapter_vector_limits_get; > > __rte_eventdev_trace_crypto_adapter_enqueue; > > + rte_event_eth_rx_adapter_queue_conf_get; > > }; > > > > INTERNAL { > > -- > > 2.6.4 > > Acked-by: Jay Jayatheerthan Acked-by: Jerin Jacob Fixed check-gitlog issues as below. Applied to dpdk-next-net-eventdev/for-main. Thanks commit c3d905eadaa8d1e04e22e494d31c3708cf9c53fc (HEAD -> for-main, origin/for-main, origin/HEAD) Author: Ganapati Kundapura Date: Thu Sep 16 07:51:07 2021 -0500 test/event: add Rx adapter queue config get test cases Add unit tests for rte_event_eth_rx_adapter_queue_conf_get() in rx adapter autotest Signed-off-by: Ganapati Kundapura Acked-by: Jay Jayatheerthan commit b36879759b7f3ce27c137db863806de513fe4d44 Author: Ganapati Kundapura Date: Thu Sep 16 07:51:06 2021 -0500 eventdev/rx_adapter: support Rx queue config get Added rte_event_eth_rx_adapter_queue_conf_get() API to get rx queue information - event queue identifier, flags for handling received packets, scheduler type, event priority, polling frequency of the receive queue and flow identifier in rte_event_eth_rx_adapter_queue_conf structure Signed-off-by: Ganapati Kundapura Acked-by: Jay Jayatheerthan Acked-by: Jerin Jacob >