net/bonding: fix reset active slave
Checks
Commit Message
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
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>>
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/
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.
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
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
>
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.
@@ -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);
@@ -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;