patches for DPDK stable branches
 help / color / mirror / Atom feed
* [PATCH] net/bonding: fix iavf bond device query stats
@ 2023-06-08  7:26 Kaiwen Deng
  2023-06-08 15:41 ` Stephen Hemminger
  0 siblings, 1 reply; 4+ messages in thread
From: Kaiwen Deng @ 2023-06-08  7:26 UTC (permalink / raw)
  To: dev
  Cc: stable, qiming.yang, yidingx.zhou, Kaiwen Deng, Chas Williams,
	Min Hu (Connor),
	Declan Doherty, Daniel Mrzyglod

If the rte_eth_stats_get function does not work properly,
the update function of the slave device does not work
properly When device is bonded as BONDING_MODE_TLB mode.

This commit adds handling for functions that do not get
stats properly.

Fixes: 7c76a747e68c ("bond: add mode 5")
Cc: stable@dpdk.org

Signed-off-by: Kaiwen Deng <kaiwenx.deng@intel.com>
---
 drivers/net/bonding/rte_eth_bond_pmd.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
index f0c4f7d26b..edce621496 100644
--- a/drivers/net/bonding/rte_eth_bond_pmd.c
+++ b/drivers/net/bonding/rte_eth_bond_pmd.c
@@ -894,6 +894,7 @@ bond_ethdev_update_tlb_slave_cb(void *arg)
 	uint8_t update_stats = 0;
 	uint16_t slave_id;
 	uint16_t i;
+	int ret;
 
 	internals->slave_update_idx++;
 
@@ -903,7 +904,10 @@ bond_ethdev_update_tlb_slave_cb(void *arg)
 
 	for (i = 0; i < internals->active_slave_count; i++) {
 		slave_id = internals->active_slaves[i];
-		rte_eth_stats_get(slave_id, &slave_stats);
+		ret = rte_eth_stats_get(slave_id, &slave_stats);
+		if (ret)
+			goto OUT;
+
 		tx_bytes = slave_stats.obytes - tlb_last_obytets[slave_id];
 		bandwidth_left(slave_id, tx_bytes,
 				internals->slave_update_idx, &bwg_array[i]);
@@ -922,6 +926,7 @@ bond_ethdev_update_tlb_slave_cb(void *arg)
 	for (i = 0; i < slave_count; i++)
 		internals->tlb_slaves_order[i] = bwg_array[i].slave;
 
+OUT:
 	rte_eal_alarm_set(REORDER_PERIOD_MS * 1000, bond_ethdev_update_tlb_slave_cb,
 			(struct bond_dev_private *)internals);
 }
-- 
2.34.1


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

* Re: [PATCH] net/bonding: fix iavf bond device query stats
  2023-06-08  7:26 [PATCH] net/bonding: fix iavf bond device query stats Kaiwen Deng
@ 2023-06-08 15:41 ` Stephen Hemminger
  2023-06-09  1:38   ` lihuisong (C)
  0 siblings, 1 reply; 4+ messages in thread
From: Stephen Hemminger @ 2023-06-08 15:41 UTC (permalink / raw)
  To: Kaiwen Deng
  Cc: dev, stable, qiming.yang, yidingx.zhou, Chas Williams,
	Min Hu (Connor),
	Declan Doherty, Daniel Mrzyglod

On Thu,  8 Jun 2023 15:26:36 +0800
Kaiwen Deng <kaiwenx.deng@intel.com> wrote:

> If the rte_eth_stats_get function does not work properly,
> the update function of the slave device does not work
> properly When device is bonded as BONDING_MODE_TLB mode.
> 
> This commit adds handling for functions that do not get
> stats properly.
> 
> Fixes: 7c76a747e68c ("bond: add mode 5")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Kaiwen Deng <kaiwenx.deng@intel.com>
> ---
>  drivers/net/bonding/rte_eth_bond_pmd.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
> index f0c4f7d26b..edce621496 100644
> --- a/drivers/net/bonding/rte_eth_bond_pmd.c
> +++ b/drivers/net/bonding/rte_eth_bond_pmd.c
> @@ -894,6 +894,7 @@ bond_ethdev_update_tlb_slave_cb(void *arg)
>  	uint8_t update_stats = 0;
>  	uint16_t slave_id;
>  	uint16_t i;
> +	int ret;
>  
>  	internals->slave_update_idx++;
>  
> @@ -903,7 +904,10 @@ bond_ethdev_update_tlb_slave_cb(void *arg)
>  
>  	for (i = 0; i < internals->active_slave_count; i++) {
>  		slave_id = internals->active_slaves[i];
> -		rte_eth_stats_get(slave_id, &slave_stats);
> +		ret = rte_eth_stats_get(slave_id, &slave_stats);
> +		if (ret)
> +			goto OUT;
> +
>  		tx_bytes = slave_stats.obytes - tlb_last_obytets[slave_id];
>  		bandwidth_left(slave_id, tx_bytes,
>  				internals->slave_update_idx, &bwg_array[i]);
> @@ -922,6 +926,7 @@ bond_ethdev_update_tlb_slave_cb(void *arg)
>  	for (i = 0; i < slave_count; i++)
>  		internals->tlb_slaves_order[i] = bwg_array[i].slave;
>  
> +OUT:
>  	rte_eal_alarm_set(REORDER_PERIOD_MS * 1000, bond_ethdev_update_tlb_slave_cb,
>  			(struct bond_dev_private *)internals);
>  }

Why is stats get failing on a device, looks like the real bug is there?
Better to fix the buggy driver. Other usages might already be affected.

Silently ignoring the error without logging is also not good.
Lastly, DPDK coding style is to use lower case for goto labels.

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

* Re: [PATCH] net/bonding: fix iavf bond device query stats
  2023-06-08 15:41 ` Stephen Hemminger
