On 8/1/2018 2:44 PM, Chas Williams wrote:
On Wed, Aug 1, 2018 at 9:25 AM Radu Nicolau <radu.nico...@intel.com
<mailto:radu.nico...@intel.com>> wrote:
When a bonding port is stopped also stop and deactivate all slaves.
Otherwise slaves will be still listed as active.
I have to think about this for a bit. The last time I tried this I
had a problem
because nothing activated the slaves again in 802.3ad mode because we
use an external state machine.
I did test it for mode 4, stop and start seems to be working as
expected. From what is see, activate_slave will be either called
directly or indirectly through the LSC when port is restarted.
Fixes: 69bce062132b ("net/bonding: do not clear active slave count")
Cc: sta...@dpdk.org <mailto:sta...@dpdk.org>
Signed-off-by: Radu Nicolau <radu.nico...@intel.com
<mailto:radu.nico...@intel.com>>
---
drivers/net/bonding/rte_eth_bond_pmd.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c
b/drivers/net/bonding/rte_eth_bond_pmd.c
index 16105cb..960140c 100644
--- a/drivers/net/bonding/rte_eth_bond_pmd.c
+++ b/drivers/net/bonding/rte_eth_bond_pmd.c
@@ -2229,12 +2229,15 @@ bond_ethdev_stop(struct rte_eth_dev *eth_dev)
tlb_last_obytets[internals->active_slaves[i]] = 0;
}
- internals->link_status_polling_enabled = 0;
- for (i = 0; i < internals->slave_count; i++)
- internals->slaves[i].last_link_status = 0;
-
eth_dev->data->dev_link.link_status = ETH_LINK_DOWN;
eth_dev->data->dev_started = 0;
+
+ internals->link_status_polling_enabled = 0;
+ for (i = 0; i < internals->slave_count; i++) {
+ internals->slaves[i].last_link_status = 0;
+ rte_eth_dev_stop(internals->slaves[i].port_id);
+ deactivate_slave(eth_dev,
internals->slaves[i].port_id);
+ }
}
void
--
2.7.5