DPDK patches and discussions
 help / color / mirror / Atom feed
* [PATCH 0/3] bugfix for ethdev telemetry
@ 2022-04-16  1:07 Chengwen Feng
  2022-04-16  1:07 ` [PATCH 1/3] ethdev: fix telemetry xstats return null with some PMDs Chengwen Feng
                   ` (5 more replies)
  0 siblings, 6 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-04-16  1:07 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: dev

This patch set contains three bugfix patch for ethdev telemetry.

Chengwen Feng (3):
  ethdev: fix telemetry xstats return null with some PMDs
  ethdev: fix memory leak when telemetry xstats
  net/cnxk: fix telemetry possible null pointer access

 drivers/net/cnxk/cnxk_ethdev_telemetry.c | 2 ++
 lib/ethdev/rte_ethdev.c                  | 3 ++-
 2 files changed, 4 insertions(+), 1 deletion(-)

-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH 1/3] ethdev: fix telemetry xstats return null with some PMDs
  2022-04-16  1:07 [PATCH 0/3] bugfix for ethdev telemetry Chengwen Feng
@ 2022-04-16  1:07 ` Chengwen Feng
  2022-04-16  1:38   ` Stephen Hemminger
  2022-04-16  1:07 ` [PATCH 2/3] ethdev: fix memory leak when telemetry xstats Chengwen Feng
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 54+ messages in thread
From: Chengwen Feng @ 2022-04-16  1:07 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: dev

Currently the telemetry xstats uses rte_eth_xstats_get() to retrieve
the number of elements. But the value to be returned when the parameter
'xstats' is NULL is not specified, some PMDs (eg. hns3/ipn3ke/mvpp2/
axgbe) return zero while others return the required number of elements.

This patch uses rte_eth_xstats_get_names() instead of
rte_eth_xstats_get() because it returns the required number of elements
when the parameter 'xstats_name' is NULL.

Fixes: c190daedb9b1 ("ethdev: add telemetry callbacks")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 lib/ethdev/rte_ethdev.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index 29a3d80466..615383bde2 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -5558,7 +5558,7 @@ eth_dev_handle_port_xstats(const char *cmd __rte_unused,
 	if (!rte_eth_dev_is_valid_port(port_id))
 		return -1;
 
-	num_xstats = rte_eth_xstats_get(port_id, NULL, 0);
+	num_xstats = rte_eth_xstats_get_names(port_id, NULL, 0);
 	if (num_xstats < 0)
 		return -1;
 
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH 2/3] ethdev: fix memory leak when telemetry xstats
  2022-04-16  1:07 [PATCH 0/3] bugfix for ethdev telemetry Chengwen Feng
  2022-04-16  1:07 ` [PATCH 1/3] ethdev: fix telemetry xstats return null with some PMDs Chengwen Feng
@ 2022-04-16  1:07 ` Chengwen Feng
  2022-04-21  6:51   ` Andrew Rybchenko
  2022-04-21  8:09   ` David Marchand
  2022-04-16  1:07 ` [PATCH 3/3] net/cnxk: fix telemetry possible null pointer access Chengwen Feng
                   ` (3 subsequent siblings)
  5 siblings, 2 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-04-16  1:07 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: dev

The 'eth_xstats' should be freed after setup telemetry dictionary. This
patch fixes it.

Fixes: c190daedb9b1 ("ethdev: add telemetry callbacks")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 lib/ethdev/rte_ethdev.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index 615383bde2..df20433c2d 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -5585,6 +5585,7 @@ eth_dev_handle_port_xstats(const char *cmd __rte_unused,
 	for (i = 0; i < num_xstats; i++)
 		rte_tel_data_add_dict_u64(d, xstat_names[i].name,
 				eth_xstats[i].value);
+	free(eth_xstats);
 	return 0;
 }
 
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH 3/3] net/cnxk: fix telemetry possible null pointer access
  2022-04-16  1:07 [PATCH 0/3] bugfix for ethdev telemetry Chengwen Feng
  2022-04-16  1:07 ` [PATCH 1/3] ethdev: fix telemetry xstats return null with some PMDs Chengwen Feng
  2022-04-16  1:07 ` [PATCH 2/3] ethdev: fix memory leak when telemetry xstats Chengwen Feng
@ 2022-04-16  1:07 ` Chengwen Feng
  2022-04-28 13:15 ` [PATCH v2 0/9] bugfix for ethdev telemetry Chengwen Feng
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-04-16  1:07 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: dev

The return value of rte_tel_data_alloc() may be null pointer, in this
patch, the null check function is added.

Fixes: 5ea354a1f2cc ("net/cnxk: support telemetry")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 drivers/net/cnxk/cnxk_ethdev_telemetry.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/cnxk/cnxk_ethdev_telemetry.c b/drivers/net/cnxk/cnxk_ethdev_telemetry.c
index 83bc65848c..4fd9048643 100644
--- a/drivers/net/cnxk/cnxk_ethdev_telemetry.c
+++ b/drivers/net/cnxk/cnxk_ethdev_telemetry.c
@@ -49,6 +49,8 @@ ethdev_tel_handle_info(const char *cmd __rte_unused,
 	rte_tel_data_add_dict_int(d, "n_ports", n_ports);
 
 	i_data = rte_tel_data_alloc();
+	if (i_data == NULL)
+		return -ENOMEM;
 	rte_tel_data_start_array(i_data, RTE_TEL_U64_VAL);
 
 	for (i = 0; i < RTE_MAX_ETHPORTS; i++) {
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH 1/3] ethdev: fix telemetry xstats return null with some PMDs
  2022-04-16  1:07 ` [PATCH 1/3] ethdev: fix telemetry xstats return null with some PMDs Chengwen Feng
@ 2022-04-16  1:38   ` Stephen Hemminger
  2022-04-21  6:49     ` Andrew Rybchenko
  0 siblings, 1 reply; 54+ messages in thread
From: Stephen Hemminger @ 2022-04-16  1:38 UTC (permalink / raw)
  To: Chengwen Feng
  Cc: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar, dev

On Sat, 16 Apr 2022 09:07:45 +0800
Chengwen Feng <fengchengwen@huawei.com> wrote:

> Currently the telemetry xstats uses rte_eth_xstats_get() to retrieve
> the number of elements. But the value to be returned when the parameter
> 'xstats' is NULL is not specified, some PMDs (eg. hns3/ipn3ke/mvpp2/
> axgbe) return zero while others return the required number of elements.

Lets fix the PMD's this impacts other code as well.

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH 1/3] ethdev: fix telemetry xstats return null with some PMDs
  2022-04-16  1:38   ` Stephen Hemminger
@ 2022-04-21  6:49     ` Andrew Rybchenko
  2022-04-24  3:44       ` fengchengwen
  0 siblings, 1 reply; 54+ messages in thread
From: Andrew Rybchenko @ 2022-04-21  6:49 UTC (permalink / raw)
  To: Stephen Hemminger, Chengwen Feng
  Cc: thomas, ferruh.yigit, ndabilpuram, kirankumark, skori, skoteshwar, dev

On 4/16/22 04:38, Stephen Hemminger wrote:
> On Sat, 16 Apr 2022 09:07:45 +0800
> Chengwen Feng <fengchengwen@huawei.com> wrote:
> 
>> Currently the telemetry xstats uses rte_eth_xstats_get() to retrieve
>> the number of elements. But the value to be returned when the parameter
>> 'xstats' is NULL is not specified, some PMDs (eg. hns3/ipn3ke/mvpp2/
>> axgbe) return zero while others return the required number of elements.
> 
> Lets fix the PMD's this impacts other code as well.

+1

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH 2/3] ethdev: fix memory leak when telemetry xstats
  2022-04-16  1:07 ` [PATCH 2/3] ethdev: fix memory leak when telemetry xstats Chengwen Feng
@ 2022-04-21  6:51   ` Andrew Rybchenko
  2022-04-21  8:09   ` David Marchand
  1 sibling, 0 replies; 54+ messages in thread
From: Andrew Rybchenko @ 2022-04-21  6:51 UTC (permalink / raw)
  To: Chengwen Feng, thomas, ferruh.yigit, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: dev

On 4/16/22 04:07, Chengwen Feng wrote:
> The 'eth_xstats' should be freed after setup telemetry dictionary. This
> patch fixes it.
> 
> Fixes: c190daedb9b1 ("ethdev: add telemetry callbacks")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>

Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH 2/3] ethdev: fix memory leak when telemetry xstats
  2022-04-16  1:07 ` [PATCH 2/3] ethdev: fix memory leak when telemetry xstats Chengwen Feng
  2022-04-21  6:51   ` Andrew Rybchenko
@ 2022-04-21  8:09   ` David Marchand
  2022-04-21  9:03     ` Bruce Richardson
  1 sibling, 1 reply; 54+ messages in thread
From: David Marchand @ 2022-04-21  8:09 UTC (permalink / raw)
  To: Chengwen Feng, Thomas Monjalon, Bruce Richardson
  Cc: ferruh.yigit, Andrew Rybchenko, Nithin Dabilpuram,
	Kiran Kumar Kokkilagadda, Sunil Kumar Kori, Satha Rao, dev,
	Kevin Laatz, Conor Walsh, Ciara Power

On Sat, Apr 16, 2022 at 3:14 AM Chengwen Feng <fengchengwen@huawei.com> wrote:
>
> The 'eth_xstats' should be freed after setup telemetry dictionary. This
> patch fixes it.
>
> Fixes: c190daedb9b1 ("ethdev: add telemetry callbacks")
> Cc: stable@dpdk.org
>
> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
> ---
>  lib/ethdev/rte_ethdev.c | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
> index 615383bde2..df20433c2d 100644
> --- a/lib/ethdev/rte_ethdev.c
> +++ b/lib/ethdev/rte_ethdev.c
> @@ -5585,6 +5585,7 @@ eth_dev_handle_port_xstats(const char *cmd __rte_unused,
>         for (i = 0; i < num_xstats; i++)
>                 rte_tel_data_add_dict_u64(d, xstat_names[i].name,
>                                 eth_xstats[i].value);
> +       free(eth_xstats);
>         return 0;
>  }
>

We need some minimal testing for telemetry commands.

It could be a test automatically calling all available /ethdev/
commands on a running testpmd.
This test could be really simple, not even checking what is returned.
It would just try every command sequentially with no parameter first,
then with port 0 and finally with port 1.


Coupled with ASan in the CI, this current issue would have been caught.
For example, I tested manually with testpmd + net/null ports:

==3825787==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 1040 byte(s) in 1 object(s) allocated from:
    #0 0x7f7048a2d91f in __interceptor_malloc (/usr/lib64/libasan.so.6+0xae91f)
    #1 0x32859e9 in eth_dev_handle_port_xstats
(/home/dmarchan/dpdk/build-gcc-asan/app/dpdk-testpmd+0x32859e9)
    #2 0x3346ac9 in perform_command
(/home/dmarchan/dpdk/build-gcc-asan/app/dpdk-testpmd+0x3346ac9)
    #3 0x3347a8e in client_handler
(/home/dmarchan/dpdk/build-gcc-asan/app/dpdk-testpmd+0x3347a8e)
    #4 0x7f7045751b19 in start_thread
/usr/src/debug/glibc-2.34-25.fc35.x86_64/nptl/pthread_create.c:443



Opinions?


-- 
David Marchand


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH 2/3] ethdev: fix memory leak when telemetry xstats
  2022-04-21  8:09   ` David Marchand
@ 2022-04-21  9:03     ` Bruce Richardson
  2022-04-22  8:14       ` David Marchand
  0 siblings, 1 reply; 54+ messages in thread
From: Bruce Richardson @ 2022-04-21  9:03 UTC (permalink / raw)
  To: David Marchand
  Cc: Chengwen Feng, Thomas Monjalon, ferruh.yigit, Andrew Rybchenko,
	Nithin Dabilpuram, Kiran Kumar Kokkilagadda, Sunil Kumar Kori,
	Satha Rao, dev, Kevin Laatz, Conor Walsh, Ciara Power

On Thu, Apr 21, 2022 at 10:09:56AM +0200, David Marchand wrote:
> On Sat, Apr 16, 2022 at 3:14 AM Chengwen Feng <fengchengwen@huawei.com> wrote:
> >
> > The 'eth_xstats' should be freed after setup telemetry dictionary. This
> > patch fixes it.
> >
> > Fixes: c190daedb9b1 ("ethdev: add telemetry callbacks")
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
> > ---
> >  lib/ethdev/rte_ethdev.c | 1 +
> >  1 file changed, 1 insertion(+)
> >
> > diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
> > index 615383bde2..df20433c2d 100644
> > --- a/lib/ethdev/rte_ethdev.c
> > +++ b/lib/ethdev/rte_ethdev.c
> > @@ -5585,6 +5585,7 @@ eth_dev_handle_port_xstats(const char *cmd __rte_unused,
> >         for (i = 0; i < num_xstats; i++)
> >                 rte_tel_data_add_dict_u64(d, xstat_names[i].name,
> >                                 eth_xstats[i].value);
> > +       free(eth_xstats);
> >         return 0;
> >  }
> >
> 
> We need some minimal testing for telemetry commands.
> 
> It could be a test automatically calling all available /ethdev/
> commands on a running testpmd.
> This test could be really simple, not even checking what is returned.
> It would just try every command sequentially with no parameter first,
> then with port 0 and finally with port 1.
> 

That seems reasonable. However, I'd go a little further and have all
available commands called as an initial sanity check. Then we can use some
heuristics to go further, with the *dev/stats commands or xstats commands
all being called with numeric parameters as you suggest.

/Bruce

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH 2/3] ethdev: fix memory leak when telemetry xstats
  2022-04-21  9:03     ` Bruce Richardson
