net/bonding: fix reset active slave

Message ID 1550491163-23616-1-git-send-email-hari.kumarx.vemula@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers
Series net/bonding: fix reset active slave |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/mellanox-Performance-Testing success Performance Testing PASS
ci/intel-Performance-Testing success Performance Testing PASS
ci/Intel-compilation success Compilation OK

Commit Message

Hari Kumar Vemula Feb. 18, 2019, 11:59 a.m. UTC
  test_alb_reply_from_client test fails due to incorrect active slave
array's index. This was due to invalid active slave count.

Count of internals->active_slave is not updated even when active slave
is deactivated.
Hence active slave count always keeps incrementing beyond the actual
active slaves.

Fix is to set the internals->active_slave to starting index 0 whenever
it exceeds the number of slaves in active slave list and also update
the active slave count during slave de-activation.

Fixes: e1110e977648 ("net/bonding: fix Rx slave fairness")
Cc: stable@dpdk.org

Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com>
---
 drivers/net/bonding/rte_eth_bond_api.c | 6 ++++++
 drivers/net/bonding/rte_eth_bond_pmd.c | 6 +++---
 2 files changed, 9 insertions(+), 3 deletions(-)
  

Comments

Radu Nicolau Feb. 18, 2019, 3:58 p.m. UTC | #1
On 2/18/2019 11:59 AM, Hari Kumar Vemula wrote:
> test_alb_reply_from_client test fails due to incorrect active slave
> array's index. This was due to invalid active slave count.
>
> Count of internals->active_slave is not updated even when active slave
> is deactivated.
> Hence active slave count always keeps incrementing beyond the actual
> active slaves.
>
> Fix is to set the internals->active_slave to starting index 0 whenever
> it exceeds the number of slaves in active slave list and also update
> the active slave count during slave de-activation.
>
> Fixes: e1110e977648 ("net/bonding: fix Rx slave fairness")
> Cc: stable@dpdk.org
>
> Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com>
> ---
>
Acked-by: Radu Nicolau <radu.nicolau@intel.com 
<mailto:radu.nicolau@intel.com>>
  
Ferruh Yigit Feb. 20, 2019, 12:33 p.m. UTC | #2
On 2/18/2019 3:58 PM, Radu Nicolau wrote:
> 
> 
> On 2/18/2019 11:59 AM, Hari Kumar Vemula wrote:
>> test_alb_reply_from_client test fails due to incorrect active slave
>> array's index. This was due to invalid active slave count.
>>
>> Count of internals->active_slave is not updated even when active slave
>> is deactivated.
>> Hence active slave count always keeps incrementing beyond the actual
>> active slaves.
>>
>> Fix is to set the internals->active_slave to starting index 0 whenever
>> it exceeds the number of slaves in active slave list and also update
>> the active slave count during slave de-activation.
>>
>> Fixes: e1110e977648 ("net/bonding: fix Rx slave fairness")
>> Cc: stable@dpdk.org
>>
>> Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com>
>> ---
>>
> Acked-by: Radu Nicolau <radu.nicolau@intel.com 
> <mailto:radu.nicolau@intel.com>>

Hi Radu, Hari,

There is another bonding patch, can you please check how related are they and if
are these fixing same root cause:

net/bonding: avoid the next active slave going out of bound
https://patches.dpdk.org/patch/49573/
  
Radu Nicolau Feb. 20, 2019, 2:56 p.m. UTC | #3
On 2/20/2019 12:33 PM, Ferruh Yigit wrote:
> On 2/18/2019 3:58 PM, Radu Nicolau wrote:
>>
>> On 2/18/2019 11:59 AM, Hari Kumar Vemula wrote:
>>> test_alb_reply_from_client test fails due to incorrect active slave
>>> array's index. This was due to invalid active slave count.
>>>
>>> Count of internals->active_slave is not updated even when active slave
>>> is deactivated.
>>> Hence active slave count always keeps incrementing beyond the actual
>>> active slaves.
>>>
>>> Fix is to set the internals->active_slave to starting index 0 whenever
>>> it exceeds the number of slaves in active slave list and also update
>>> the active slave count during slave de-activation.
>>>
>>> Fixes: e1110e977648 ("net/bonding: fix Rx slave fairness")
>>> Cc: stable@dpdk.org
>>>
>>> Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com>
>>> ---
>>>
>> Acked-by: Radu Nicolau <radu.nicolau@intel.com
>> <mailto:radu.nicolau@intel.com>>
> Hi Radu, Hari,
>
> There is another bonding patch, can you please check how related are they and if
> are these fixing same root cause:
>
> net/bonding: avoid the next active slave going out of bound
> https://patches.dpdk.org/patch/49573/
>
Hi, it's a similar fix for the same root cause, but this one covers more 
(or all) situations that can cause active_slave to go out of bounds.
  
