+ struct rte_vdpa_device *cur_dev, *tmp_dev;
+ int ret = -1;
+
+ rte_spinlock_lock(&vdpa_device_list_lock);
+ TAILQ_FOREACH_SAFE(cur_dev, &vdpa_device_list, next, tmp_dev) {
+ if (dev != cur_dev)
+ continue;
+
+ TAILQ_REMOVE(&vdpa_device_list, dev, next);
+ rte_free(dev);
+ ret = 0;
+ break;
+ }
+ rte_spinlock_unlock(&vdpa_device_list_lock);
+
+ return ret;