@ 2022-04-22  8:14       ` David Marchand
  0 siblings, 0 replies; 54+ messages in thread
From: David Marchand @ 2022-04-22  8:14 UTC (permalink / raw)
  To: Bruce Richardson
  Cc: Chengwen Feng, Thomas Monjalon, ferruh.yigit, Andrew Rybchenko,
	Nithin Dabilpuram, Kiran Kumar Kokkilagadda, Sunil Kumar Kori,
	Satha Rao, dev, Kevin Laatz, Conor Walsh, Ciara Power

On Thu, Apr 21, 2022 at 11:04 AM Bruce Richardson
<bruce.richardson@intel.com> wrote:
> > We need some minimal testing for telemetry commands.
> >
> > It could be a test automatically calling all available /ethdev/
> > commands on a running testpmd.
> > This test could be really simple, not even checking what is returned.
> > It would just try every command sequentially with no parameter first,
> > then with port 0 and finally with port 1.
> >
>
> That seems reasonable. However, I'd go a little further and have all
> available commands called as an initial sanity check. Then we can use some
> heuristics to go further, with the *dev/stats commands or xstats commands
> all being called with numeric parameters as you suggest.

Ok, lgtm too.
Just to be clear, I don't have the time to work on this, so this is
open to volunteers.


-- 
David Marchand


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH 1/3] ethdev: fix telemetry xstats return null with some PMDs
  2022-04-21  6:49     ` Andrew Rybchenko
@ 2022-04-24  3:44       ` fengchengwen
  2022-04-25 10:16         ` Morten Brørup
  0 siblings, 1 reply; 54+ messages in thread
From: fengchengwen @ 2022-04-24  3:44 UTC (permalink / raw)
  To: Andrew Rybchenko, Stephen Hemminger
  Cc: thomas, ferruh.yigit, ndabilpuram, kirankumark, skori, skoteshwar, dev

The root cause is: when the xstats is NULL and n less than required number of
elements is zero, the return value of rte_eth_xstats_get is ambiguous from
rte_ethdev.h's declaration.

But the implementation of rte_eth_xstats_get return required number of elements
when xstats is NULL and n less than required number of elements.

There are two modification schemes:
a) the value of xstats cannot be NULL, and the value of n must be greater than
   or equal to the required number, otherwise, an error code is returned.
b) define the behavior as the same as rte_eth_xstats_get_names, which means return
   required number of elelement when xstats is NULL and n less than required number
   of elements.

I prefer the scheme a because rte_eth_xstats_get and rte_eth_xstats_get_name are
symbiotic, and it's not necessary to both implement the same logic.

Also for scheme a, there is no need to modify the PMD implementation.

What about your opinions ?

On 2022/4/21 14:49, Andrew Rybchenko wrote:
> On 4/16/22 04:38, Stephen Hemminger wrote:
>> On Sat, 16 Apr 2022 09:07:45 +0800
>> Chengwen Feng <fengchengwen@huawei.com> wrote:
>>
>>> Currently the telemetry xstats uses rte_eth_xstats_get() to retrieve
>>> the number of elements. But the value to be returned when the parameter
>>> 'xstats' is NULL is not specified, some PMDs (eg. hns3/ipn3ke/mvpp2/
>>> axgbe) return zero while others return the required number of elements.
>>
>> Lets fix the PMD's this impacts other code as well.
> 
> +1
> 
> .


^ permalink raw reply	[flat|nested] 54+ messages in thread

* RE: [PATCH 1/3] ethdev: fix telemetry xstats return null with some PMDs
  2022-04-24  3:44       ` fengchengwen
@ 2022-04-25 10:16         ` Morten Brørup
  2022-04-28 13:38           ` fengchengwen
  0 siblings, 1 reply; 54+ messages in thread
From: Morten Brørup @ 2022-04-25 10:16 UTC (permalink / raw)
  To: fengchengwen, Andrew Rybchenko, Stephen Hemminger
  Cc: thomas, ferruh.yigit, ndabilpuram, kirankumark, skori, skoteshwar, dev

> From: fengchengwen [mailto:fengchengwen@huawei.com]
> Sent: Sunday, 24 April 2022 05.45
> 
> The root cause is: when the xstats is NULL and n less than required
> number of
> elements is zero, the return value of rte_eth_xstats_get is ambiguous
> from
> rte_ethdev.h's declaration.
> 
> But the implementation of rte_eth_xstats_get return required number of
> elements
> when xstats is NULL and n less than required number of elements.
> 
> There are two modification schemes:
> a) the value of xstats cannot be NULL, and the value of n must be
> greater than
>    or equal to the required number, otherwise, an error code is
> returned.
> b) define the behavior as the same as rte_eth_xstats_get_names, which
> means return
>    required number of elelement when xstats is NULL and n less than
> required number
>    of elements.
> 
> I prefer the scheme a because rte_eth_xstats_get and
> rte_eth_xstats_get_name are
> symbiotic, and it's not necessary to both implement the same logic.
> 
> Also for scheme a, there is no need to modify the PMD implementation.
> 
> What about your opinions ?

This is an excellent proposal.

And if the documentation for rte_eth_xstats_get() refers to rte_eth_xstats_get_names() for getting the number of elements, it is perfect.

> 
> On 2022/4/21 14:49, Andrew Rybchenko wrote:
> > On 4/16/22 04:38, Stephen Hemminger wrote:
> >> On Sat, 16 Apr 2022 09:07:45 +0800
> >> Chengwen Feng <fengchengwen@huawei.com> wrote:
> >>
> >>> Currently the telemetry xstats uses rte_eth_xstats_get() to
> retrieve
> >>> the number of elements. But the value to be returned when the
> parameter
> >>> 'xstats' is NULL is not specified, some PMDs (eg.
> hns3/ipn3ke/mvpp2/
> >>> axgbe) return zero while others return the required number of
> elements.
> >>
> >> Lets fix the PMD's this impacts other code as well.
> >
> > +1
> >
> > .
> 


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v2 0/9] bugfix for ethdev telemetry
  2022-04-16  1:07 [PATCH 0/3] bugfix for ethdev telemetry Chengwen Feng
                   ` (2 preceding siblings ...)
  2022-04-16  1:07 ` [PATCH 3/3] net/cnxk: fix telemetry possible null pointer access Chengwen Feng
@ 2022-04-28 13:15 ` Chengwen Feng
  2022-04-28 13:15   ` [PATCH v2 1/9] ethdev: define retval when xstats is null of get xstats Chengwen Feng
                     ` (8 more replies)
  2022-05-05  8:02 ` [PATCH v3 00/10] bugfix for ethdev telemetry Chengwen Feng
  2022-05-13  2:53 ` [PATCH v4 0/9] bugfix for ethdev telemetry Chengwen Feng
  5 siblings, 9 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-04-28 13:15 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: dev

This patch set contains nine bugfix for ethdev telemetry.

Chengwen Feng (9):
  ethdev: define retval when xstats is null of get xstats
  net/hns3: adjust retval when xstats is null of get xstats
  net/ipn3ke: adjust retval when xstats is null of get xstats
  net/mvpp2: adjust retval when xstats is null of get xstats
  net/axgbe: adjust retval when xstats is null of get xstats
  ethdev: fix memory leak when telemetry xstats
  ethdev: support auto-filled flag when telemetry stats
  ethdev: fix possible null pointer access
  net/cnxk: fix telemetry possible null pointer access

---
v2:
* define return value when xstats is null of get xstats.
* fix more bugs when deepin ethdev telemetry.

 drivers/net/axgbe/axgbe_ethdev.c         |  2 +-
 drivers/net/cnxk/cnxk_ethdev_telemetry.c |  2 ++
 drivers/net/hns3/hns3_stats.c            |  7 ++-----
 drivers/net/ipn3ke/ipn3ke_representor.c  |  5 +----
 drivers/net/mvpp2/mrvl_ethdev.c          |  2 +-
 lib/ethdev/rte_ethdev.c                  | 17 ++++++++++++-----
 lib/ethdev/rte_ethdev.h                  |  2 +-
 7 files changed, 20 insertions(+), 17 deletions(-)

-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v2 1/9] ethdev: define retval when xstats is null of get xstats
  2022-04-28 13:15 ` [PATCH v2 0/9] bugfix for ethdev telemetry Chengwen Feng
@ 2022-04-28 13:15   ` Chengwen Feng
  2022-05-04 10:32     ` Andrew Rybchenko
  2022-04-28 13:15   ` [PATCH v2 2/9] net/hns3: adjust " Chengwen Feng
                     ` (7 subsequent siblings)
  8 siblings, 1 reply; 54+ messages in thread
From: Chengwen Feng @ 2022-04-28 13:15 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: dev

Currently the value returned when xstats is NULL of rte_eth_xstats_get()
is not specified, some PMDs (eg. hns3/ipn3ke/mvpp2/axgbe) return zero
while others return the required number of elements.

This patch defines that the return value should be the required number of
elements when xstats is NULL of rte_eth_xstats_get().

Fixes: ce757f5c9a4d ("ethdev: new method to retrieve extended statistics")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 lib/ethdev/rte_ethdev.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index 04cff8ee10..0b18297c95 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -3174,7 +3174,7 @@ int rte_eth_xstats_get_names(uint16_t port_id,
  * @param xstats
  *   A pointer to a table of structure of type *rte_eth_xstat*
  *   to be filled with device statistics ids and values.
- *   This parameter can be set to NULL if n is 0.
+ *   If set to NULL, the function returns the required number of elements.
  * @param n
  *   The size of the xstats array (number of elements).
  * @return
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v2 2/9] net/hns3: adjust retval when xstats is null of get xstats
  2022-04-28 13:15 ` [PATCH v2 0/9] bugfix for ethdev telemetry Chengwen Feng
  2022-04-28 13:15   ` [PATCH v2 1/9] ethdev: define retval when xstats is null of get xstats Chengwen Feng
@ 2022-04-28 13:15   ` Chengwen Feng
  2022-05-06  7:56     ` Min Hu (Connor)
  2022-04-28 13:15   ` [PATCH v2 3/9] net/ipn3ke: " Chengwen Feng
                     ` (6 subsequent siblings)
  8 siblings, 1 reply; 54+ messages in thread
From: Chengwen Feng @ 2022-04-28 13:15 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: dev

Many user (e.g. telemetry) invokes rte_eth_xstats_get(port_id, NULL, 0)
to retrieve the required number of elements, but currently hns3 PMD
returns zero when xstats is NULL.

This patch adjusts that the return value was the required number of
elements when stats is NULL.

Fixes: 8839c5e202f3 ("net/hns3: support device stats")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 drivers/net/hns3/hns3_stats.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/net/hns3/hns3_stats.c b/drivers/net/hns3/hns3_stats.c
index 806720faff..4165e22f7f 100644
--- a/drivers/net/hns3/hns3_stats.c
+++ b/drivers/net/hns3/hns3_stats.c
@@ -1020,7 +1020,7 @@ hns3_imissed_stats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
  * @praram xstats
  *   A pointer to a table of structure of type *rte_eth_xstat*
  *   to be filled with device statistics ids and values.
- *   This parameter can be set to NULL if n is 0.
+ *   If set to NULL, the function returns the required number of elements.
  * @param n
  *   The size of the xstats array (number of elements).
  * @return
@@ -1041,11 +1041,8 @@ hns3_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
 	int count;
 	int ret;
 
-	if (xstats == NULL)
-		return 0;
-
 	count = hns3_xstats_calc_num(dev);
-	if ((int)n < count)
+	if (xstats == NULL || (int)n < count)
 		return count;
 
 	count = 0;
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v2 3/9] net/ipn3ke: adjust retval when xstats is null of get xstats
  2022-04-28 13:15 ` [PATCH v2 0/9] bugfix for ethdev telemetry Chengwen Feng
  2022-04-28 13:15   ` [PATCH v2 1/9] ethdev: define retval when xstats is null of get xstats Chengwen Feng
  2022-04-28 13:15   ` [PATCH v2 2/9] net/hns3: adjust " Chengwen Feng
@ 2022-04-28 13:15   ` Chengwen Feng
  2022-04-28 13:15   ` [PATCH v2 4/9] net/mvpp2: " Chengwen Feng
                     ` (5 subsequent siblings)
  8 siblings, 0 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-04-28 13:15 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: dev

Many user (e.g. telemetry) invokes rte_eth_xstats_get(port_id, NULL, 0)
to retrieve the required number of elements, but currently ipn3ke PMD
returns zero when xstats is NULL.

This patch adjusts that the return value was the required number of
elements when stats is NULL.

Fixes: 5a6d883878db ("net/ipn3ke: implement statistics")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 drivers/net/ipn3ke/ipn3ke_representor.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/net/ipn3ke/ipn3ke_representor.c b/drivers/net/ipn3ke/ipn3ke_representor.c
index c9dde1d82e..9646370b5d 100644
--- a/drivers/net/ipn3ke/ipn3ke_representor.c
+++ b/drivers/net/ipn3ke/ipn3ke_representor.c
@@ -2218,9 +2218,6 @@ ipn3ke_rpst_xstats_get
 	struct ipn3ke_rpst_hw_port_stats hw_stats;
 	struct rte_eth_stats stats;
 
-	if (!xstats)
-		return 0;
-
 	if (!ethdev) {
 		IPN3KE_AFU_PMD_ERR("ethernet device to get statistics is NULL");
 		return -EINVAL;
@@ -2258,7 +2255,7 @@ ipn3ke_rpst_xstats_get
 	port_id = atoi(ch);
 
 	count = ipn3ke_rpst_xstats_calc_num();
-	if (n < count)
+	if (xstats == NULL || n < count)
 		return count;
 
 	if (hw->retimer.mac_type == IFPGA_RAWDEV_RETIMER_MAC_TYPE_25GE_25GAUI) {
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v2 4/9] net/mvpp2: adjust retval when xstats is null of get xstats
  2022-04-28 13:15 ` [PATCH v2 0/9] bugfix for ethdev telemetry Chengwen Feng
                     ` (2 preceding siblings ...)
  2022-04-28 13:15   ` [PATCH v2 3/9] net/ipn3ke: " Chengwen Feng
