X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_eal%2Fcommon%2Feal_common_vdev.c;h=7d6e54f44693fcec27ecf16b2431c3fa6dc56119;hb=2eed820fd4fdea456103402e0ad13f955321e6cc;hp=462517fbbc7cc41497b11deaf3713058e5142f32;hpb=a16040453968e0b397cf1bc4ce3e2b25d3deb561;p=dpdk.git diff --git a/lib/librte_eal/common/eal_common_vdev.c b/lib/librte_eal/common/eal_common_vdev.c index 462517fbbc..7d6e54f446 100644 --- a/lib/librte_eal/common/eal_common_vdev.c +++ b/lib/librte_eal/common/eal_common_vdev.c @@ -48,12 +48,14 @@ void rte_eal_vdrv_register(struct rte_vdev_driver *driver) { TAILQ_INSERT_TAIL(&vdev_driver_list, driver, next); + rte_eal_driver_register(&driver->driver); } /* unregister a driver */ void rte_eal_vdrv_unregister(struct rte_vdev_driver *driver) { + rte_eal_driver_unregister(&driver->driver); TAILQ_REMOVE(&vdev_driver_list, driver, next); } @@ -66,18 +68,23 @@ rte_eal_vdev_init(const char *name, const char *args) return -EINVAL; TAILQ_FOREACH(driver, &vdev_driver_list, next) { - if (driver->driver.type != PMD_VDEV) - continue; - /* * search a driver prefix in virtual device name. * For example, if the driver is pcap PMD, driver->name - * will be "eth_pcap", but "name" will be "eth_pcapN". + * will be "net_pcap", but "name" will be "net_pcapN". * So use strncmp to compare. */ if (!strncmp(driver->driver.name, name, strlen(driver->driver.name))) - return driver->driver.init(name, args); + return driver->probe(name, args); + } + + /* Give new names precedence over aliases. */ + TAILQ_FOREACH(driver, &vdev_driver_list, next) { + if (driver->driver.alias && + !strncmp(driver->driver.alias, name, + strlen(driver->driver.alias))) + return driver->probe(name, args); } RTE_LOG(ERR, EAL, "no driver found for %s\n", name); @@ -93,18 +100,23 @@ rte_eal_vdev_uninit(const char *name) return -EINVAL; TAILQ_FOREACH(driver, &vdev_driver_list, next) { - if (driver->driver.type != PMD_VDEV) - continue; - /* * search a driver prefix in virtual device name. * For example, if the driver is pcap PMD, driver->name - * will be "eth_pcap", but "name" will be "eth_pcapN". + * will be "net_pcap", but "name" will be "net_pcapN". * So use strncmp to compare. */ if (!strncmp(driver->driver.name, name, strlen(driver->driver.name))) - return driver->driver.uninit(name); + return driver->remove(name); + } + + /* Give new names precedence over aliases. */ + TAILQ_FOREACH(driver, &vdev_driver_list, next) { + if (driver->driver.alias && + !strncmp(driver->driver.alias, name, + strlen(driver->driver.alias))) + return driver->remove(name); } RTE_LOG(ERR, EAL, "no driver found for %s\n", name);