[v2,20/22] net/tap: 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_private, we can support this
with minor change.
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
---
drivers/net/tap/rte_eth_tap.c | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
Comments
> On Jun 20, 2018, at 9:00 PM, 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_private, we can support this
> with minor change.
>
> Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
> ---
> drivers/net/tap/rte_eth_tap.c | 17 +++++++++++++++--
> 1 file changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
> index df396bfde..bb5f20b01 100644
> --- a/drivers/net/tap/rte_eth_tap.c
> +++ b/drivers/net/tap/rte_eth_tap.c
> @@ -1759,6 +1759,7 @@ rte_pmd_tap_probe(struct rte_vdev_device *dev)
> }
> /* TODO: request info from primary to set up Rx and Tx */
> eth_dev->dev_ops = &ops;
> + eth_dev->device = &dev->device;
> rte_eth_dev_probing_finish(eth_dev);
> return 0;
> }
> @@ -1827,12 +1828,24 @@ rte_pmd_tap_remove(struct rte_vdev_device *dev)
> {
> struct rte_eth_dev *eth_dev = NULL;
> struct pmd_internals *internals;
> + const char *name;
> int i;
>
> + name = rte_vdev_device_name(dev);
> /* find the ethdev entry */
> - eth_dev = rte_eth_dev_allocated(rte_vdev_device_name(dev));
> + eth_dev = rte_eth_dev_allocated(name);
> if (!eth_dev)
> - return 0;
> + 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_private(eth_dev);
> + /**
> + * else this is a private device for current process
> + * so continue with normal detach scenario
> + */
> + }
Acked-by: Keith Wiles<keith.wiles@intel.com> for this patch of the tap PMD.
>
> internals = eth_dev->data->dev_private;
>
> --
> 2.13.6
>
Regards,
Keith
@@ -1759,6 +1759,7 @@ rte_pmd_tap_probe(struct rte_vdev_device *dev)
}
/* TODO: request info from primary to set up Rx and Tx */
eth_dev->dev_ops = &ops;
+ eth_dev->device = &dev->device;
rte_eth_dev_probing_finish(eth_dev);
return 0;
}
@@ -1827,12 +1828,24 @@ rte_pmd_tap_remove(struct rte_vdev_device *dev)
{
struct rte_eth_dev *eth_dev = NULL;
struct pmd_internals *internals;
+ const char *name;
int i;
+ name = rte_vdev_device_name(dev);
/* find the ethdev entry */
- eth_dev = rte_eth_dev_allocated(rte_vdev_device_name(dev));
+ eth_dev = rte_eth_dev_allocated(name);
if (!eth_dev)
- return 0;
+ 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_private(eth_dev);
+ /**
+ * else this is a private device for current process
+ * so continue with normal detach scenario
+ */
+ }
internals = eth_dev->data->dev_private;