@ 2022-04-28 13:15   ` Chengwen Feng
  2022-04-28 13:15   ` [PATCH v2 5/9] net/axgbe: " Chengwen Feng
                     ` (4 subsequent siblings)
  8 siblings, 0 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-04-28 13:15 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: dev

Many user (e.g. telemetry) invokes rte_eth_xstats_get(port_id, NULL, 0)
to retrieve the required number of elements, but currently mvpp2 PMD
returns zero when xstats is NULL.

This patch adjusts that the return value was the required number of
elements when stats is NULL.

Fixes: a77b5378cd41 ("net/mrvl: add extended statistics")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 drivers/net/mvpp2/mrvl_ethdev.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/mvpp2/mrvl_ethdev.c b/drivers/net/mvpp2/mrvl_ethdev.c
index f86701d248..9781a0a411 100644
--- a/drivers/net/mvpp2/mrvl_ethdev.c
+++ b/drivers/net/mvpp2/mrvl_ethdev.c
@@ -1629,7 +1629,7 @@ mrvl_xstats_get(struct rte_eth_dev *dev,
 	unsigned int i;
 
 	if (!stats)
-		return 0;
+		return RTE_DIM(mrvl_xstats_tbl);
 
 	pp2_ppio_get_statistics(priv->ppio, &ppio_stats, 0);
 	for (i = 0; i < n && i < RTE_DIM(mrvl_xstats_tbl); i++) {
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v2 5/9] net/axgbe: adjust retval when xstats is null of get xstats
  2022-04-28 13:15 ` [PATCH v2 0/9] bugfix for ethdev telemetry Chengwen Feng
                     ` (3 preceding siblings ...)
  2022-04-28 13:15   ` [PATCH v2 4/9] net/mvpp2: " Chengwen Feng
@ 2022-04-28 13:15   ` Chengwen Feng
  2022-04-28 13:15   ` [PATCH v2 6/9] ethdev: fix memory leak when telemetry xstats Chengwen Feng
                     ` (3 subsequent siblings)
  8 siblings, 0 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-04-28 13:15 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: dev

Many user (e.g. telemetry) invokes rte_eth_xstats_get(port_id, NULL, 0)
to retrieve the required number of elements, but currently axgbe PMD
returns zero when xstats is NULL.

This patch adjusts that the return value was the required number of
elements when stats is NULL.

Fixes: 9d1ef6b2e731 ("net/axgbe: add xstats")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 drivers/net/axgbe/axgbe_ethdev.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/axgbe/axgbe_ethdev.c b/drivers/net/axgbe/axgbe_ethdev.c
index 951da5cc26..f6a3a52430 100644
--- a/drivers/net/axgbe/axgbe_ethdev.c
+++ b/drivers/net/axgbe/axgbe_ethdev.c
@@ -1014,7 +1014,7 @@ axgbe_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *stats,
 	unsigned int i;
 
 	if (!stats)
-		return 0;
+		return AXGBE_XSTATS_COUNT;
 
 	axgbe_read_mmc_stats(pdata);
 
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v2 6/9] ethdev: fix memory leak when telemetry xstats
  2022-04-28 13:15 ` [PATCH v2 0/9] bugfix for ethdev telemetry Chengwen Feng
                     ` (4 preceding siblings ...)
  2022-04-28 13:15   ` [PATCH v2 5/9] net/axgbe: " Chengwen Feng
@ 2022-04-28 13:15   ` Chengwen Feng
  2022-04-28 13:15   ` [PATCH v2 7/9] ethdev: support auto-filled flag when telemetry stats Chengwen Feng
                     ` (2 subsequent siblings)
  8 siblings, 0 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-04-28 13:15 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: dev

The 'eth_xstats' should be freed after setup telemetry dictionary. This
patch fixes it.

Fixes: c190daedb9b1 ("ethdev: add telemetry callbacks")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
---
 lib/ethdev/rte_ethdev.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index 29a3d80466..b182694b7d 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -5585,6 +5585,7 @@ eth_dev_handle_port_xstats(const char *cmd __rte_unused,
 	for (i = 0; i < num_xstats; i++)
 		rte_tel_data_add_dict_u64(d, xstat_names[i].name,
 				eth_xstats[i].value);
+	free(eth_xstats);
 	return 0;
 }
 
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v2 7/9] ethdev: support auto-filled flag when telemetry stats
  2022-04-28 13:15 ` [PATCH v2 0/9] bugfix for ethdev telemetry Chengwen Feng
                     ` (5 preceding siblings ...)
  2022-04-28 13:15   ` [PATCH v2 6/9] ethdev: fix memory leak when telemetry xstats Chengwen Feng
@ 2022-04-28 13:15   ` Chengwen Feng
  2022-04-28 13:15   ` [PATCH v2 8/9] ethdev: fix possible null pointer access Chengwen Feng
  2022-04-28 13:16   ` [PATCH v2 9/9] net/cnxk: fix telemetry " Chengwen Feng
  8 siblings, 0 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-04-28 13:15 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: dev

This patch supports auto-filled queue xstats when telemetry stats.

Fixes: f30e69b41f94 ("ethdev: add device flag to bypass auto-filled queue xstats")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 lib/ethdev/rte_ethdev.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index b182694b7d..01d4370aa7 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -5506,6 +5506,7 @@ eth_dev_handle_port_stats(const char *cmd __rte_unused,
 		struct rte_tel_data *d)
 {
 	struct rte_eth_stats stats;
+	struct rte_eth_dev *dev;
 	int port_id, ret;
 
 	if (params == NULL || strlen(params) == 0 || !isdigit(*params))
@@ -5514,6 +5515,7 @@ eth_dev_handle_port_stats(const char *cmd __rte_unused,
 	port_id = atoi(params);
 	if (!rte_eth_dev_is_valid_port(port_id))
 		return -1;
+	dev = &rte_eth_devices[port_id];
 
 	ret = rte_eth_stats_get(port_id, &stats);
 	if (ret < 0)
@@ -5528,11 +5530,13 @@ eth_dev_handle_port_stats(const char *cmd __rte_unused,
 	ADD_DICT_STAT(stats, ierrors);
 	ADD_DICT_STAT(stats, oerrors);
 	ADD_DICT_STAT(stats, rx_nombuf);
-	eth_dev_add_port_queue_stats(d, stats.q_ipackets, "q_ipackets");
-	eth_dev_add_port_queue_stats(d, stats.q_opackets, "q_opackets");
-	eth_dev_add_port_queue_stats(d, stats.q_ibytes, "q_ibytes");
-	eth_dev_add_port_queue_stats(d, stats.q_obytes, "q_obytes");
-	eth_dev_add_port_queue_stats(d, stats.q_errors, "q_errors");
+	if (dev->data->dev_flags & RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS) {
+		eth_dev_add_port_queue_stats(d, stats.q_ipackets, "q_ipackets");
+		eth_dev_add_port_queue_stats(d, stats.q_opackets, "q_opackets");
+		eth_dev_add_port_queue_stats(d, stats.q_ibytes, "q_ibytes");
+		eth_dev_add_port_queue_stats(d, stats.q_obytes, "q_obytes");
+		eth_dev_add_port_queue_stats(d, stats.q_errors, "q_errors");
+	}
 
 	return 0;
 }
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v2 8/9] ethdev: fix possible null pointer access
  2022-04-28 13:15 ` [PATCH v2 0/9] bugfix for ethdev telemetry Chengwen Feng
                     ` (6 preceding siblings ...)
  2022-04-28 13:15   ` [PATCH v2 7/9] ethdev: support auto-filled flag when telemetry stats Chengwen Feng
@ 2022-04-28 13:15   ` Chengwen Feng
  2022-04-28 13:16   ` [PATCH v2 9/9] net/cnxk: fix telemetry " Chengwen Feng
  8 siblings, 0 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-04-28 13:15 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: dev

The rte_tel_data_alloc() may return NULL, so the caller should add
judgement for it.