Hyong Youb Kim (hyonkim) Feb. 20, 2019, 3:16 p.m. UTC | #4
On Wed, Feb 20, 2019 at 02:56:36PM +0000, Radu Nicolau wrote:
> 
> 
> On 2/20/2019 12:33 PM, Ferruh Yigit wrote:
> > On 2/18/2019 3:58 PM, Radu Nicolau wrote:
> > > 
> > > On 2/18/2019 11:59 AM, Hari Kumar Vemula wrote:
> > > > test_alb_reply_from_client test fails due to incorrect active slave
> > > > array's index. This was due to invalid active slave count.
> > > > 
> > > > Count of internals->active_slave is not updated even when active slave
> > > > is deactivated.
> > > > Hence active slave count always keeps incrementing beyond the actual
> > > > active slaves.
> > > > 
> > > > Fix is to set the internals->active_slave to starting index 0 whenever
> > > > it exceeds the number of slaves in active slave list and also update
> > > > the active slave count during slave de-activation.
> > > > 
> > > > Fixes: e1110e977648 ("net/bonding: fix Rx slave fairness")
> > > > Cc: stable@dpdk.org
> > > > 
> > > > Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com>
> > > > ---
> > > > 
> > > Acked-by: Radu Nicolau <radu.nicolau@intel.com
> > > <mailto:radu.nicolau@intel.com>>
> > Hi Radu, Hari,
> > 
> > There is another bonding patch, can you please check how related are they and if
> > are these fixing same root cause:
> > 
> > net/bonding: avoid the next active slave going out of bound
> > https://patches.dpdk.org/patch/49573/
> > 
> Hi, it's a similar fix for the same root cause, but this one covers more (or
> all) situations that can cause active_slave to go out of bounds.

If it covers more cases, please go with the new patch and drop mine. I
just want to see the issue fixed :-)

Thanks.
-Hyong
  
Chas Williams Feb. 22, 2019, 1:52 a.m. UTC | #5
On 2/20/19 10:16 AM, Hyong Youb Kim wrote:
> On Wed, Feb 20, 2019 at 02:56:36PM +0000, Radu Nicolau wrote:
>>
>>
>> On 2/20/2019 12:33 PM, Ferruh Yigit wrote:
>>> On 2/18/2019 3:58 PM, Radu Nicolau wrote:
>>>>
>>>> On 2/18/2019 11:59 AM, Hari Kumar Vemula wrote:
>>>>> test_alb_reply_from_client test fails due to incorrect active slave
>>>>> array's index. This was due to invalid active slave count.
>>>>>
>>>>> Count of internals->active_slave is not updated even when active slave
>>>>> is deactivated.
>>>>> Hence active slave count always keeps incrementing beyond the actual
>>>>> active slaves.
>>>>>
>>>>> Fix is to set the internals->active_slave to starting index 0 whenever
>>>>> it exceeds the number of slaves in active slave list and also update
>>>>> the active slave count during slave de-activation.
>>>>>
>>>>> Fixes: e1110e977648 ("net/bonding: fix Rx slave fairness")
>>>>> Cc: stable@dpdk.org
>>>>>
>>>>> Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com>
>>>>> ---
>>>>>
>>>> Acked-by: Radu Nicolau <radu.nicolau@intel.com

Acked-by: Chas Williams <chas3@att.com>

