X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_eal%2Fcommon%2Feal_common_vdev.c;h=7d6e54f44693fcec27ecf16b2431c3fa6dc56119;hb=38b636b7cc53ca6649b639bef3b1912e8828a45b;hp=67cb3975352915128ac01f758762e282891b09d7;hpb=7d299777ecee75bbc4314b92009a9d7daf87c462;p=dpdk.git diff --git a/lib/librte_eal/common/eal_common_vdev.c b/lib/librte_eal/common/eal_common_vdev.c index 67cb397535..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); } @@ -69,12 +71,20 @@ rte_eal_vdev_init(const char *name, const char *args) /* * 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,12 +103,20 @@ rte_eal_vdev_uninit(const char *name) /* * 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);