Fixes: 083b0b310b19 ("ethdev: add common stats for telemetry")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 lib/ethdev/rte_ethdev.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index 01d4370aa7..a61ec78473 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -5492,6 +5492,8 @@ eth_dev_add_port_queue_stats(struct rte_tel_data *d, uint64_t *q_stats,
 {
 	int q;
 	struct rte_tel_data *q_data = rte_tel_data_alloc();
+	if (q_data == NULL)
+		return;
 	rte_tel_data_start_array(q_data, RTE_TEL_U64_VAL);
 	for (q = 0; q < RTE_ETHDEV_QUEUE_STAT_CNTRS; q++)
 		rte_tel_data_add_array_u64(q_data, q_stats[q]);
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v2 9/9] net/cnxk: fix telemetry possible null pointer access
  2022-04-28 13:15 ` [PATCH v2 0/9] bugfix for ethdev telemetry Chengwen Feng
                     ` (7 preceding siblings ...)
  2022-04-28 13:15   ` [PATCH v2 8/9] ethdev: fix possible null pointer access Chengwen Feng
@ 2022-04-28 13:16   ` Chengwen Feng
  8 siblings, 0 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-04-28 13:16 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: dev

The return value of rte_tel_data_alloc() may be null pointer, in this
patch, the null check function is added.

Fixes: 5ea354a1f2cc ("net/cnxk: support telemetry")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 drivers/net/cnxk/cnxk_ethdev_telemetry.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/cnxk/cnxk_ethdev_telemetry.c b/drivers/net/cnxk/cnxk_ethdev_telemetry.c
index 83bc65848c..4fd9048643 100644
--- a/drivers/net/cnxk/cnxk_ethdev_telemetry.c
+++ b/drivers/net/cnxk/cnxk_ethdev_telemetry.c
@@ -49,6 +49,8 @@ ethdev_tel_handle_info(const char *cmd __rte_unused,
 	rte_tel_data_add_dict_int(d, "n_ports", n_ports);
 
 	i_data = rte_tel_data_alloc();
+	if (i_data == NULL)
+		return -ENOMEM;
 	rte_tel_data_start_array(i_data, RTE_TEL_U64_VAL);
 
 	for (i = 0; i < RTE_MAX_ETHPORTS; i++) {
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH 1/3] ethdev: fix telemetry xstats return null with some PMDs
  2022-04-25 10:16         ` Morten Brørup
@ 2022-04-28 13:38           ` fengchengwen
  2022-04-28 13:53             ` Morten Brørup
  0 siblings, 1 reply; 54+ messages in thread
From: fengchengwen @ 2022-04-28 13:38 UTC (permalink / raw)
  To: Morten Brørup, Andrew Rybchenko, Stephen Hemminger
  Cc: thomas, ferruh.yigit, ndabilpuram, kirankumark, skori, skoteshwar, dev

On 2022/4/25 18:16, Morten Brørup wrote:
>> From: fengchengwen [mailto:fengchengwen@huawei.com]
>> Sent: Sunday, 24 April 2022 05.45
>>
>> The root cause is: when the xstats is NULL and n less than required
>> number of
>> elements is zero, the return value of rte_eth_xstats_get is ambiguous
>> from
>> rte_ethdev.h's declaration.
>>
>> But the implementation of rte_eth_xstats_get return required number of
>> elements
>> when xstats is NULL and n less than required number of elements.
>>
>> There are two modification schemes:
>> a) the value of xstats cannot be NULL, and the value of n must be
>> greater than
>>    or equal to the required number, otherwise, an error code is
>> returned.
>> b) define the behavior as the same as rte_eth_xstats_get_names, which
>> means return
>>    required number of elelement when xstats is NULL and n less than
>> required number
>>    of elements.
>>
>> I prefer the scheme a because rte_eth_xstats_get and
>> rte_eth_xstats_get_name are
>> symbiotic, and it's not necessary to both implement the same logic.
>>
>> Also for scheme a, there is no need to modify the PMD implementation.
>>
>> What about your opinions ?
> 
> This is an excellent proposal.
> 
> And if the documentation for rte_eth_xstats_get() refers to rte_eth_xstats_get_names() for getting the number of elements, it is perfect.

Hi Morten,

   I did a deepin review and found that many application use rte_eth_xstats_get(port_id, NULL, 0),
and also many PMD already support return required number of entries when xstats is NULL. So in
the v2, I use the modified hns3/ipn3ke/mvpp2/axgbe PMD method and explicit return value when xstats
is NULL of rte_eth_xstats-get().

Thanks.

> 
>>
>> On 2022/4/21 14:49, Andrew Rybchenko wrote:
>>> On 4/16/22 04:38, Stephen Hemminger wrote:
>>>> On Sat, 16 Apr 2022 09:07:45 +0800
>>>> Chengwen Feng <fengchengwen@huawei.com> wrote:
>>>>
>>>>> Currently the telemetry xstats uses rte_eth_xstats_get() to
>> retrieve
>>>>> the number of elements. But the value to be returned when the
>> parameter
>>>>> 'xstats' is NULL is not specified, some PMDs (eg.
>> hns3/ipn3ke/mvpp2/
>>>>> axgbe) return zero while others return the required number of
>> elements.
>>>>
>>>> Lets fix the PMD's this impacts other code as well.
>>>
>>> +1
>>>
>>> .
>>
> 


^ permalink raw reply	[flat|nested] 54+ messages in thread

* RE: [PATCH 1/3] ethdev: fix telemetry xstats return null with some PMDs
  2022-04-28 13:38           ` fengchengwen
@ 2022-04-28 13:53             ` Morten Brørup
  0 siblings, 0 replies; 54+ messages in thread
From: Morten Brørup @ 2022-04-28 13:53 UTC (permalink / raw)
  To: fengchengwen, Andrew Rybchenko, Stephen Hemminger
  Cc: thomas, ferruh.yigit, ndabilpuram, kirankumark, skori, skoteshwar, dev

> From: fengchengwen [mailto:fengchengwen@huawei.com]
> Sent: Thursday, 28 April 2022 15.39
> 
> On 2022/4/25 18:16, Morten Brørup wrote:
> >> From: fengchengwen [mailto:fengchengwen@huawei.com]
> >> Sent: Sunday, 24 April 2022 05.45
> >>
> >> The root cause is: when the xstats is NULL and n less than required
> >> number of
> >> elements is zero, the return value of rte_eth_xstats_get is
> ambiguous
> >> from
> >> rte_ethdev.h's declaration.
> >>
> >> But the implementation of rte_eth_xstats_get return required number
> of
> >> elements
> >> when xstats is NULL and n less than required number of elements.
> >>
> >> There are two modification schemes:
> >> a) the value of xstats cannot be NULL, and the value of n must be
> >> greater than
> >>    or equal to the required number, otherwise, an error code is
> >> returned.
> >> b) define the behavior as the same as rte_eth_xstats_get_names,
> which
> >> means return
> >>    required number of elelement when xstats is NULL and n less than
> >> required number
> >>    of elements.
> >>
> >> I prefer the scheme a because rte_eth_xstats_get and
> >> rte_eth_xstats_get_name are
> >> symbiotic, and it's not necessary to both implement the same logic.
> >>
> >> Also for scheme a, there is no need to modify the PMD
> implementation.
> >>
> >> What about your opinions ?
> >
> > This is an excellent proposal.
> >
> > And if the documentation for rte_eth_xstats_get() refers to
> rte_eth_xstats_get_names() for getting the number of elements, it is
> perfect.
> 
> Hi Morten,
> 
>    I did a deepin review and found that many application use
> rte_eth_xstats_get(port_id, NULL, 0),
> and also many PMD already support return required number of entries
> when xstats is NULL. So in
> the v2, I use the modified hns3/ipn3ke/mvpp2/axgbe PMD method and
> explicit return value when xstats
> is NULL of rte_eth_xstats-get().

Instead of modifying the drivers, consider copying this code from rte_eth_xstats_get_names() to rte_eth_xstats_get():

	cnt_expected_entries = eth_dev_get_xstats_count(port_id);
	if (xstats_names == NULL || cnt_expected_entries < 0 ||
			(int)size < cnt_expected_entries)
		return cnt_expected_entries;

Just a suggestion. Either solution is fine with me.

> 
> Thanks.
> 
> >
> >>
> >> On 2022/4/21 14:49, Andrew Rybchenko wrote:
> >>> On 4/16/22 04:38, Stephen Hemminger wrote:
> >>>> On Sat, 16 Apr 2022 09:07:45 +0800
> >>>> Chengwen Feng <fengchengwen@huawei.com> wrote:
> >>>>
> >>>>> Currently the telemetry xstats uses rte_eth_xstats_get() to
> >> retrieve
> >>>>> the number of elements. But the value to be returned when the
> >> parameter
> >>>>> 'xstats' is NULL is not specified, some PMDs (eg.
> >> hns3/ipn3ke/mvpp2/
> >>>>> axgbe) return zero while others return the required number of
> >> elements.
> >>>>
> >>>> Lets fix the PMD's this impacts other code as well.
> >>>
> >>> +1
> >>>
> >>> .
> >>
> >
> 


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH v2 1/9] ethdev: define retval when xstats is null of get xstats
  2022-04-28 13:15   ` [PATCH v2 1/9] ethdev: define retval when xstats is null of get xstats Chengwen Feng
@ 2022-05-04 10:32     ` Andrew Rybchenko
  0 siblings, 0 replies; 54+ messages in thread
From: Andrew Rybchenko @ 2022-05-04 10:32 UTC (permalink / raw)
  To: Chengwen Feng, thomas, ferruh.yigit, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: dev

On 4/28/22 16:15, Chengwen Feng wrote:
> Currently the value returned when xstats is NULL of rte_eth_xstats_get()
> is not specified, some PMDs (eg. hns3/ipn3ke/mvpp2/axgbe) return zero
> while others return the required number of elements.
> 
> This patch defines that the return value should be the required number of
> elements when xstats is NULL of rte_eth_xstats_get().
> 
> Fixes: ce757f5c9a4d ("ethdev: new method to retrieve extended statistics")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
> ---
>   lib/ethdev/rte_ethdev.h | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
> index 04cff8ee10..0b18297c95 100644
> --- a/lib/ethdev/rte_ethdev.h
> +++ b/lib/ethdev/rte_ethdev.h
> @@ -3174,7 +3174,7 @@ int rte_eth_xstats_get_names(uint16_t port_id,
>    * @param xstats
>    *   A pointer to a table of structure of type *rte_eth_xstat*
>    *   to be filled with device statistics ids and values.
> - *   This parameter can be set to NULL if n is 0.
> + *   If set to NULL, the function returns the required number of elements.

I'm sorry, but I disagree with the patch. First of all it
removes limitation when xstats may be NULL. Second, I think
that clarification is not required since:
if xstats is NULL, n must be 0 as defined above and return
value description says:
3183  *   - A positive value higher than n: error, the given statistics 
table
3184  *     is too small. The return value corresponds to the size that 
should
3185  *     be given to succeed. The entries in the table are not valid and
3186  *     shall not be used by the caller.


>    * @param n
>    *   The size of the xstats array (number of elements).
>    * @return


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v3 00/10] bugfix for ethdev telemetry
  2022-04-16  1:07 [PATCH 0/3] bugfix for ethdev telemetry Chengwen Feng
                   ` (3 preceding siblings ...)
  2022-04-28 13:15 ` [PATCH v2 0/9] bugfix for ethdev telemetry Chengwen Feng
@ 2022-05-05  8:02 ` Chengwen Feng
  2022-05-05  8:02   ` [PATCH v3 01/10] ethdev: define retval when xstats is null of get xstats Chengwen Feng
                     ` (9 more replies)
  2022-05-13  2:53 ` [PATCH v4 0/9] bugfix for ethdev telemetry Chengwen Feng
  5 siblings, 10 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-05-05  8:02 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

This patch set contains nine bugfix for ethdev telemetry.

Chengwen Feng (10):
  ethdev: define retval when xstats is null of get xstats
  ethdev: optimize xstats-get API's implementation
  net/hns3: adjust retval when xstats is null of get xstats
  net/ipn3ke: adjust retval when xstats is null of get xstats
  net/mvpp2: adjust retval when xstats is null of get xstats
  net/axgbe: adjust retval when xstats is null of get xstats
  ethdev: fix memory leak when telemetry xstats
  ethdev: support auto-filled flag when telemetry stats
  ethdev: fix possible null pointer access
  net/cnxk: fix telemetry possible null pointer access

---
v3:
* refine the descriptor of return value when xstats is null of 
  rte_eth_xstats_get().
* add patch for optimize xstats-get API's implementation.
v2:
* define return value when xstats is null of get xstats.
* fix more bugs when deepin ethdev telemetry.

 drivers/net/axgbe/axgbe_ethdev.c         |  2 +-
 drivers/net/cnxk/cnxk_ethdev_telemetry.c |  2 ++
 drivers/net/hns3/hns3_stats.c            |  7 ++----
 drivers/net/ipn3ke/ipn3ke_representor.c  |  5 +----
 drivers/net/mvpp2/mrvl_ethdev.c          |  2 +-
 lib/ethdev/rte_ethdev.c                  | 28 ++++++++++++------------
 lib/ethdev/rte_ethdev.h                  |  3 ++-
 7 files changed, 23 insertions(+), 26 deletions(-)

-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v3 01/10] ethdev: define retval when xstats is null of get xstats
  2022-05-05  8:02 ` [PATCH v3 00/10] bugfix for ethdev telemetry Chengwen Feng
@ 2022-05-05  8:02   ` Chengwen Feng
  2022-05-05  8:02   ` [PATCH v3 02/10] ethdev: optimize xstats-get API's implementation Chengwen Feng
                     ` (8 subsequent siblings)
  9 siblings, 0 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-05-05  8:02 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

Currently the value returned when xstats is NULL of rte_eth_xstats_get()
is not specified, some PMDs (eg. hns3/ipn3ke/mvpp2/axgbe) return zero
while others return the required number of elements.

This patch defines that the return value should be the required number of
elements when xstats is NULL of rte_eth_xstats_get().

Fixes: ce757f5c9a4d ("ethdev: new method to retrieve extended statistics")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 lib/ethdev/rte_ethdev.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index 04cff8ee10..1aefc48532 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -3174,7 +3174,8 @@ int rte_eth_xstats_get_names(uint16_t port_id,
  * @param xstats
  *   A pointer to a table of structure of type *rte_eth_xstat*
  *   to be filled with device statistics ids and values.
- *   This parameter can be set to NULL if n is 0.
+ *   This parameter can be set to NULL if n is 0; If set to NULL, the
+ *   function returns the required number of elements.
  * @param n
  *   The size of the xstats array (number of elements).
  * @return
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v3 02/10] ethdev: optimize xstats-get API's implementation
  2022-05-05  8:02 ` [PATCH v3 00/10] bugfix for ethdev telemetry Chengwen Feng
  2022-05-05  8:02   ` [PATCH v3 01/10] ethdev: define retval when xstats is null of get xstats Chengwen Feng
@ 2022-05-05  8:02   ` Chengwen Feng
  2022-05-12 10:31     ` Andrew Rybchenko
  2022-05-05  8:02   ` [PATCH v3 03/10] net/hns3: adjust retval when xstats is null of get xstats Chengwen Feng
                     ` (7 subsequent siblings)
  9 siblings, 1 reply; 54+ messages in thread
From: Chengwen Feng @ 2022-05-05  8:02 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

This patch uses eth_dev_get_xstats_basic_count() to retrieve generic
statistics count.

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 lib/ethdev/rte_ethdev.c | 11 ++---------
 1 file changed, 2 insertions(+), 9 deletions(-)

diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index 29a3d80466..ed395a8f54 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -2967,21 +2967,14 @@ rte_eth_xstats_get(uint16_t port_id, struct rte_eth_xstat *xstats,
 	unsigned int n)
 {
 	struct rte_eth_dev *dev;
-	unsigned int count = 0, i;
+	unsigned int count, i;
 	signed int xcount = 0;
-	uint16_t nb_rxqs, nb_txqs;
 	int ret;
 
 	RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
 	dev = &rte_eth_devices[port_id];
 
-	nb_rxqs = RTE_MIN(dev->data->nb_rx_queues, RTE_ETHDEV_QUEUE_STAT_CNTRS);
-	nb_txqs = RTE_MIN(dev->data->nb_tx_queues, RTE_ETHDEV_QUEUE_STAT_CNTRS);
-
-	/* Return generic statistics */
-	count = RTE_NB_STATS;
-	if (dev->data->dev_flags & RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS)
-		count += (nb_rxqs * RTE_NB_RXQ_STATS) + (nb_txqs * RTE_NB_TXQ_STATS);
+	count = eth_dev_get_xstats_basic_count(dev);
 
 	/* implemented by the driver */
 	if (dev->dev_ops->xstats_get != NULL) {
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v3 03/10] net/hns3: adjust retval when xstats is null of get xstats
  2022-05-05  8:02 ` [PATCH v3 00/10] bugfix for ethdev telemetry Chengwen Feng
  2022-05-05  8:02   ` [PATCH v3 01/10] ethdev: define retval when xstats is null of get xstats Chengwen Feng
  2022-05-05  8:02   ` [PATCH v3 02/10] ethdev: optimize xstats-get API's implementation Chengwen Feng
@ 2022-05-05  8:02   ` Chengwen Feng
  2022-05-12  9:51     ` Andrew Rybchenko
  2022-05-05  8:02   ` [PATCH v3 04/10] net/ipn3ke: " Chengwen Feng
                     ` (6 subsequent siblings)
  9 siblings, 1 reply; 54+ messages in thread
From: Chengwen Feng @ 2022-05-05  8:02 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

Many user (e.g. telemetry) invokes rte_eth_xstats_get(port_id, NULL, 0)
to retrieve the required number of elements, but currently hns3 PMD
returns zero when xstats is NULL.

This patch adjusts that the return value was the required number of
elements when stats is NULL.

Fixes: 8839c5e202f3 ("net/hns3: support device stats")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 drivers/net/hns3/hns3_stats.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/net/hns3/hns3_stats.c b/drivers/net/hns3/hns3_stats.c
index 806720faff..4165e22f7f 100644
--- a/drivers/net/hns3/hns3_stats.c
+++ b/drivers/net/hns3/hns3_stats.c
@@ -1020,7 +1020,7 @@ hns3_imissed_stats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
  * @praram xstats
  *   A pointer to a table of structure of type *rte_eth_xstat*
  *   to be filled with device statistics ids and values.
- *   This parameter can be set to NULL if n is 0.
+ *   If set to NULL, the function returns the required number of elements.
  * @param n
  *   The size of the xstats array (number of elements).
  * @return
@@ -1041,11 +1041,8 @@ hns3_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
 	int count;
 	int ret;
 
-	if (xstats == NULL)
-		return 0;
-
 	count = hns3_xstats_calc_num(dev);
-	if ((int)n < count)
+	if (xstats == NULL || (int)n < count)
 		return count;
 
 	count = 0;
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v3 04/10] net/ipn3ke: adjust retval when xstats is null of get xstats
  2022-05-05  8:02 ` [PATCH v3 00/10] bugfix for ethdev telemetry Chengwen Feng
                     ` (2 preceding siblings ...)
  2022-05-05  8:02   ` [PATCH v3 03/10] net/hns3: adjust retval when xstats is null of get xstats Chengwen Feng
@ 2022-05-05  8:02   ` Chengwen Feng
  2022-05-05  8:02   ` [PATCH v3 05/10] net/mvpp2: " Chengwen Feng
                     ` (5 subsequent siblings)
  9 siblings, 0 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-05-05  8:02 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

Many user (e.g. telemetry) invokes rte_eth_xstats_get(port_id, NULL, 0)
to retrieve the required number of elements, but currently ipn3ke PMD
returns zero when xstats is NULL.

This patch adjusts that the return value was the required number of
elements when stats is NULL.

Fixes: 5a6d883878db ("net/ipn3ke: implement statistics")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 drivers/net/ipn3ke/ipn3ke_representor.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/net/ipn3ke/ipn3ke_representor.c b/drivers/net/ipn3ke/ipn3ke_representor.c
index c9dde1d82e..9646370b5d 100644
--- a/drivers/net/ipn3ke/ipn3ke_representor.c
+++ b/drivers/net/ipn3ke/ipn3ke_representor.c
@@ -2218,9 +2218,6 @@ ipn3ke_rpst_xstats_get
 	struct ipn3ke_rpst_hw_port_stats hw_stats;
 	struct rte_eth_stats stats;
 
-	if (!xstats)
-		return 0;
-
 	if (!ethdev) {
 		IPN3KE_AFU_PMD_ERR("ethernet device to get statistics is NULL");
 		return -EINVAL;
@@ -2258,7 +2255,7 @@ ipn3ke_rpst_xstats_get
 	port_id = atoi(ch);
 
 	count = ipn3ke_rpst_xstats_calc_num();
-	if (n < count)
+	if (xstats == NULL || n < count)
 		return count;
 
 	if (hw->retimer.mac_type == IFPGA_RAWDEV_RETIMER_MAC_TYPE_25GE_25GAUI) {
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v3 05/10] net/mvpp2: adjust retval when xstats is null of get xstats
  2022-05-05  8:02 ` [PATCH v3 00/10] bugfix for ethdev telemetry Chengwen Feng
                     ` (3 preceding siblings ...)
  2022-05-05  8:02   ` [PATCH v3 04/10] net/ipn3ke: " Chengwen Feng
@ 2022-05-05  8:02   ` Chengwen Feng
  2022-05-05  8:02   ` [PATCH v3 06/10] net/axgbe: " Chengwen Feng
                     ` (4 subsequent siblings)
  9 siblings, 0 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-05-05  8:02 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

Many user (e.g. telemetry) invokes rte_eth_xstats_get(port_id, NULL, 0)
to retrieve the required number of elements, but currently mvpp2 PMD
returns zero when xstats is NULL.

This patch adjusts that the return value was the required number of
elements when stats is NULL.

Fixes: a77b5378cd41 ("net/mrvl: add extended statistics")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 drivers/net/mvpp2/mrvl_ethdev.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/mvpp2/mrvl_ethdev.c b/drivers/net/mvpp2/mrvl_ethdev.c
index f86701d248..9781a0a411 100644
--- a/drivers/net/mvpp2/mrvl_ethdev.c
+++ b/drivers/net/mvpp2/mrvl_ethdev.c
@@ -1629,7 +1629,7 @@ mrvl_xstats_get(struct rte_eth_dev *dev,
 	unsigned int i;
 
 	if (!stats)
-		return 0;
+		return RTE_DIM(mrvl_xstats_tbl);
 
 	pp2_ppio_get_statistics(priv->ppio, &ppio_stats, 0);
 	for (i = 0; i < n && i < RTE_DIM(mrvl_xstats_tbl); i++) {
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v3 06/10] net/axgbe: adjust retval when xstats is null of get xstats
  2022-05-05  8:02 ` [PATCH v3 00/10] bugfix for ethdev telemetry Chengwen Feng
                     ` (4 preceding siblings ...)
  2022-05-05  8:02   ` [PATCH v3 05/10] net/mvpp2: " Chengwen Feng
@ 2022-05-05  8:02   ` Chengwen Feng
  2022-05-12 10:00     ` Andrew Rybchenko
  2022-05-05  8:02   ` [PATCH v3 07/10] ethdev: fix memory leak when telemetry xstats Chengwen Feng
                     ` (3 subsequent siblings)
  9 siblings, 1 reply; 54+ messages in thread
From: Chengwen Feng @ 2022-05-05  8:02 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

Many user (e.g. telemetry) invokes rte_eth_xstats_get(port_id, NULL, 0)
to retrieve the required number of elements, but currently axgbe PMD
returns zero when xstats is NULL.

This patch adjusts that the return value was the required number of
elements when stats is NULL.

Fixes: 9d1ef6b2e731 ("net/axgbe: add xstats")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 drivers/net/axgbe/axgbe_ethdev.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/axgbe/axgbe_ethdev.c b/drivers/net/axgbe/axgbe_ethdev.c
index 951da5cc26..f6a3a52430 100644
--- a/drivers/net/axgbe/axgbe_ethdev.c
+++ b/drivers/net/axgbe/axgbe_ethdev.c
@@ -1014,7 +1014,7 @@ axgbe_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *stats,
 	unsigned int i;
 
 	if (!stats)
-		return 0;
+		return AXGBE_XSTATS_COUNT;
 
 	axgbe_read_mmc_stats(pdata);
 
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v3 07/10] ethdev: fix memory leak when telemetry xstats
  2022-05-05  8:02 ` [PATCH v3 00/10] bugfix for ethdev telemetry Chengwen Feng
                     ` (5 preceding siblings ...)
  2022-05-05  8:02   ` [PATCH v3 06/10] net/axgbe: " Chengwen Feng
@ 2022-05-05  8:02   ` Chengwen Feng
  2022-05-05  8:02   ` [PATCH v3 08/10] ethdev: support auto-filled flag when telemetry stats Chengwen Feng
                     ` (2 subsequent siblings)
  9 siblings, 0 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-05-05  8:02 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

The 'eth_xstats' should be freed after setup telemetry dictionary. This
patch fixes it.

Fixes: c190daedb9b1 ("ethdev: add telemetry callbacks")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
---
 lib/ethdev/rte_ethdev.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index ed395a8f54..f26a9bac6d 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -5578,6 +5578,7 @@ eth_dev_handle_port_xstats(const char *cmd __rte_unused,
 	for (i = 0; i < num_xstats; i++)
 		rte_tel_data_add_dict_u64(d, xstat_names[i].name,
 				eth_xstats[i].value);
+	free(eth_xstats);
 	return 0;
 }
 
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v3 08/10] ethdev: support auto-filled flag when telemetry stats
  2022-05-05  8:02 ` [PATCH v3 00/10] bugfix for ethdev telemetry Chengwen Feng
                     ` (6 preceding siblings ...)
  2022-05-05  8:02   ` [PATCH v3 07/10] ethdev: fix memory leak when telemetry xstats Chengwen Feng
@ 2022-05-05  8:02   ` Chengwen Feng
  2022-05-12 10:26     ` Andrew Rybchenko
  2022-05-05  8:02   ` [PATCH v3 09/10] ethdev: fix possible null pointer access Chengwen Feng
  2022-05-05  8:02   ` [PATCH v3 10/10] net/cnxk: fix telemetry " Chengwen Feng
  9 siblings, 1 reply; 54+ messages in thread
From: Chengwen Feng @ 2022-05-05  8:02 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

This patch supports auto-filled queue xstats when telemetry stats.

Fixes: f30e69b41f94 ("ethdev: add device flag to bypass auto-filled queue xstats")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 lib/ethdev/rte_ethdev.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index f26a9bac6d..76037e635b 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -5499,6 +5499,7 @@ eth_dev_handle_port_stats(const char *cmd __rte_unused,
 		struct rte_tel_data *d)
 {
 	struct rte_eth_stats stats;
+	struct rte_eth_dev *dev;
 	int port_id, ret;
 
 	if (params == NULL || strlen(params) == 0 || !isdigit(*params))
@@ -5507,6 +5508,7 @@ eth_dev_handle_port_stats(const char *cmd __rte_unused,
 	port_id = atoi(params);
 	if (!rte_eth_dev_is_valid_port(port_id))
 		return -1;
+	dev = &rte_eth_devices[port_id];
 
 	ret = rte_eth_stats_get(port_id, &stats);
 	if (ret < 0)
@@ -5521,11 +5523,13 @@ eth_dev_handle_port_stats(const char *cmd __rte_unused,
 	ADD_DICT_STAT(stats, ierrors);
 	ADD_DICT_STAT(stats, oerrors);
 	ADD_DICT_STAT(stats, rx_nombuf);
-	eth_dev_add_port_queue_stats(d, stats.q_ipackets, "q_ipackets");
-	eth_dev_add_port_queue_stats(d, stats.q_opackets, "q_opackets");
-	eth_dev_add_port_queue_stats(d, stats.q_ibytes, "q_ibytes");
-	eth_dev_add_port_queue_stats(d, stats.q_obytes, "q_obytes");
-	eth_dev_add_port_queue_stats(d, stats.q_errors, "q_errors");
+	if (dev->data->dev_flags & RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS) {
+		eth_dev_add_port_queue_stats(d, stats.q_ipackets, "q_ipackets");
+		eth_dev_add_port_queue_stats(d, stats.q_opackets, "q_opackets");
+		eth_dev_add_port_queue_stats(d, stats.q_ibytes, "q_ibytes");
+		eth_dev_add_port_queue_stats(d, stats.q_obytes, "q_obytes");
+		eth_dev_add_port_queue_stats(d, stats.q_errors, "q_errors");
+	}
 
 	return 0;
 }
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v3 09/10] ethdev: fix possible null pointer access
  2022-05-05  8:02 ` [PATCH v3 00/10] bugfix for ethdev telemetry Chengwen Feng
                     ` (7 preceding siblings ...)
  2022-05-05  8:02   ` [PATCH v3 08/10] ethdev: support auto-filled flag when telemetry stats Chengwen Feng
@ 2022-05-05  8:02   ` Chengwen Feng
  2022-05-12 10:29     ` Andrew Rybchenko
  2022-05-05  8:02   ` [PATCH v3 10/10] net/cnxk: fix telemetry " Chengwen Feng
  9 siblings, 1 reply; 54+ messages in thread
From: Chengwen Feng @ 2022-05-05  8:02 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

The rte_tel_data_alloc() may return NULL, so the caller should add
judgement for it.

Fixes: 083b0b310b19 ("ethdev: add common stats for telemetry")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 lib/ethdev/rte_ethdev.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index 76037e635b..4a76272722 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -5485,6 +5485,8 @@ eth_dev_add_port_queue_stats(struct rte_tel_data *d, uint64_t *q_stats,
 {
 	int q;
 	struct rte_tel_data *q_data = rte_tel_data_alloc();
+	if (q_data == NULL)
+		return;
 	rte_tel_data_start_array(q_data, RTE_TEL_U64_VAL);
 	for (q = 0; q < RTE_ETHDEV_QUEUE_STAT_CNTRS; q++)
 		rte_tel_data_add_array_u64(q_data, q_stats[q]);
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v3 10/10] net/cnxk: fix telemetry possible null pointer access
  2022-05-05  8:02 ` [PATCH v3 00/10] bugfix for ethdev telemetry Chengwen Feng
                     ` (8 preceding siblings ...)
  2022-05-05  8:02   ` [PATCH v3 09/10] ethdev: fix possible null pointer access Chengwen Feng
@ 2022-05-05  8:02   ` Chengwen Feng
  2022-05-12 10:30     ` Andrew Rybchenko
  9 siblings, 1 reply; 54+ messages in thread
From: Chengwen Feng @ 2022-05-05  8:02 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

The return value of rte_tel_data_alloc() may be null pointer, in this
patch, the null check function is added.

Fixes: 5ea354a1f2cc ("net/cnxk: support telemetry")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 drivers/net/cnxk/cnxk_ethdev_telemetry.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/cnxk/cnxk_ethdev_telemetry.c b/drivers/net/cnxk/cnxk_ethdev_telemetry.c
index 83bc65848c..4fd9048643 100644
--- a/drivers/net/cnxk/cnxk_ethdev_telemetry.c
+++ b/drivers/net/cnxk/cnxk_ethdev_telemetry.c
@@ -49,6 +49,8 @@ ethdev_tel_handle_info(const char *cmd __rte_unused,
 	rte_tel_data_add_dict_int(d, "n_ports", n_ports);
 
 	i_data = rte_tel_data_alloc();
+	if (i_data == NULL)
+		return -ENOMEM;
 	rte_tel_data_start_array(i_data, RTE_TEL_U64_VAL);
 
 	for (i = 0; i < RTE_MAX_ETHPORTS; i++) {
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH v2 2/9] net/hns3: adjust retval when xstats is null of get xstats
  2022-04-28 13:15   ` [PATCH v2 2/9] net/hns3: adjust " Chengwen Feng
@ 2022-05-06  7:56     ` Min Hu (Connor)
  0 siblings, 0 replies; 54+ messages in thread
From: Min Hu (Connor) @ 2022-05-06  7:56 UTC (permalink / raw)
  To: Chengwen Feng, thomas, ferruh.yigit, andrew.rybchenko,
	ndabilpuram, kirankumark, skori, skoteshwar
  Cc: dev

Acked-by: Min Hu (Connor) <humin29@huawei.com>

在 2022/4/28 21:15, Chengwen Feng 写道:
> Many user (e.g. telemetry) invokes rte_eth_xstats_get(port_id, NULL, 0)
> to retrieve the required number of elements, but currently hns3 PMD
> returns zero when xstats is NULL.
> 
> This patch adjusts that the return value was the required number of
> elements when stats is NULL.
> 
> Fixes: 8839c5e202f3 ("net/hns3: support device stats")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
> ---
>   drivers/net/hns3/hns3_stats.c | 7 ++-----
>   1 file changed, 2 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/net/hns3/hns3_stats.c b/drivers/net/hns3/hns3_stats.c
> index 806720faff..4165e22f7f 100644
> --- a/drivers/net/hns3/hns3_stats.c
> +++ b/drivers/net/hns3/hns3_stats.c
> @@ -1020,7 +1020,7 @@ hns3_imissed_stats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
>    * @praram xstats
>    *   A pointer to a table of structure of type *rte_eth_xstat*
>    *   to be filled with device statistics ids and values.
> - *   This parameter can be set to NULL if n is 0.
> + *   If set to NULL, the function returns the required number of elements.
>    * @param n
>    *   The size of the xstats array (number of elements).
>    * @return
> @@ -1041,11 +1041,8 @@ hns3_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
>   	int count;
>   	int ret;
>   
> -	if (xstats == NULL)
> -		return 0;
> -
>   	count = hns3_xstats_calc_num(dev);
> -	if ((int)n < count)
> +	if (xstats == NULL || (int)n < count)
>   		return count;
>   
>   	count = 0;
> 

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH v3 03/10] net/hns3: adjust retval when xstats is null of get xstats
  2022-05-05  8:02   ` [PATCH v3 03/10] net/hns3: adjust retval when xstats is null of get xstats Chengwen Feng
@ 2022-05-12  9:51     ` Andrew Rybchenko
  0 siblings, 0 replies; 54+ messages in thread
From: Andrew Rybchenko @ 2022-05-12  9:51 UTC (permalink / raw)
  To: Chengwen Feng, thomas, ferruh.yigit, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

On 5/5/22 11:02, Chengwen Feng wrote:
> Many user (e.g. telemetry) invokes rte_eth_xstats_get(port_id, NULL, 0)
> to retrieve the required number of elements, but currently hns3 PMD
> returns zero when xstats is NULL.
> 
> This patch adjusts that the return value was the required number of
> elements when stats is NULL.
> 
> Fixes: 8839c5e202f3 ("net/hns3: support device stats")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
> ---
>   drivers/net/hns3/hns3_stats.c | 7 ++-----
>   1 file changed, 2 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/net/hns3/hns3_stats.c b/drivers/net/hns3/hns3_stats.c
> index 806720faff..4165e22f7f 100644
> --- a/drivers/net/hns3/hns3_stats.c
> +++ b/drivers/net/hns3/hns3_stats.c
> @@ -1020,7 +1020,7 @@ hns3_imissed_stats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
>    * @praram xstats
>    *   A pointer to a table of structure of type *rte_eth_xstat*
>    *   to be filled with device statistics ids and values.
> - *   This parameter can be set to NULL if n is 0.
> + *   If set to NULL, the function returns the required number of elements.
>    * @param n
>    *   The size of the xstats array (number of elements).
>    * @return
> @@ -1041,11 +1041,8 @@ hns3_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
>   	int count;
>   	int ret;
>   
> -	if (xstats == NULL)
> -		return 0;
> -

Above lines are OK. ethdev layer should care about it. See
below.

>   	count = hns3_xstats_calc_num(dev);
> -	if ((int)n < count)
> +	if (xstats == NULL || (int)n < count)

but I dislike the change. xstats may be NULL if and only if n
is 0. If so, the extra check for xstats vs NULL is not required
here.

IMHO ethdev must guarantee it. I.e. rte_eth_xstats_get()
implementation in the first patch should be updated to
return -EINVAL if xstats is NULL, but n is not 0.

The major point for me here is to have just one natural key
parameter to make a decision if number of stats should be
returned or we really need to fill xstats in.
n is the parameter. If space is insufficient to return
xstats, return required space. If n is 0, xstats may be NULL,
since we provide no space for values. If we provide some
space for values (n is greater than 0), xstats must be not
NULL.

One more possible improvement in rte_eth_xstats_get()
implementation is to no provide out of xstats array
pointer if n is smaller or equal to number of basic
stats. Of course, space passed to xstats_get will be
zero anyway and xstats pointer should not be used, but
it is still safer to care about it explicitly. I.e. something like

2984 »···»···xcount = (*dev->dev_ops->xstats_get)(dev,
2985 »···»···»···»···     (n > count) ? xstats + count : NULL,
2986 »···»···»···»···     (n > count) ? n - count : 0);

If we guarantee that xstats is not NULL, if n is positive,
extra check for xstats vs NULL will not be required.

>   		return count;
>   
>   	count = 0;


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH v3 06/10] net/axgbe: adjust retval when xstats is null of get xstats
  2022-05-05  8:02   ` [PATCH v3 06/10] net/axgbe: " Chengwen Feng
@ 2022-05-12 10:00     ` Andrew Rybchenko
  0 siblings, 0 replies; 54+ messages in thread
From: Andrew Rybchenko @ 2022-05-12 10:00 UTC (permalink / raw)
  To: Chengwen Feng, thomas, ferruh.yigit, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

On 5/5/22 11:02, Chengwen Feng wrote:
> Many user (e.g. telemetry) invokes rte_eth_xstats_get(port_id, NULL, 0)
> to retrieve the required number of elements, but currently axgbe PMD
> returns zero when xstats is NULL.
> 
> This patch adjusts that the return value was the required number of
> elements when stats is NULL.
> 
> Fixes: 9d1ef6b2e731 ("net/axgbe: add xstats")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
> ---
>   drivers/net/axgbe/axgbe_ethdev.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/net/axgbe/axgbe_ethdev.c b/drivers/net/axgbe/axgbe_ethdev.c
> index 951da5cc26..f6a3a52430 100644
> --- a/drivers/net/axgbe/axgbe_ethdev.c
> +++ b/drivers/net/axgbe/axgbe_ethdev.c
> @@ -1014,7 +1014,7 @@ axgbe_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *stats,
>   	unsigned int i;
>   
>   	if (!stats)

I think the right condition is: n < AXGBE_XSTATS_COUNT
Otherwise the function break contract to return required
number of xstats if space is insufficient.

> -		return 0;
> +		return AXGBE_XSTATS_COUNT;
>   
>   	axgbe_read_mmc_stats(pdata);
>   


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH v3 08/10] ethdev: support auto-filled flag when telemetry stats
  2022-05-05  8:02   ` [PATCH v3 08/10] ethdev: support auto-filled flag when telemetry stats Chengwen Feng
@ 2022-05-12 10:26     ` Andrew Rybchenko
  0 siblings, 0 replies; 54+ messages in thread
From: Andrew Rybchenko @ 2022-05-12 10:26 UTC (permalink / raw)
  To: Chengwen Feng, thomas, ferruh.yigit, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

On 5/5/22 11:02, Chengwen Feng wrote:
> This patch supports auto-filled queue xstats when telemetry stats.
> 
> Fixes: f30e69b41f94 ("ethdev: add device flag to bypass auto-filled queue xstats")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
> ---
>   lib/ethdev/rte_ethdev.c | 14 +++++++++-----
>   1 file changed, 9 insertions(+), 5 deletions(-)
> 
> diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
> index f26a9bac6d..76037e635b 100644
> --- a/lib/ethdev/rte_ethdev.c
> +++ b/lib/ethdev/rte_ethdev.c
> @@ -5499,6 +5499,7 @@ eth_dev_handle_port_stats(const char *cmd __rte_unused,
>   		struct rte_tel_data *d)
>   {
>   	struct rte_eth_stats stats;
> +	struct rte_eth_dev *dev;
>   	int port_id, ret;
>   
>   	if (params == NULL || strlen(params) == 0 || !isdigit(*params))
> @@ -5507,6 +5508,7 @@ eth_dev_handle_port_stats(const char *cmd __rte_unused,
>   	port_id = atoi(params);
>   	if (!rte_eth_dev_is_valid_port(port_id))
>   		return -1;
> +	dev = &rte_eth_devices[port_id];
>   
>   	ret = rte_eth_stats_get(port_id, &stats);
>   	if (ret < 0)
> @@ -5521,11 +5523,13 @@ eth_dev_handle_port_stats(const char *cmd __rte_unused,
>   	ADD_DICT_STAT(stats, ierrors);
>   	ADD_DICT_STAT(stats, oerrors);
>   	ADD_DICT_STAT(stats, rx_nombuf);
> -	eth_dev_add_port_queue_stats(d, stats.q_ipackets, "q_ipackets");
> -	eth_dev_add_port_queue_stats(d, stats.q_opackets, "q_opackets");
> -	eth_dev_add_port_queue_stats(d, stats.q_ibytes, "q_ibytes");
> -	eth_dev_add_port_queue_stats(d, stats.q_obytes, "q_obytes");
> -	eth_dev_add_port_queue_stats(d, stats.q_errors, "q_errors");
> +	if (dev->data->dev_flags & RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS) {

I don't understand it. RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS driver
flag means that driver asks ethdev layer to autofill per-queue
*xstats* (generate names and put values) using per-queue basic
statistics.

Drivers do no set the flag if provide per-queue xstats itself
(to avoid duplication) or do not fill in per-queue basic
xstats (to avoid meaningless/misleading zeros in xstats).

So, absence of the flag does not mean that per-queue basic
statistics are not filled in and should be used as the
guard to include corresponding values in telemetry.

> +		eth_dev_add_port_queue_stats(d, stats.q_ipackets, "q_ipackets");
> +		eth_dev_add_port_queue_stats(d, stats.q_opackets, "q_opackets");
> +		eth_dev_add_port_queue_stats(d, stats.q_ibytes, "q_ibytes");
> +		eth_dev_add_port_queue_stats(d, stats.q_obytes, "q_obytes");
> +		eth_dev_add_port_queue_stats(d, stats.q_errors, "q_errors");
> +	}
>   
>   	return 0;
>   }


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH v3 09/10] ethdev: fix possible null pointer access
  2022-05-05  8:02   ` [PATCH v3 09/10] ethdev: fix possible null pointer access Chengwen Feng
@ 2022-05-12 10:29     ` Andrew Rybchenko
  0 siblings, 0 replies; 54+ messages in thread
From: Andrew Rybchenko @ 2022-05-12 10:29 UTC (permalink / raw)
  To: Chengwen Feng, thomas, ferruh.yigit, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

On 5/5/22 11:02, Chengwen Feng wrote:
> The rte_tel_data_alloc() may return NULL, so the caller should add
> judgement for it.
> 
> Fixes: 083b0b310b19 ("ethdev: add common stats for telemetry")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>

Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH v3 10/10] net/cnxk: fix telemetry possible null pointer access
  2022-05-05  8:02   ` [PATCH v3 10/10] net/cnxk: fix telemetry " Chengwen Feng
@ 2022-05-12 10:30     ` Andrew Rybchenko
  0 siblings, 0 replies; 54+ messages in thread
From: Andrew Rybchenko @ 2022-05-12 10:30 UTC (permalink / raw)
  To: Chengwen Feng, thomas, ferruh.yigit, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

On 5/5/22 11:02, Chengwen Feng wrote:
> The return value of rte_tel_data_alloc() may be null pointer, in this
> patch, the null check function is added.
> 
> Fixes: 5ea354a1f2cc ("net/cnxk: support telemetry")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>

Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH v3 02/10] ethdev: optimize xstats-get API's implementation
  2022-05-05  8:02   ` [PATCH v3 02/10] ethdev: optimize xstats-get API's implementation Chengwen Feng
@ 2022-05-12 10:31     ` Andrew Rybchenko
  0 siblings, 0 replies; 54+ messages in thread
From: Andrew Rybchenko @ 2022-05-12 10:31 UTC (permalink / raw)
  To: Chengwen Feng, thomas, ferruh.yigit, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

On 5/5/22 11:02, Chengwen Feng wrote:
> This patch uses eth_dev_get_xstats_basic_count() to retrieve generic
> statistics count.
> 
> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>

Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v4 0/9] bugfix for ethdev telemetry
  2022-04-16  1:07 [PATCH 0/3] bugfix for ethdev telemetry Chengwen Feng
                   ` (4 preceding siblings ...)
  2022-05-05  8:02 ` [PATCH v3 00/10] bugfix for ethdev telemetry Chengwen Feng
@ 2022-05-13  2:53 ` Chengwen Feng
  2022-05-13  2:53   ` [PATCH v4 1/9] ethdev: specify return value of xstats-get API Chengwen Feng
                     ` (9 more replies)
  5 siblings, 10 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-05-13  2:53 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

This patch set contains nine bugfix for ethdev telemetry.

Chengwen Feng (9):
  ethdev: specify return value of xstats-get API
  ethdev: optimize xstats-get API's implementation
  net/hns3: adjust return value of xstats-get ops
  net/ipn3ke: adjust return value of xstats-get ops
  net/mvpp2: adjust return value of xstats-get ops
  net/axgbe: adjust return value of xstats-get ops
  ethdev: fix memory leak when telemetry xstats
  ethdev: fix possible null pointer access
  net/cnxk: fix telemetry possible null pointer access

---
v4:
* refine the return value definitions of rte_eth_xstats_get() and
  the implementation of related drivers is corrected.
* drop auto-filled flag patch.
v3:
* refine the descriptor of return value when xstats is null of
  rte_eth_xstats_get().
* add patch for optimize xstats-get API's implementation.
v2:
* define return value when xstats is null of get xstats.
* fix more bugs when deepin ethdev telemetry.

 drivers/net/axgbe/axgbe_ethdev.c         |  8 ++++----
 drivers/net/cnxk/cnxk_ethdev_telemetry.c |  2 ++
 drivers/net/hns3/hns3_stats.c            |  9 +++++----
 drivers/net/ipn3ke/ipn3ke_representor.c  |  3 ---
 drivers/net/mvpp2/mrvl_ethdev.c          | 11 ++++++-----
 lib/ethdev/rte_ethdev.c                  | 18 ++++++++----------
 lib/ethdev/rte_ethdev.h                  |  6 +++++-
 7 files changed, 30 insertions(+), 27 deletions(-)

-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v4 1/9] ethdev: specify return value of xstats-get API
  2022-05-13  2:53 ` [PATCH v4 0/9] bugfix for ethdev telemetry Chengwen Feng
@ 2022-05-13  2:53   ` Chengwen Feng
  2022-05-13  2:53   ` [PATCH v4 2/9] ethdev: optimize xstats-get API's implementation Chengwen Feng
                     ` (8 subsequent siblings)
  9 siblings, 0 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-05-13  2:53 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

Currently the value returned when xstats is NULL of rte_eth_xstats_get()
is not specified, some PMDs (eg. hns3/ipn3ke/mvpp2/axgbe) return zero
while others return the required number of elements.

In this patch, special parameter combinations are restricted:
1. specify that xstats is NULL if and only if n is 0.
2. specify that if n is lower than the required number of elements, the
function returns the required number of elements.
3. specify that if n is zero, the xstats must be NULL, the function
returns the required number of elements.

This patch also makes sure that xstats is NULL if n is lower or equal to
the number of basic stats when invoke driver's ops.

Fixes: ce757f5c9a4d ("ethdev: new method to retrieve extended statistics")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 lib/ethdev/rte_ethdev.c | 4 +++-
 lib/ethdev/rte_ethdev.h | 6 +++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index 29a3d80466..d9661bd64f 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -2973,6 +2973,8 @@ rte_eth_xstats_get(uint16_t port_id, struct rte_eth_xstat *xstats,
 	int ret;
 
 	RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
+	if (xstats == NULL && n > 0)
+		return -EINVAL;
 	dev = &rte_eth_devices[port_id];
 
 	nb_rxqs = RTE_MIN(dev->data->nb_rx_queues, RTE_ETHDEV_QUEUE_STAT_CNTRS);
@@ -2989,7 +2991,7 @@ rte_eth_xstats_get(uint16_t port_id, struct rte_eth_xstat *xstats,
 		 * xstats struct.
 		 */
 		xcount = (*dev->dev_ops->xstats_get)(dev,
-				     xstats ? xstats + count : NULL,
+				     (n > count) ? xstats + count : NULL,
 				     (n > count) ? n - count : 0);
 
 		if (xcount < 0)
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index 04cff8ee10..04225bba4d 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -3174,9 +3174,13 @@ int rte_eth_xstats_get_names(uint16_t port_id,
  * @param xstats
  *   A pointer to a table of structure of type *rte_eth_xstat*
  *   to be filled with device statistics ids and values.
- *   This parameter can be set to NULL if n is 0.
+ *   This parameter can be set to NULL if and only if n is 0.
  * @param n
  *   The size of the xstats array (number of elements).
+ *   If lower than the required number of elements, the function returns
+ *   the required number of elements.
+ *   If equal to zero, the xstats must be NULL, the function returns the
+ *   required number of elements.
  * @return
  *   - A positive value lower or equal to n: success. The return value
  *     is the number of entries filled in the stats table.
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v4 2/9] ethdev: optimize xstats-get API's implementation
  2022-05-13  2:53 ` [PATCH v4 0/9] bugfix for ethdev telemetry Chengwen Feng
  2022-05-13  2:53   ` [PATCH v4 1/9] ethdev: specify return value of xstats-get API Chengwen Feng
@ 2022-05-13  2:53   ` Chengwen Feng
  2022-05-13  2:53   ` [PATCH v4 3/9] net/hns3: adjust return value of xstats-get ops Chengwen Feng
                     ` (7 subsequent siblings)
  9 siblings, 0 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-05-13  2:53 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

This patch uses eth_dev_get_xstats_basic_count() to retrieve generic
statistics count.

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
---
 lib/ethdev/rte_ethdev.c | 11 ++---------
 1 file changed, 2 insertions(+), 9 deletions(-)

diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index d9661bd64f..78192c26f7 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -2967,9 +2967,8 @@ rte_eth_xstats_get(uint16_t port_id, struct rte_eth_xstat *xstats,
 	unsigned int n)
 {
 	struct rte_eth_dev *dev;
-	unsigned int count = 0, i;
+	unsigned int count, i;
 	signed int xcount = 0;
-	uint16_t nb_rxqs, nb_txqs;
 	int ret;
 
 	RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
@@ -2977,13 +2976,7 @@ rte_eth_xstats_get(uint16_t port_id, struct rte_eth_xstat *xstats,
 		return -EINVAL;
 	dev = &rte_eth_devices[port_id];
 
-	nb_rxqs = RTE_MIN(dev->data->nb_rx_queues, RTE_ETHDEV_QUEUE_STAT_CNTRS);
-	nb_txqs = RTE_MIN(dev->data->nb_tx_queues, RTE_ETHDEV_QUEUE_STAT_CNTRS);
-
-	/* Return generic statistics */
-	count = RTE_NB_STATS;
-	if (dev->data->dev_flags & RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS)
-		count += (nb_rxqs * RTE_NB_RXQ_STATS) + (nb_txqs * RTE_NB_TXQ_STATS);
+	count = eth_dev_get_xstats_basic_count(dev);
 
 	/* implemented by the driver */
 	if (dev->dev_ops->xstats_get != NULL) {
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v4 3/9] net/hns3: adjust return value of xstats-get ops
  2022-05-13  2:53 ` [PATCH v4 0/9] bugfix for ethdev telemetry Chengwen Feng
  2022-05-13  2:53   ` [PATCH v4 1/9] ethdev: specify return value of xstats-get API Chengwen Feng
  2022-05-13  2:53   ` [PATCH v4 2/9] ethdev: optimize xstats-get API's implementation Chengwen Feng
@ 2022-05-13  2:53   ` Chengwen Feng
  2022-05-13  2:53   ` [PATCH v4 4/9] net/ipn3ke: " Chengwen Feng
                     ` (6 subsequent siblings)
  9 siblings, 0 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-05-13  2:53 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

Many user (e.g. telemetry) invokes rte_eth_xstats_get(port_id, NULL, 0)
to retrieve the required number of elements, but currently hns3 PMD
returns zero when xstats is NULL.

In the previous patch, the framework defines that the required number
of entries should be returned when xstats is NULL and n is zero. And
xstats is NULL if and only if n is zero.

Based on the preceding constraints, this patch removes the logic of
"return zero when xstats is NULL".

Fixes: 8839c5e202f3 ("net/hns3: support device stats")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 drivers/net/hns3/hns3_stats.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/net/hns3/hns3_stats.c b/drivers/net/hns3/hns3_stats.c
index 806720faff..ac1f0d9126 100644
--- a/drivers/net/hns3/hns3_stats.c
+++ b/drivers/net/hns3/hns3_stats.c
@@ -1020,9 +1020,13 @@ hns3_imissed_stats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
  * @praram xstats
  *   A pointer to a table of structure of type *rte_eth_xstat*
  *   to be filled with device statistics ids and values.
- *   This parameter can be set to NULL if n is 0.
+ *   This parameter can be set to NULL if and only if n is 0.
  * @param n
  *   The size of the xstats array (number of elements).
+ *   If lower than the required number of elements, the function returns the
+ *   required number of elements.
+ *   If equal to zero, the xstats parameter must be NULL, the function returns
+ *   the required number of elements.
  * @return
  *   0 on fail, count(The size of the statistics elements) on success.
  */
@@ -1041,9 +1045,6 @@ hns3_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
 	int count;
 	int ret;
 
-	if (xstats == NULL)
-		return 0;
-
 	count = hns3_xstats_calc_num(dev);
 	if ((int)n < count)
 		return count;
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v4 4/9] net/ipn3ke: adjust return value of xstats-get ops
  2022-05-13  2:53 ` [PATCH v4 0/9] bugfix for ethdev telemetry Chengwen Feng
                     ` (2 preceding siblings ...)
  2022-05-13  2:53   ` [PATCH v4 3/9] net/hns3: adjust return value of xstats-get ops Chengwen Feng
@ 2022-05-13  2:53   ` Chengwen Feng
  2022-05-13  2:53   ` [PATCH v4 5/9] net/mvpp2: " Chengwen Feng
                     ` (5 subsequent siblings)
  9 siblings, 0 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-05-13  2:53 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

Many user (e.g. telemetry) invokes rte_eth_xstats_get(port_id, NULL, 0)
to retrieve the required number of elements, but currently ipn3ke PMD
returns zero when xstats is NULL.

In the previous patch, the framework defines that the required number
of entries should be returned when xstats is NULL and n is zero. And
xstats is NULL if and only if n is zero.

Based on the preceding constraints, this patch removes the logic of
"return zero when xstats is NULL".

Fixes: 5a6d883878db ("net/ipn3ke: implement statistics")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 drivers/net/ipn3ke/ipn3ke_representor.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/net/ipn3ke/ipn3ke_representor.c b/drivers/net/ipn3ke/ipn3ke_representor.c
index c9dde1d82e..abbecfdf2e 100644
--- a/drivers/net/ipn3ke/ipn3ke_representor.c
+++ b/drivers/net/ipn3ke/ipn3ke_representor.c
@@ -2218,9 +2218,6 @@ ipn3ke_rpst_xstats_get
 	struct ipn3ke_rpst_hw_port_stats hw_stats;
 	struct rte_eth_stats stats;
 
-	if (!xstats)
-		return 0;
-
 	if (!ethdev) {
 		IPN3KE_AFU_PMD_ERR("ethernet device to get statistics is NULL");
 		return -EINVAL;
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v4 5/9] net/mvpp2: adjust return value of xstats-get ops
  2022-05-13  2:53 ` [PATCH v4 0/9] bugfix for ethdev telemetry Chengwen Feng
                     ` (3 preceding siblings ...)
  2022-05-13  2:53   ` [PATCH v4 4/9] net/ipn3ke: " Chengwen Feng
@ 2022-05-13  2:53   ` Chengwen Feng
  2022-05-13  2:53   ` [PATCH v4 6/9] net/axgbe: " Chengwen Feng
                     ` (4 subsequent siblings)
  9 siblings, 0 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-05-13  2:53 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

Many user (e.g. telemetry) invokes rte_eth_xstats_get(port_id, NULL, 0)
to retrieve the required number of elements, but currently mvpp2 PMD
returns zero when xstats is NULL.

In the previous patch, the framework defines that the required number
of entries should be returned when n is lower than the required number
of entries, and makes sure xstats must not be NULL when n is non-zero.

This patch removes the logic of "return zero when xstats is NULL", and
adds the logic of "return the required number of entries when n is
lower than the required number of entries".

Fixes: a77b5378cd41 ("net/mrvl: add extended statistics")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 drivers/net/mvpp2/mrvl_ethdev.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/net/mvpp2/mrvl_ethdev.c b/drivers/net/mvpp2/mrvl_ethdev.c
index f86701d248..735efb6cfc 100644
--- a/drivers/net/mvpp2/mrvl_ethdev.c
+++ b/drivers/net/mvpp2/mrvl_ethdev.c
@@ -1626,13 +1626,14 @@ mrvl_xstats_get(struct rte_eth_dev *dev,
 {
 	struct mrvl_priv *priv = dev->data->dev_private;
 	struct pp2_ppio_statistics ppio_stats;
-	unsigned int i;
+	unsigned int i, count;
 
-	if (!stats)
-		return 0;
+	count = RTE_DIM(mrvl_xstats_tbl);
+	if (n < count)
+		return count;
 
 	pp2_ppio_get_statistics(priv->ppio, &ppio_stats, 0);
-	for (i = 0; i < n && i < RTE_DIM(mrvl_xstats_tbl); i++) {
+	for (i = 0; i < count; i++) {
 		uint64_t val;
 
 		if (mrvl_xstats_tbl[i].size == sizeof(uint32_t))
@@ -1648,7 +1649,7 @@ mrvl_xstats_get(struct rte_eth_dev *dev,
 		stats[i].value = val;
 	}
 
-	return n;
+	return count;
 }
 
 /**
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v4 6/9] net/axgbe: adjust return value of xstats-get ops
  2022-05-13  2:53 ` [PATCH v4 0/9] bugfix for ethdev telemetry Chengwen Feng
                     ` (4 preceding siblings ...)
  2022-05-13  2:53   ` [PATCH v4 5/9] net/mvpp2: " Chengwen Feng
@ 2022-05-13  2:53   ` Chengwen Feng
  2022-05-13  2:53   ` [PATCH v4 7/9] ethdev: fix memory leak when telemetry xstats Chengwen Feng
                     ` (3 subsequent siblings)
  9 siblings, 0 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-05-13  2:53 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

Many user (e.g. telemetry) invokes rte_eth_xstats_get(port_id, NULL, 0)
to retrieve the required number of elements, but currently axgbe PMD
returns zero when xstats is NULL.

In the previous patch, the framework defines that the required number
of entries should be returned when n is lower than the required number
of entries, and makes sure xstats must not be NULL when n is non-zero.

This patch removes the logic of "return zero when xstats is NULL", and
adds the logic of "return the required number of entries when n is
lower than the required number of entries".

Fixes: 9d1ef6b2e731 ("net/axgbe: add xstats")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 drivers/net/axgbe/axgbe_ethdev.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/net/axgbe/axgbe_ethdev.c b/drivers/net/axgbe/axgbe_ethdev.c
index 951da5cc26..e6822fa711 100644
--- a/drivers/net/axgbe/axgbe_ethdev.c
+++ b/drivers/net/axgbe/axgbe_ethdev.c
@@ -1013,18 +1013,18 @@ axgbe_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *stats,
 	struct axgbe_port *pdata = dev->data->dev_private;
 	unsigned int i;
 
-	if (!stats)
-		return 0;
+	if (n < AXGBE_XSTATS_COUNT)
+		return AXGBE_XSTATS_COUNT;
 
 	axgbe_read_mmc_stats(pdata);
 
-	for (i = 0; i < n && i < AXGBE_XSTATS_COUNT; i++) {
+	for (i = 0; i < AXGBE_XSTATS_COUNT; i++) {
 		stats[i].id = i;
 		stats[i].value = *(u64 *)((uint8_t *)&pdata->mmc_stats +
 				axgbe_xstats_strings[i].offset);
 	}
 
-	return i;
+	return AXGBE_XSTATS_COUNT;
 }
 
 static int
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v4 7/9] ethdev: fix memory leak when telemetry xstats
  2022-05-13  2:53 ` [PATCH v4 0/9] bugfix for ethdev telemetry Chengwen Feng
                     ` (5 preceding siblings ...)
  2022-05-13  2:53   ` [PATCH v4 6/9] net/axgbe: " Chengwen Feng
@ 2022-05-13  2:53   ` Chengwen Feng
  2022-05-13  2:53   ` [PATCH v4 8/9] ethdev: fix possible null pointer access Chengwen Feng
                     ` (2 subsequent siblings)
  9 siblings, 0 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-05-13  2:53 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

The 'eth_xstats' should be freed after setup telemetry dictionary. This
patch fixes it.

Fixes: c190daedb9b1 ("ethdev: add telemetry callbacks")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
---
 lib/ethdev/rte_ethdev.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index 78192c26f7..1ae686a7aa 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -5580,6 +5580,7 @@ eth_dev_handle_port_xstats(const char *cmd __rte_unused,
 	for (i = 0; i < num_xstats; i++)
 		rte_tel_data_add_dict_u64(d, xstat_names[i].name,
 				eth_xstats[i].value);
+	free(eth_xstats);
 	return 0;
 }
 
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v4 8/9] ethdev: fix possible null pointer access
  2022-05-13  2:53 ` [PATCH v4 0/9] bugfix for ethdev telemetry Chengwen Feng
                     ` (6 preceding siblings ...)
  2022-05-13  2:53   ` [PATCH v4 7/9] ethdev: fix memory leak when telemetry xstats Chengwen Feng
@ 2022-05-13  2:53   ` Chengwen Feng
  2022-05-13  2:53   ` [PATCH v4 9/9] net/cnxk: fix telemetry " Chengwen Feng
  2022-05-16  8:43   ` [PATCH v4 0/9] bugfix for ethdev telemetry Morten Brørup
  9 siblings, 0 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-05-13  2:53 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

The rte_tel_data_alloc() may return NULL, so the caller should add
judgement for it.

Fixes: 083b0b310b19 ("ethdev: add common stats for telemetry")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
---
 lib/ethdev/rte_ethdev.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index 1ae686a7aa..60c4361256 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -5487,6 +5487,8 @@ eth_dev_add_port_queue_stats(struct rte_tel_data *d, uint64_t *q_stats,
 {
 	int q;
 	struct rte_tel_data *q_data = rte_tel_data_alloc();
+	if (q_data == NULL)
+		return;
 	rte_tel_data_start_array(q_data, RTE_TEL_U64_VAL);
 	for (q = 0; q < RTE_ETHDEV_QUEUE_STAT_CNTRS; q++)
 		rte_tel_data_add_array_u64(q_data, q_stats[q]);
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v4 9/9] net/cnxk: fix telemetry possible null pointer access
  2022-05-13  2:53 ` [PATCH v4 0/9] bugfix for ethdev telemetry Chengwen Feng
                     ` (7 preceding siblings ...)
  2022-05-13  2:53   ` [PATCH v4 8/9] ethdev: fix possible null pointer access Chengwen Feng
@ 2022-05-13  2:53   ` Chengwen Feng
  2022-05-16  8:43   ` [PATCH v4 0/9] bugfix for ethdev telemetry Morten Brørup
  9 siblings, 0 replies; 54+ messages in thread
From: Chengwen Feng @ 2022-05-13  2:53 UTC (permalink / raw)
  To: thomas, ferruh.yigit, andrew.rybchenko, ndabilpuram, kirankumark,
	skori, skoteshwar
  Cc: mb, stephen, dev

The return value of rte_tel_data_alloc() may be null pointer, in this
patch, the null check function is added.

Fixes: 5ea354a1f2cc ("net/cnxk: support telemetry")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
---
 drivers/net/cnxk/cnxk_ethdev_telemetry.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/cnxk/cnxk_ethdev_telemetry.c b/drivers/net/cnxk/cnxk_ethdev_telemetry.c
index 83bc65848c..4fd9048643 100644
--- a/drivers/net/cnxk/cnxk_ethdev_telemetry.c
+++ b/drivers/net/cnxk/cnxk_ethdev_telemetry.c
@@ -49,6 +49,8 @@ ethdev_tel_handle_info(const char *cmd __rte_unused,
 	rte_tel_data_add_dict_int(d, "n_ports", n_ports);
 
 	i_data = rte_tel_data_alloc();
+	if (i_data == NULL)
+		return -ENOMEM;
 	rte_tel_data_start_array(i_data, RTE_TEL_U64_VAL);
 
 	for (i = 0; i < RTE_MAX_ETHPORTS; i++) {
-- 
2.33.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* RE: [PATCH v4 0/9] bugfix for ethdev telemetry
  2022-05-13  2:53 ` [PATCH v4 0/9] bugfix for ethdev telemetry Chengwen Feng
                     ` (8 preceding siblings ...)
  2022-05-13  2:53   ` [PATCH v4 9/9] net/cnxk: fix telemetry " Chengwen Feng
@ 2022-05-16  8:43   ` Morten Brørup
  9 siblings, 0 replies; 54+ messages in thread
From: Morten Brørup @ 2022-05-16  8:43 UTC (permalink / raw)
  To: Chengwen Feng, thomas, ferruh.yigit, andrew.rybchenko,
	ndabilpuram, kirankumark, skori, skoteshwar
  Cc: stephen, dev

> From: Chengwen Feng [mailto:fengchengwen@huawei.com]
> Sent: Friday, 13 May 2022 04.54
> 
> This patch set contains nine bugfix for ethdev telemetry.
> 
> Chengwen Feng (9):
>   ethdev: specify return value of xstats-get API
>   ethdev: optimize xstats-get API's implementation
>   net/hns3: adjust return value of xstats-get ops
>   net/ipn3ke: adjust return value of xstats-get ops
>   net/mvpp2: adjust return value of xstats-get ops
>   net/axgbe: adjust return value of xstats-get ops
>   ethdev: fix memory leak when telemetry xstats
>   ethdev: fix possible null pointer access
>   net/cnxk: fix telemetry possible null pointer access
> 
> ---

Series-acked-by: Morten Brørup <mb@smartsharesystems.com>


^ permalink raw reply	[flat|nested] 54+ messages in thread

end of thread, other threads:[~2022-05-16  8:44 UTC | newest]

Thread overview: 54+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-16  1:07 [PATCH 0/3] bugfix for ethdev telemetry Chengwen Feng
2022-04-16  1:07 ` [PATCH 1/3] ethdev: fix telemetry xstats return null with some PMDs Chengwen Feng
2022-04-16  1:38   ` Stephen Hemminger
2022-04-21  6:49     ` Andrew Rybchenko
2022-04-24  3:44       ` fengchengwen
2022-04-25 10:16         ` Morten Brørup
2022-04-28 13:38           ` fengchengwen
2022-04-28 13:53             ` Morten Brørup
2022-04-16  1:07 ` [PATCH 2/3] ethdev: fix memory leak when telemetry xstats Chengwen Feng
2022-04-21  6:51   ` Andrew Rybchenko
2022-04-21  8:09   ` David Marchand
2022-04-21  9:03     ` Bruce Richardson
2022-04-22  8:14       ` David Marchand
2022-04-16  1:07 ` [PATCH 3/3] net/cnxk: fix telemetry possible null pointer access Chengwen Feng
2022-04-28 13:15 ` [PATCH v2 0/9] bugfix for ethdev telemetry Chengwen Feng
2022-04-28 13:15   ` [PATCH v2 1/9] ethdev: define retval when xstats is null of get xstats Chengwen Feng
2022-05-04 10:32     ` Andrew Rybchenko
2022-04-28 13:15   ` [PATCH v2 2/9] net/hns3: adjust " Chengwen Feng
2022-05-06  7:56     ` Min Hu (Connor)
2022-04-28 13:15   ` [PATCH v2 3/9] net/ipn3ke: " Chengwen Feng
2022-04-28 13:15   ` [PATCH v2 4/9] net/mvpp2: " Chengwen Feng
2022-04-28 13:15   ` [PATCH v2 5/9] net/axgbe: " Chengwen Feng
2022-04-28 13:15   ` [PATCH v2 6/9] ethdev: fix memory leak when telemetry xstats Chengwen Feng
2022-04-28 13:15   ` [PATCH v2 7/9] ethdev: support auto-filled flag when telemetry stats Chengwen Feng
2022-04-28 13:15   ` [PATCH v2 8/9] ethdev: fix possible null pointer access Chengwen Feng
2022-04-28 13:16   ` [PATCH v2 9/9] net/cnxk: fix telemetry " Chengwen Feng
2022-05-05  8:02 ` [PATCH v3 00/10] bugfix for ethdev telemetry Chengwen Feng
2022-05-05  8:02   ` [PATCH v3 01/10] ethdev: define retval when xstats is null of get xstats Chengwen Feng
2022-05-05  8:02   ` [PATCH v3 02/10] ethdev: optimize xstats-get API's implementation Chengwen Feng
2022-05-12 10:31     ` Andrew Rybchenko
2022-05-05  8:02   ` [PATCH v3 03/10] net/hns3: adjust retval when xstats is null of get xstats Chengwen Feng
2022-05-12  9:51     ` Andrew Rybchenko
2022-05-05  8:02   ` [PATCH v3 04/10] net/ipn3ke: " Chengwen Feng
2022-05-05  8:02   ` [PATCH v3 05/10] net/mvpp2: " Chengwen Feng
2022-05-05  8:02   ` [PATCH v3 06/10] net/axgbe: " Chengwen Feng
2022-05-12 10:00     ` Andrew Rybchenko
2022-05-05  8:02   ` [PATCH v3 07/10] ethdev: fix memory leak when telemetry xstats Chengwen Feng
2022-05-05  8:02   ` [PATCH v3 08/10] ethdev: support auto-filled flag when telemetry stats Chengwen Feng
2022-05-12 10:26     ` Andrew Rybchenko
2022-05-05  8:02   ` [PATCH v3 09/10] ethdev: fix possible null pointer access Chengwen Feng
2022-05-12 10:29     ` Andrew Rybchenko
2022-05-05  8:02   ` [PATCH v3 10/10] net/cnxk: fix telemetry " Chengwen Feng
2022-05-12 10:30     ` Andrew Rybchenko
2022-05-13  2:53 ` [PATCH v4 0/9] bugfix for ethdev telemetry Chengwen Feng
2022-05-13  2:53   ` [PATCH v4 1/9] ethdev: specify return value of xstats-get API Chengwen Feng
2022-05-13  2:53   ` [PATCH v4 2/9] ethdev: optimize xstats-get API's implementation Chengwen Feng
2022-05-13  2:53   ` [PATCH v4 3/9] net/hns3: adjust return value of xstats-get ops Chengwen Feng
2022-05-13  2:53   ` [PATCH v4 4/9] net/ipn3ke: " Chengwen Feng
2022-05-13  2:53   ` [PATCH v4 5/9] net/mvpp2: " Chengwen Feng
2022-05-13  2:53   ` [PATCH v4 6/9] net/axgbe: " Chengwen Feng
2022-05-13  2:53   ` [PATCH v4 7/9] ethdev: fix memory leak when telemetry xstats Chengwen Feng
2022-05-13  2:53   ` [PATCH v4 8/9] ethdev: fix possible null pointer access Chengwen Feng
2022-05-13  2:53   ` [PATCH v4 9/9] net/cnxk: fix telemetry " Chengwen Feng
2022-05-16  8:43   ` [PATCH v4 0/9] bugfix for ethdev telemetry Morten Brørup

DPDK patches and discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://inbox.dpdk.org/dev/0 dev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dev dev/ http://inbox.dpdk.org/dev \
		dev@dpdk.org
	public-inbox-index dev

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dev


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git