On 5/31/2018 5:13 PM, Radu Nicolau wrote: > > > On 5/31/2018 4:36 PM, Ferruh Yigit wrote: >> On 5/31/2018 4:34 PM, Ferruh Yigit wrote: >>> On 5/31/2018 3:34 PM, Radu Nicolau wrote: >>> >>> I can see you just prefix "fix" to the title without updating it :) >>> >>> What about following one: >>> "net/bonding: fix slave add for mode 4" ? > Great, I'll use it for v3 :) > >>> >>>> Add a call to rte_eth_link_get_nowait on every slave to update >>>> the internal link status struct. Otherwise slave add will fail >>>> for mode 4 if the ports are all stopped but only one of them checked. >>> What is the link related expectation from slaves in mode 4? > To be identical across all ports >>> >>> What does "if the ports are all stopped but only one of them checked" mean, >>> why >>> checking only one of them? > This is the behavior of testpmd, stop getting the link status after the > first down port; but this should not affect bonding, so there is no need > to update testpmd.
I see, when this link updating happens in this bonding issue context? When bonding device created? Should we update testpmd behavior too? > >>> >>>> Fixes: b77d21cc2364 ("ethdev: add link status get/set helper functions") >>>> Bugzilla entry: https://dpdk.org/tracker/show_bug.cgi?id=52 >> Bugzilla ID: 52 >> >> btw, can you please send new version as reply to previous version? > Sure. > >> >>>> Signed-off-by: Radu Nicolau <radu.nico...@intel.com> >>>> --- >>>> v2: add fix and Bugzilla references >>>> >>>> drivers/net/bonding/rte_eth_bond_api.c | 2 ++ >>>> 1 file changed, 2 insertions(+) >>>> >>>> diff --git a/drivers/net/bonding/rte_eth_bond_api.c >>>> b/drivers/net/bonding/rte_eth_bond_api.c >>>> index d558df8..cad08b9 100644 >>>> --- a/drivers/net/bonding/rte_eth_bond_api.c >>>> +++ b/drivers/net/bonding/rte_eth_bond_api.c >>>> @@ -296,6 +296,8 @@ __eth_bond_slave_add_lock_free(uint16_t >>>> bonded_port_id, uint16_t slave_port_id) >>>> return -1; >>>> } >>>> >>>> + rte_eth_link_get_nowait(slave_port_id, &link_props); >>>> + >>> The error seems in link_properties_valid(), does it make sense to get link >>> info >>> inside that function before link checks? > Not really, as one might expect that link_properties_valid will only > test the struct rte_eth_link *slave_link argument, not update it. Fair enough, I just thought to be sure the tested link is up to date, but that function seems only called by __eth_bond_slave_add_lock_free() which you are updating, so this is ok. > >>> >>>> slave_add(internals, slave_eth_dev); >>>> >>>> /* We need to store slaves reta_size to be able to synchronize RETA for >>>> all >>>> >