From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5FF2EA09FD; Fri, 18 Dec 2020 14:34:12 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id D2F80CAD1; Fri, 18 Dec 2020 14:34:10 +0100 (CET) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id 0B22ECACF for ; Fri, 18 Dec 2020 14:34:07 +0100 (CET) IronPort-SDR: 3jCzCUZMug7qavUsK2VKoxklf7irUZR/Khq69iG6TorB7FmF/+15lyxT/uS2CSjwwxtpKage00 IboHUbevSgZQ== X-IronPort-AV: E=McAfee;i="6000,8403,9838"; a="172869701" X-IronPort-AV: E=Sophos;i="5.78,430,1599548400"; d="scan'208";a="172869701" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Dec 2020 05:34:05 -0800 IronPort-SDR: cJih3zDBHYIaSA7JQSofgSXl5tdqqQ9vgRyX/OH4B6ysEj6JxPTwzXx5Gd8wZugEy1v2+NqaXe EEXSZuIAL9fA== X-IronPort-AV: E=Sophos;i="5.78,430,1599548400"; d="scan'208";a="370596055" Received: from fyigit-mobl1.ger.corp.intel.com (HELO [10.213.217.25]) ([10.213.217.25]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Dec 2020 05:34:04 -0800 To: oulijun Cc: dev@dpdk.org, linuxarm@huawei.com References: <1607846585-2381-1-git-send-email-oulijun@huawei.com> <1607846585-2381-3-git-send-email-oulijun@huawei.com> <397115ae-a4be-6025-41dc-5bda358013cf@intel.com> <6b53dd9b-3132-e92e-f375-09c258f75865@huawei.com> From: Ferruh Yigit Message-ID: <5dc88619-f26b-8f59-5cca-324856c427d8@intel.com> Date: Fri, 18 Dec 2020 13:34:01 +0000 MIME-Version: 1.0 In-Reply-To: <6b53dd9b-3132-e92e-f375-09c258f75865@huawei.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Subject: Re: [dpdk-dev] [PATCH 2/7] net/hns3: fix xstats statistics with id X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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 12/18/2020 7:06 AM, oulijun wrote: > > > 在 2020/12/17 23:20, Ferruh Yigit 写道: >> On 12/13/2020 8:03 AM, Lijun Ou wrote: >>> From: Huisong Li >>> >>> Number of xstats item in rte_eth_xstats_get_by_id is obtained >>> by the eth_dev_get_xstats_count API, and the xstats_get_by_id >>> ops of the driver only needs to report the corresponding stats >>> item result. >>> However, a redundant code for reporting the number of stats items >>> in the hns3_dev_xstats_get_by_id API causes a problem. Namely, if >>> the ID range of the xstats stats item does not include the basic >>> stats item, the app can not obtain the corresponding xstats >>> statistics in hns3_dev_xstats_get_by_id. >>> >>> Fixes: 8839c5e202f3 ("net/hns3: support device stats") >>> Cc: stable@dpdk.org >>> >>> Signed-off-by: Huisong Li >>> Signed-off-by: Lijun Ou >>> --- >>>   drivers/net/hns3/hns3_stats.c | 3 --- >>>   1 file changed, 3 deletions(-) >>> >>> diff --git a/drivers/net/hns3/hns3_stats.c b/drivers/net/hns3/hns3_stats.c >>> index 91168ac..b43143b 100644 >>> --- a/drivers/net/hns3/hns3_stats.c >>> +++ b/drivers/net/hns3/hns3_stats.c >>> @@ -933,9 +933,6 @@ hns3_dev_xstats_get_by_id(struct rte_eth_dev *dev, const >>> uint64_t *ids, >>>       uint32_t i; >>>       int ret; >>> -    if (ids == NULL || size < cnt_stats) >>> -        return cnt_stats; >>> - >> >> Hi Lijun, >> >> Above check seems wrong, but just removing it also wrong. >> >> Following checks should be there: >> ids==NULL && values==NULL ? return cnt_stats >> ids==NULL ? return all values >> >> Also 'hns3_dev_xstats_get_names_by_id()' seems wrong in that manner. >> > Thanks for your reviews. It should be deleted with the check in > hns3_dev_xstats_get_by_id. Because the check have done in the API layer. > for example >   For rte_eth_xstats_get_by_id implementation: >   if ids == NULL and values == NULL, it returns the result of > eth_dev_get_xstats_count and not run the hns3_dev_xstats_get_by_id > For the case "ids==NULL && values==NULL", yes 'rte_eth_xstats_get_by_id()' is the wrapper of this dev_ops and it has the checks, but the dev_ops can be called from somewhere else, like being in 'eth_dev_get_xstats_count()', currently 'xstats_get_names_by_id()' is used there but 'xstats_get_by_id()' may be used as well, please check how it is used in that function. dev_ops gets, "NULL, NULL, 0" arguments and it should be supported. And for the "ids==NULL" case, it is not covered at all in 'hns3_dev_xstats_get_names_by_id()' but it should, that is a valid usecase. When dev_ops gets, "ids==NULL", that means all xstat values are requested. >   if ids == NULL, it will not be able to run the hns3_dev_xstats_get_by_id. > > However, Maybe the hns3_dev_xstats_get_names_by_id seems wrong and needs to fix > it as flows: > diff --git a/drivers/net/hns3/hns3_stats.c b/drivers/net/hns3/hns3_stats.c > index 1d1f706..789ff6e 100644 > --- a/drivers/net/hns3/hns3_stats.c > +++ b/drivers/net/hns3/hns3_stats.c > @@ -987,8 +987,8 @@ hns3_dev_xstats_get_names_by_id(struct rte_eth_dev *dev, >         uint64_t len; >         uint32_t i; > > -       if (ids == NULL || xstats_names == NULL) > -               return cnt_stats; > +       if (ids == NULL) > +               return hns3_dev_xstats_get_names(dev, xstats_names, cnt_stats); > >         len = cnt_stats * sizeof(struct rte_eth_xstat_name); >         names_copy = rte_zmalloc("hns3_xstats_names", len, 0); > > What do you think? I think both 'xstats_names' & 'ids' should be checked, please check above comment, like: if (xstats_names == NULL) return cnt_stats; if (ids == NULL) return hns3_dev_xstats_get_names(dev, xstats_names, cnt_stats);