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 4FD1443BDF; Fri, 8 Mar 2024 09:09:44 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CF4EA40298; Fri, 8 Mar 2024 09:09:43 +0100 (CET) Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) by mails.dpdk.org (Postfix) with ESMTP id D36ED40274 for ; Fri, 8 Mar 2024 09:09:42 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.88.214]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4Trf0P4f80z2BffQ; Fri, 8 Mar 2024 16:07:17 +0800 (CST) Received: from kwepemm600004.china.huawei.com (unknown [7.193.23.242]) by mail.maildlp.com (Postfix) with ESMTPS id 6FED81A016C; Fri, 8 Mar 2024 16:09:40 +0800 (CST) Received: from [10.67.121.59] (10.67.121.59) by kwepemm600004.china.huawei.com (7.193.23.242) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Fri, 8 Mar 2024 16:09:39 +0800 Message-ID: <7f7b79d7-593a-9cfc-dd78-e1f48ee88d01@huawei.com> Date: Fri, 8 Mar 2024 16:09:39 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.2.0 Subject: Re: [PATCH v5 1/7] ethdev: support report register names and filter To: Jie Hai CC: , Thomas Monjalon , Andrew Rybchenko , Ferruh Yigit , References: <20231214015650.3738578-1-haijie1@huawei.com> <20240307030247.599394-1-haijie1@huawei.com> <20240307030247.599394-2-haijie1@huawei.com> From: "lihuisong (C)" In-Reply-To: <20240307030247.599394-2-haijie1@huawei.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.67.121.59] X-ClientProxiedBy: dggems702-chm.china.huawei.com (10.3.19.179) To kwepemm600004.china.huawei.com (7.193.23.242) 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 Hi Jie, With belows to changes, Acked-by: Huisong Li 在 2024/3/7 11:02, Jie Hai 写道: > This patch adds "filter" and "names" fields to "rte_dev_reg_info" > structure. Names of registers in data fields can be reported and > the registers can be filtered by their names. > > The new API rte_eth_dev_get_reg_info_ext() is added to support > reporting names and filtering by names. And the original API > rte_eth_dev_get_reg_info() does not use the names and filter fields. > A local variable is used in rte_eth_dev_get_reg_info for > compatibility. If the drivers does not report the names, set them > to "offset_XXX". > > Signed-off-by: Jie Hai > --- > doc/guides/rel_notes/release_24_03.rst | 9 ++++++ > lib/ethdev/rte_dev_info.h | 11 ++++++++ > lib/ethdev/rte_ethdev.c | 38 ++++++++++++++++++++++++++ > lib/ethdev/rte_ethdev.h | 29 ++++++++++++++++++++ > lib/ethdev/version.map | 1 + > 5 files changed, 88 insertions(+) > > diff --git a/doc/guides/rel_notes/release_24_03.rst b/doc/guides/rel_notes/release_24_03.rst > index 78590c047b2e..e491579ca984 100644 > --- a/doc/guides/rel_notes/release_24_03.rst > +++ b/doc/guides/rel_notes/release_24_03.rst > @@ -161,6 +161,12 @@ New Features > * Added power-saving during polling within the ``rte_event_dequeue_burst()`` API. > * Added support for DMA adapter. > <...> > +int > +rte_eth_dev_get_reg_info_ext(uint16_t port_id, struct rte_dev_reg_info *info) > { > struct rte_eth_dev *dev; > + uint32_t i; > int ret; > > RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); > @@ -6402,12 +6431,21 @@ rte_eth_dev_get_reg_info(uint16_t port_id, struct rte_dev_reg_info *info) > return -EINVAL; > } > > + if (info->names != NULL && info->length != 0) > + memset(info->names, 0, > + sizeof(struct rte_eth_reg_name) * info->length); > + > if (*dev->dev_ops->get_reg == NULL) > return -ENOTSUP; > ret = eth_err(port_id, (*dev->dev_ops->get_reg)(dev, info)); > > rte_ethdev_trace_get_reg_info(port_id, info, ret); The trace interface in lib/ethdev/ethdev_trace.h should be added these new fields? > Below code shouldn't be executed when ret != 0, right? > + /* Report the default names if drivers not report. */ > + if (info->names != NULL && strlen(info->names[0].name) == 0) > + for (i = 0; i < info->length; i++) > + snprintf(info->names[i].name, RTE_ETH_REG_NAME_SIZE, > + "offset_%u", info->offset + i * info->width); > return ret; > } > > diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h > index ed27360447a3..cd95a0d51038 100644 > --- a/lib/ethdev/rte_ethdev.h > +++ b/lib/ethdev/rte_ethdev.h > @@ -5066,6 +5066,35 @@ __rte_experimental > int rte_eth_get_monitor_addr(uint16_t port_id, uint16_t queue_id, > struct rte_power_monitor_cond *pmc); > > +/** > + * Retrieve the filtered device registers (values and names) and > + * register attributes (number of registers and register size) > + * > + * @param port_id > + * The port identifier of the Ethernet device. > + * @param info > + * Pointer to rte_dev_reg_info structure to fill in. > + * - If info->filter is NULL, return info for all registers (seen as filter > + * none). > + * - If info->filter is not NULL, return error if the driver does not support > + * names or filter. > + * - If info->data is NULL, the function fills in the width and length fields. > + * - If info->data is not NULL, ethdev considers there are enough spaces to > + * store the registers, and the values of registers whose name contains the > + * filter string are put into the buffer pointed at by info->data. > + * - If info->names is not NULL, drivers should fill it or the ethdev fills it > + * with default names. > + * @return > + * - (0) if successful. > + * - (-ENOTSUP) if hardware doesn't support. > + * - (-EINVAL) if bad parameter. > + * - (-ENODEV) if *port_id* invalid. > + * - (-EIO) if device is removed. > + * - others depends on the specific operations implementation. > + */ > +__rte_experimental > +int rte_eth_dev_get_reg_info_ext(uint16_t port_id, struct rte_dev_reg_info *info); > + > /** > * Retrieve device registers and register attributes (number of registers and > * register size) > diff --git a/lib/ethdev/version.map b/lib/ethdev/version.map > index 79f6f5293b5c..e5ec2a2a9741 100644 > --- a/lib/ethdev/version.map > +++ b/lib/ethdev/version.map > @@ -319,6 +319,7 @@ EXPERIMENTAL { > > # added in 24.03 > __rte_eth_trace_tx_queue_count; > + rte_eth_dev_get_reg_info_ext; > rte_eth_find_rss_algo; > rte_flow_async_update_resized; > rte_flow_calc_encap_hash;