| 317 | } |
| 318 | |
| 319 | int |
| 320 | rte_vdev_init(const char *name, const char *args) |
| 321 | { |
| 322 | struct rte_vdev_device *dev; |
| 323 | int ret; |
| 324 | |
| 325 | rte_spinlock_recursive_lock(&vdev_device_list_lock); |
| 326 | ret = insert_vdev(name, args, &dev, true); |
| 327 | if (ret == 0) { |
| 328 | ret = vdev_probe_all_drivers(dev); |
| 329 | if (ret) { |
| 330 | if (ret > 0) |
| 331 | VDEV_LOG(ERR, "no driver found for %s", name); |
| 332 | /* If fails, remove it from vdev list */ |
| 333 | TAILQ_REMOVE(&vdev_device_list, dev, next); |
| 334 | rte_devargs_remove(dev->device.devargs); |
| 335 | free(dev); |
| 336 | } |
| 337 | } |
| 338 | rte_spinlock_recursive_unlock(&vdev_device_list_lock); |
| 339 | return ret; |
| 340 | } |
| 341 | |
| 342 | static int |
| 343 | vdev_remove_driver(struct rte_vdev_device *dev) |