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 451D2A0562; Wed, 14 Apr 2021 12:40:27 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 22DAF161987; Wed, 14 Apr 2021 12:40:27 +0200 (CEST) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by mails.dpdk.org (Postfix) with ESMTP id 58D63161985 for ; Wed, 14 Apr 2021 12:40:24 +0200 (CEST) IronPort-SDR: WjT9n9AXWUc8nH5JiBsuLhGmH4zlwgw7ab0NwOor0kMH3Pn37D1lU1kFeQf4jubVZe5qu6sCNo NKFdgBLwN+9g== X-IronPort-AV: E=McAfee;i="6200,9189,9953"; a="279924189" X-IronPort-AV: E=Sophos;i="5.82,221,1613462400"; d="scan'208";a="279924189" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Apr 2021 03:40:23 -0700 IronPort-SDR: ECTiiIwalVk2IGaYFuL/OpS5WRlTsxtxb8RPl/WLfr67hf8YE5fyrNO1vpUAJ+zIfwF7ja34YI JiZk75GJecpw== X-IronPort-AV: E=Sophos;i="5.82,221,1613462400"; d="scan'208";a="461165333" Received: from fyigit-mobl1.ger.corp.intel.com (HELO [10.213.205.34]) ([10.213.205.34]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Apr 2021 03:40:20 -0700 To: "Ananyev, Konstantin" , Lijun Ou , "thomas@monjalon.net" , Ori Kam , Andrew Rybchenko Cc: "dev@dpdk.org" , "linuxarm@openeuler.org" References: <1616070332-63414-1-git-send-email-oulijun@huawei.com> <1616670560-62333-1-git-send-email-oulijun@huawei.com> From: Ferruh Yigit X-User: ferruhy Message-ID: Date: Wed, 14 Apr 2021 11:40:16 +0100 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Subject: Re: [dpdk-dev] [PATCH V2] ethdev: add queue state when retrieve queue information 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" Hi Lijun, Let's try to complete this for the release. On 4/6/2021 3:02 PM, Ananyev, Konstantin wrote: > Hi, > >> Currently, upper-layer application could get queue state only >> through pointers such as dev->data->tx_queue_state[queue_id], >> this is not the recommended way to access it. So this patch >> add get queue state when call rte_eth_rx_queue_info_get and >> rte_eth_tx_queue_info_get API. >> >> Note: The hairpin queue is not supported with above >> rte_eth_*x_queue_info_get, so the queue state could be >> RTE_ETH_QUEUE_STATE_STARTED or RTE_ETH_QUEUE_STATE_STOPPED. > > I wonder why RTE_ETH_QUEUE_STATE_HAIRPIN Is not supported? > Obviously what we do - copy internal queue state to the user provided buffer. > +1, with current implementation we can't say it is only for start & stop. Since 'STATE_HAIRPIN' is all internal, it may be possible to separate it into its own variable and expose only start and stop, but I don't think it worth the effort, why not just expose all possible states. >> Note: After add queue_state field, the 'struct rte_eth_rxq_info' size >> remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so >> it could be ABI compatible. >> >> Signed-off-by: Chengwen Feng >> Signed-off-by: Lijun Ou >> --- >> V1->V2: >> - move queue state defines to public file >> --- >> doc/guides/rel_notes/release_21_05.rst | 6 ++++++ >> lib/librte_ethdev/ethdev_driver.h | 7 ------- >> lib/librte_ethdev/rte_ethdev.c | 3 +++ >> lib/librte_ethdev/rte_ethdev.h | 11 +++++++++++ >> 4 files changed, 20 insertions(+), 7 deletions(-) >> >> diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst >> index 22aa80a..503daf9 100644 >> --- a/doc/guides/rel_notes/release_21_05.rst >> +++ b/doc/guides/rel_notes/release_21_05.rst >> @@ -164,6 +164,12 @@ ABI Changes >> >> * No ABI change that would break compatibility with 20.11. >> >> +* Added new field ``queue_state`` to ``rte_eth_rxq_info`` structure >> + to provide indicated rxq queue state. >> + >> +* Added new field ``queue_state`` to ``rte_eth_txq_info`` structure >> + to provide indicated txq queue state. >> + >> >> Known Issues >> ------------ >> diff --git a/lib/librte_ethdev/ethdev_driver.h b/lib/librte_ethdev/ethdev_driver.h >> index cdd4b43..ec5a17d 100644 >> --- a/lib/librte_ethdev/ethdev_driver.h >> +++ b/lib/librte_ethdev/ethdev_driver.h >> @@ -970,13 +970,6 @@ struct eth_dev_ops { >> }; >> >> /** >> - * RX/TX queue states >> - */ >> -#define RTE_ETH_QUEUE_STATE_STOPPED 0 >> -#define RTE_ETH_QUEUE_STATE_STARTED 1 >> -#define RTE_ETH_QUEUE_STATE_HAIRPIN 2 >> - >> -/** >> * @internal >> * Check if the selected Rx queue is hairpin queue. >> * >> diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c >> index 3059aa5..fbd10b2 100644 >> --- a/lib/librte_ethdev/rte_ethdev.c >> +++ b/lib/librte_ethdev/rte_ethdev.c >> @@ -5042,6 +5042,8 @@ rte_eth_rx_queue_info_get(uint16_t port_id, uint16_t queue_id, >> >> memset(qinfo, 0, sizeof(*qinfo)); >> dev->dev_ops->rxq_info_get(dev, queue_id, qinfo); >> +qinfo->queue_state = dev->data->rx_queue_state[queue_id]; >> + >> return 0; >> } >> >> @@ -5082,6 +5084,7 @@ rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id, >> >> memset(qinfo, 0, sizeof(*qinfo)); >> dev->dev_ops->txq_info_get(dev, queue_id, qinfo); >> +qinfo->queue_state = dev->data->tx_queue_state[queue_id]; >> >> return 0; >> } >> diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h >> index efda313..4f0b1b2 100644 >> --- a/lib/librte_ethdev/rte_ethdev.h >> +++ b/lib/librte_ethdev/rte_ethdev.h >> @@ -1582,6 +1582,13 @@ struct rte_eth_dev_info { >> }; >> >> /** >> + * RX/TX queue states >> + */ >> +#define RTE_ETH_QUEUE_STATE_STOPPED 0 >> +#define RTE_ETH_QUEUE_STATE_STARTED 1 >> +#define RTE_ETH_QUEUE_STATE_HAIRPIN 2 >> + >> +/** >> * Ethernet device RX queue information structure. >> * Used to retrieve information about configured queue. >> */ >> @@ -1591,6 +1598,8 @@ struct rte_eth_rxq_info { >> uint8_t scattered_rx; /**< scattered packets RX supported. */ >> uint16_t nb_desc; /**< configured number of RXDs. */ >> uint16_t rx_buf_size; /**< hardware receive buffer size. */ >> +/**< Queues state: STARTED(1) / STOPPED(0). */ > > I think comment has to state that possible values are one of > RTE_ETH_QUEUE_STATE_*. > About previous discussion about new field in this struct vs new API function, > I still think new function will be a bit cleaner, but could live with both. > >> +uint8_t queue_state; > > If we'll go with new 1B field, then as Stephen pointed, > it is probably worth to fill the hole between scattered_rx > and nb_desc with this new filed. > +1 >> } __rte_cache_min_aligned; >> >> /** >> @@ -1600,6 +1609,8 @@ struct rte_eth_rxq_info { >> struct rte_eth_txq_info { >> struct rte_eth_txconf conf; /**< queue config parameters. */ >> uint16_t nb_desc; /**< configured number of TXDs. */ >> +/**< Queues state: STARTED(1) / STOPPED(0). */ > > Same about comment here. > >> +uint8_t queue_state; >> } __rte_cache_min_aligned; >> >> /* Generic Burst mode flag definition, values can be ORed. */ >> -- >> 2.7.4 > Other comments I case see: 1- Make QUEUE_STATE enum For consistency with existing usage I think we can keep it as it is 2- Make a specific API to get the queue state No strong opinion, I think we can go with this one 3- Use enum type in "struct rte_eth_rxq_info" Which make sense but we don't have space in current struct, also 'rte_eth_dev_data' has variable to hold same, and for consistency if we change it to enum in it, that is even wider change. I think it doesn't worth the effort and we can continue with 'uint8_t' Please add if any is missing, and if there is any strong opinion on above. If there is no objection, only required changes are above two issues commented inline, - Remove comment/note that this is only for start/stop states - Replace the field location to benefit from gap in struct