Thread (488 messages) 488 messages, 14 authors, 2018-10-16
STALE2800d

[PATCH v7 14/19] net/pcap: enable port detach on secondary process

From: Qi Zhang <hidden>
Date: 2018-06-28 12:57:00
Subsystem: networking drivers, the rest · Maintainers: Andrew Lunn, "David S. Miller", Eric Dumazet, Jakub Kicinski, Paolo Abeni, Linus Torvalds

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 <redacted>
---
 drivers/net/pcap/rte_eth_pcap.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c
index 6bd4a7d79..6cc20c2b2 100644
--- a/drivers/net/pcap/rte_eth_pcap.c
+++ b/drivers/net/pcap/rte_eth_pcap.c
@@ -925,6 +925,7 @@ pmd_pcap_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;
 	}
@@ -1016,6 +1017,7 @@ static int
 pmd_pcap_remove(struct rte_vdev_device *dev)
 {
 	struct rte_eth_dev *eth_dev = NULL;
+	const char *name;
 
 	PMD_LOG(INFO, "Closing pcap ethdev on numa socket %d",
 			rte_socket_id());
@@ -1023,11 +1025,22 @@ pmd_pcap_remove(struct rte_vdev_device *dev)
 	if (!dev)
 		return -1;
 
+	name = rte_vdev_device_name(dev);
 	/* reserve an ethdev entry */
-	eth_dev = rte_eth_dev_allocated(rte_vdev_device_name(dev));
+	eth_dev = rte_eth_dev_allocated(name);
 	if (eth_dev == NULL)
 		return -1;
 
+	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
+		 */
+	}
+
 	rte_free(eth_dev->data->dev_private);
 
 	rte_eth_dev_release_port(eth_dev);
-- 
2.13.6
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help