[dpdk-dev,13/22] net/bonding: enable port detach on secondary process
Checks
Commit Message
Previously, detach port on secondary process will mess primary
process and cause same device can't be attached again, by take
advantage of rte_eth_release_port_local, we can support this with
minor change.
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
---
drivers/net/bonding/rte_eth_bond_pmd.c | 11 +++++++++++
1 file changed, 11 insertions(+)
Comments
On Thu, Jun 7, 2018 at 8:38 AM, Qi Zhang <qi.z.zhang@intel.com> wrote:
> Previously, detach port on secondary process will mess primary
> process and cause same device can't be attached again, by take
> advantage of rte_eth_release_port_local, we can support this with
> minor change.
>
This commit message needs some work. Otherwise, I think this particular
patch is fine.
>
> Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
> ---
> drivers/net/bonding/rte_eth_bond_pmd.c | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c
> b/drivers/net/bonding/rte_eth_bond_pmd.c
> index 02d94b1b1..1221f62b2 100644
> --- a/drivers/net/bonding/rte_eth_bond_pmd.c
> +++ b/drivers/net/bonding/rte_eth_bond_pmd.c
> @@ -3065,6 +3065,7 @@ bond_probe(struct rte_vdev_device *dev)
> }
> /* TODO: request info from primary to set up Rx and Tx */
> eth_dev->dev_ops = &default_dev_ops;
> + eth_dev->device = &dev->device;
> rte_eth_dev_probing_finish(eth_dev);
> return 0;
> }
> @@ -3171,6 +3172,16 @@ bond_remove(struct rte_vdev_device *dev)
> if (eth_dev == NULL)
> return -ENODEV;
>
> + if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
> + /* detach device on local pprocess only */
>
process?
> + if (strlen(rte_vdev_device_args(dev)) == 0)
> + return rte_eth_dev_release_port_local(eth_dev);
> + /**
> + * else this is a private device for current process
> + * so continue with normal detach scenario
> + */
> + }
> +
> RTE_ASSERT(eth_dev->device == &dev->device);
>
> internals = eth_dev->data->dev_private;
> --
> 2.13.6
>
>
@@ -3065,6 +3065,7 @@ bond_probe(struct rte_vdev_device *dev)
}
/* TODO: request info from primary to set up Rx and Tx */
eth_dev->dev_ops = &default_dev_ops;
+ eth_dev->device = &dev->device;
rte_eth_dev_probing_finish(eth_dev);
return 0;
}
@@ -3171,6 +3172,16 @@ bond_remove(struct rte_vdev_device *dev)
if (eth_dev == NULL)
return -ENODEV;
+ if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
+ /* detach device on local pprocess only */
+ if (strlen(rte_vdev_device_args(dev)) == 0)
+ return rte_eth_dev_release_port_local(eth_dev);
+ /**
+ * else this is a private device for current process
+ * so continue with normal detach scenario
+ */
+ }
+
RTE_ASSERT(eth_dev->device == &dev->device);
internals = eth_dev->data->dev_private;