@ 2023-06-09  1:38   ` lihuisong (C)
  2023-06-23 13:13     ` Ferruh Yigit
  0 siblings, 1 reply; 4+ messages in thread
From: lihuisong (C) @ 2023-06-09  1:38 UTC (permalink / raw)
  To: Stephen Hemminger, Kaiwen Deng
  Cc: dev, stable, qiming.yang, yidingx.zhou, Chas Williams,
	Min Hu (Connor),
	Declan Doherty, Daniel Mrzyglod


在 2023/6/8 23:41, Stephen Hemminger 写道:
> On Thu,  8 Jun 2023 15:26:36 +0800
> Kaiwen Deng <kaiwenx.deng@intel.com> wrote:
>
>> If the rte_eth_stats_get function does not work properly,
>> the update function of the slave device does not work
>> properly When device is bonded as BONDING_MODE_TLB mode.
>>
>> This commit adds handling for functions that do not get
>> stats properly.
>>
>> Fixes: 7c76a747e68c ("bond: add mode 5")
>> Cc: stable@dpdk.org
>>
>> Signed-off-by: Kaiwen Deng <kaiwenx.deng@intel.com>
>> ---
>>   drivers/net/bonding/rte_eth_bond_pmd.c | 7 ++++++-
>>   1 file changed, 6 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
>> index f0c4f7d26b..edce621496 100644
>> --- a/drivers/net/bonding/rte_eth_bond_pmd.c
>> +++ b/drivers/net/bonding/rte_eth_bond_pmd.c
>> @@ -894,6 +894,7 @@ bond_ethdev_update_tlb_slave_cb(void *arg)
>>   	uint8_t update_stats = 0;
>>   	uint16_t slave_id;
>>   	uint16_t i;
>> +	int ret;
>>   
>>   	internals->slave_update_idx++;
>>   
>> @@ -903,7 +904,10 @@ bond_ethdev_update_tlb_slave_cb(void *arg)
>>   
>>   	for (i = 0; i < internals->active_slave_count; i++) {
>>   		slave_id = internals->active_slaves[i];
>> -		rte_eth_stats_get(slave_id, &slave_stats);
>> +		ret = rte_eth_stats_get(slave_id, &slave_stats);
>> +		if (ret)
>> +			goto OUT;
>> +
>>   		tx_bytes = slave_stats.obytes - tlb_last_obytets[slave_id];
>>   		bandwidth_left(slave_id, tx_bytes,
>>   				internals->slave_update_idx, &bwg_array[i]);
>> @@ -922,6 +926,7 @@ bond_ethdev_update_tlb_slave_cb(void *arg)
>>   	for (i = 0; i < slave_count; i++)
>>   		internals->tlb_slaves_order[i] = bwg_array[i].slave;
>>   
>> +OUT:
>>   	rte_eal_alarm_set(REORDER_PERIOD_MS * 1000, bond_ethdev_update_tlb_slave_cb,
>>   			(struct bond_dev_private *)internals);
>>   }
> Why is stats get failing on a device, looks like the real bug is there?
> Better to fix the buggy driver. Other usages might already be affected.
I think this is the case if the driver happens to have an abnormal event 
and do reset.
So here need to handle this fairlure.
Additionally, suggest that this API in bond_ethdev_stats_get should do 
the same things.
> Silently ignoring the error without logging is also not good.
> Lastly, DPDK coding style is to use lower case for goto labels.
+1
> .

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

