[dpdk-dev] net/bonding: remove all slaves on close

Message ID 1491479991-26802-1-git-send-email-i.maximets@samsung.com (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Ilya Maximets April 6, 2017, 11:59 a.m. UTC
  Some applications like OVS knows nothing about the
device type and wants to use same API to work with
all of them. But bond_pmd, unlike other pmds, requires
additional step (removing of all the slaves) before
closing the device.

In fact that bond_pmd automatically adds all the
devices from kvargs to bonding on configuration it
also should remove all of them on close.

This change is intended to have the same API for physical
and virtual devices. It allows us to handle virtual
devices in OVS in a common way.

Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
---
 drivers/net/bonding/rte_eth_bond_pmd.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
  

Comments

Doherty, Declan April 14, 2017, 9:06 a.m. UTC | #1
On 06/04/17 12:59, Ilya Maximets wrote:
> Some applications like OVS knows nothing about the
> device type and wants to use same API to work with
> all of them. But bond_pmd, unlike other pmds, requires
> additional step (removing of all the slaves) before
> closing the device.
>
> In fact that bond_pmd automatically adds all the
> devices from kvargs to bonding on configuration it
> also should remove all of them on close.
>
> This change is intended to have the same API for physical
> and virtual devices. It allows us to handle virtual
> devices in OVS in a common way.
>
> Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
> ---
...
>


Acked-by: Declan Doherty <declan.doherty@intel.com>
  
Ferruh Yigit April 14, 2017, 9:39 a.m. UTC | #2
On 4/14/2017 10:06 AM, Declan Doherty wrote:
> On 06/04/17 12:59, Ilya Maximets wrote:
>> Some applications like OVS knows nothing about the
>> device type and wants to use same API to work with
>> all of them. But bond_pmd, unlike other pmds, requires
>> additional step (removing of all the slaves) before
>> closing the device.
>>
>> In fact that bond_pmd automatically adds all the
>> devices from kvargs to bonding on configuration it
>> also should remove all of them on close.
>>
>> This change is intended to have the same API for physical
>> and virtual devices. It allows us to handle virtual
>> devices in OVS in a common way.
>>
>> Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
>> ---
> ...
>>
> 
> 
> Acked-by: Declan Doherty <declan.doherty@intel.com>

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

Patch

diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
index 77d3bee..c398fdb 100644
--- a/drivers/net/bonding/rte_eth_bond_pmd.c
+++ b/drivers/net/bonding/rte_eth_bond_pmd.c
@@ -1659,7 +1659,22 @@  void
 bond_ethdev_close(struct rte_eth_dev *dev)
 {
 	struct bond_dev_private *internals = dev->data->dev_private;
+	uint8_t bond_port_id = internals->port_id;
+	int skipped = 0;
 
+	RTE_LOG(INFO, EAL, "Closing bonded device %s\n", dev->data->name);
+	while (internals->slave_count != skipped) {
+		uint8_t port_id = internals->slaves[skipped].port_id;
+
+		rte_eth_dev_stop(port_id);
+
+		if (rte_eth_bond_slave_remove(bond_port_id, port_id) != 0) {
+			RTE_LOG(ERR, EAL,
+				"Failed to remove port %d from bonded device "
+				"%s\n", port_id, dev->data->name);
+			skipped++;
+		}
+	}
 	bond_ethdev_free_queues(dev);
 	rte_bitmap_reset(internals->vlan_filter_bmp);
 }