Query internal by vid instead of "ifname", to avoid the dependency of virtio_net struct.
Signed-off-by: Yuanhan Liu <yuanhan.liu at linux.intel.com> --- drivers/net/vhost/rte_eth_vhost.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c index 63538c1..290fd9e 100644 --- a/drivers/net/vhost/rte_eth_vhost.c +++ b/drivers/net/vhost/rte_eth_vhost.c @@ -86,6 +86,7 @@ struct vhost_queue { }; struct pmd_internal { + int vid; char *dev_name; char *iface_name; uint16_t max_queues; @@ -194,20 +195,17 @@ eth_dev_configure(struct rte_eth_dev *dev __rte_unused) } static inline struct internal_list * -find_internal_resource(char *ifname) +find_internal_resource(int vid) { int found = 0; struct internal_list *list; struct pmd_internal *internal; - if (ifname == NULL) - return NULL; - pthread_mutex_lock(&internal_list_lock); TAILQ_FOREACH(list, &internal_list, next) { internal = list->eth_dev->data->dev_private; - if (!strcmp(internal->iface_name, ifname)) { + if (internal->vid == vid) { found = 1; break; } @@ -238,14 +236,15 @@ new_device(struct virtio_net *dev) return -1; } - list = find_internal_resource(dev->ifname); + list = find_internal_resource(dev->vid); if (list == NULL) { - RTE_LOG(INFO, PMD, "Invalid device name\n"); + RTE_LOG(INFO, PMD, "Invalid vid %d\n", dev->vid); return -1; } eth_dev = list->eth_dev; internal = eth_dev->data->dev_private; + internal->vid = dev->vid; #ifdef RTE_LIBRTE_VHOST_NUMA ret = get_mempolicy(&newnode, NULL, 0, dev, @@ -371,9 +370,9 @@ vring_state_changed(struct virtio_net *dev, uint16_t vring, int enable) return -1; } - list = find_internal_resource(dev->ifname); + list = find_internal_resource(dev->vid); if (list == NULL) { - RTE_LOG(ERR, PMD, "Invalid interface name: %s\n", dev->ifname); + RTE_LOG(ERR, PMD, "Invalid vid %d\n", dev->vid); return -1; } @@ -884,7 +883,7 @@ rte_pmd_vhost_devuninit(const char *name) if (internal == NULL) return -ENODEV; - list = find_internal_resource(internal->iface_name); + list = find_internal_resource(internal->vid); if (list == NULL) return -ENODEV; -- 1.9.0