>>>> <mailto:radu.nicolau@intel.com>>
>>> Hi Radu, Hari,
>>>
>>> There is another bonding patch, can you please check how related are they and if
>>> are these fixing same root cause:
>>>
>>> net/bonding: avoid the next active slave going out of bound
>>> https://patches.dpdk.org/patch/49573/
>>>
>> Hi, it's a similar fix for the same root cause, but this one covers more (or
>> all) situations that can cause active_slave to go out of bounds.
> 
> If it covers more cases, please go with the new patch and drop mine. I
> just want to see the issue fixed :-)

Yes, it does cover a few more cases. There really isn't any coordination
between slave activation/deactivation and the rx/tx burst routines. So
checking at the beginning or the end of the various routines is about
the same.

> Thanks.
> -Hyong
>
  
Ferruh Yigit Feb. 22, 2019, 1:57 p.m. UTC | #6
On 2/22/2019 1:52 AM, Chas Williams wrote:
> 
> 
> On 2/20/19 10:16 AM, Hyong Youb Kim wrote:
>> On Wed, Feb 20, 2019 at 02:56:36PM +0000, Radu Nicolau wrote:
>>>
>>>
>>> On 2/20/2019 12:33 PM, Ferruh Yigit wrote:
>>>> On 2/18/2019 3:58 PM, Radu Nicolau wrote:
>>>>>
>>>>> On 2/18/2019 11:59 AM, Hari Kumar Vemula wrote:
>>>>>> test_alb_reply_from_client test fails due to incorrect active slave
>>>>>> array's index. This was due to invalid active slave count.
>>>>>>
>>>>>> Count of internals->active_slave is not updated even when active slave
>>>>>> is deactivated.
>>>>>> Hence active slave count always keeps incrementing beyond the actual
>>>>>> active slaves.
>>>>>>
>>>>>> Fix is to set the internals->active_slave to starting index 0 whenever
>>>>>> it exceeds the number of slaves in active slave list and also update
>>>>>> the active slave count during slave de-activation.
>>>>>>
>>>>>> Fixes: e1110e977648 ("net/bonding: fix Rx slave fairness")
>>>>>> Cc: stable@dpdk.org
>>>>>>
>>>>>> Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com>
>>>>>> ---
>>>>>>
>>>>> Acked-by: Radu Nicolau <radu.nicolau@intel.com
> 
> Acked-by: Chas Williams <chas3@att.com>

Applied to dpdk-next-net/master, thanks.
  

Patch

diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c
index e5e146540..ac084c4fd 100644
--- a/drivers/net/bonding/rte_eth_bond_api.c
+++ b/drivers/net/bonding/rte_eth_bond_api.c
@@ -129,6 +129,12 @@  deactivate_slave(struct rte_eth_dev *eth_dev, uint16_t port_id)
 	RTE_ASSERT(active_count < RTE_DIM(internals->active_slaves));
 	internals->active_slave_count = active_count;
 
+	/* Resetting active_slave when reaches to max
+	 * no of slaves in active list
+	 */
+	if (internals->active_slave >= active_count)
+		internals->active_slave = 0;
+
 	if (eth_dev->data->dev_started) {
 		if (internals->mode == BONDING_MODE_8023AD) {
 			bond_mode_8023ad_start(eth_dev);
diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
index 23cec2549..319215c0b 100644
--- a/drivers/net/bonding/rte_eth_bond_pmd.c
+++ b/drivers/net/bonding/rte_eth_bond_pmd.c
@@ -84,7 +84,7 @@  bond_ethdev_rx_burst(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
 			active_slave = 0;
 	}
 
-	if (++internals->active_slave == slave_count)
+	if (++internals->active_slave >= slave_count)
 		internals->active_slave = 0;
 	return num_rx_total;
 }
@@ -288,7 +288,7 @@  bond_ethdev_rx_burst_8023ad_fast_queue(void *queue, struct rte_mbuf **bufs,
 			active_slave = 0;
 	}
 
-	if (++internals->active_slave == slave_count)
+	if (++internals->active_slave >= slave_count)
 		internals->active_slave = 0;
 
 	return num_rx_total;
@@ -474,7 +474,7 @@  bond_ethdev_rx_burst_8023ad(void *queue, struct rte_mbuf **bufs,
 			idx = 0;
 	}
 
-	if (++internals->active_slave == slave_count)
+	if (++internals->active_slave >= slave_count)
 		internals->active_slave = 0;
 
 	return num_rx_total;