* Re: [PATCH] net/bonding: fix iavf bond device query stats
  2023-06-09  1:38   ` lihuisong (C)
@ 2023-06-23 13:13     ` Ferruh Yigit
  0 siblings, 0 replies; 4+ messages in thread
From: Ferruh Yigit @ 2023-06-23 13:13 UTC (permalink / raw)
  To: lihuisong (C), Stephen Hemminger, Kaiwen Deng, Qi Z Zhang
  Cc: dev, stable, qiming.yang, yidingx.zhou, Chas Williams,
	Min Hu (Connor),
	Declan Doherty, Daniel Mrzyglod

On 6/9/2023 2:38 AM, lihuisong (C) wrote:
> 
> 在 2023/6/8 23:41, Stephen Hemminger 写道:
>> On Thu,  8 Jun 2023 15:26:36 +0800
>> Kaiwen Deng <kaiwenx.deng@intel.com> wrote:
>>
>>> If the rte_eth_stats_get function does not work properly,
>>> the update function of the slave device does not work
>>> properly When device is bonded as BONDING_MODE_TLB mode.
>>>
>>> This commit adds handling for functions that do not get
>>> stats properly.
>>>
>>> Fixes: 7c76a747e68c ("bond: add mode 5")
>>> Cc: stable@dpdk.org
>>>
>>> Signed-off-by: Kaiwen Deng <kaiwenx.deng@intel.com>
>>> ---
>>>   drivers/net/bonding/rte_eth_bond_pmd.c | 7 ++++++-
>>>   1 file changed, 6 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c
>>> b/drivers/net/bonding/rte_eth_bond_pmd.c
>>> index f0c4f7d26b..edce621496 100644
>>> --- a/drivers/net/bonding/rte_eth_bond_pmd.c
>>> +++ b/drivers/net/bonding/rte_eth_bond_pmd.c
>>> @@ -894,6 +894,7 @@ bond_ethdev_update_tlb_slave_cb(void *arg)
>>>       uint8_t update_stats = 0;
>>>       uint16_t slave_id;
>>>       uint16_t i;
>>> +    int ret;
>>>         internals->slave_update_idx++;
>>>   @@ -903,7 +904,10 @@ bond_ethdev_update_tlb_slave_cb(void *arg)
>>>         for (i = 0; i < internals->active_slave_count; i++) {
>>>           slave_id = internals->active_slaves[i];
>>> -        rte_eth_stats_get(slave_id, &slave_stats);
>>> +        ret = rte_eth_stats_get(slave_id, &slave_stats);
>>> +        if (ret)
>>> +            goto OUT;
>>> +
>>>           tx_bytes = slave_stats.obytes - tlb_last_obytets[slave_id];
>>>           bandwidth_left(slave_id, tx_bytes,
>>>                   internals->slave_update_idx, &bwg_array[i]);
>>> @@ -922,6 +926,7 @@ bond_ethdev_update_tlb_slave_cb(void *arg)
>>>       for (i = 0; i < slave_count; i++)
>>>           internals->tlb_slaves_order[i] = bwg_array[i].slave;
>>>   +OUT:
>>>       rte_eal_alarm_set(REORDER_PERIOD_MS * 1000,
>>> bond_ethdev_update_tlb_slave_cb,
>>>               (struct bond_dev_private *)internals);
>>>   }
>> Why is stats get failing on a device, looks like the real bug is there?
>> Better to fix the buggy driver. Other usages might already be affected.
> I think this is the case if the driver happens to have an abnormal event
> and do reset.
> So here need to handle this fairlure.
>

Agree with Huisong, this is a DPDK API that can return error, so
checking return value is reasonable.


@Kaiwen, back to Stephen's point, the patch title mentions from iavf, is
there anything special with iavf driver that fails to get stats?
Main concern is, if this patch to hide a defect in iavf, or is driver
only mentioned because problem observed with iavf driver?

If this is not iavf specific issue, we can continue with patch,
in that case can you please make a new version with following changes:

1- Add error check for both usage of 'rte_eth_stats_get()' in bonding
2- Make label lowercase
3- Print a log message on failure

Thanks,
ferruh

> Additionally, suggest that this API in bond_ethdev_stats_get should do
> the same things.
>> Silently ignoring the error without logging is also not good.
>> Lastly, DPDK coding style is to use lower case for goto labels.
> +1
>> .


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

end of thread, other threads:[~2023-06-23 13:13 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-06-08  7:26 [PATCH] net/bonding: fix iavf bond device query stats Kaiwen Deng
2023-06-08 15:41 ` Stephen Hemminger
2023-06-09  1:38   ` lihuisong (C)
2023-06-23 13:13     ` Ferruh Yigit

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).