On 6/26/20 3:27 PM, Maxime Coquelin wrote:
> -rte_vdpa_unregister_device(struct rte_vdpa_device *vdev)
> +rte_vdpa_unregister_device(struct rte_vdpa_device *dev)
>  {
> -     int i;
> +     struct rte_vdpa_device *cur_dev, *tmp_dev;
> +     int ret = -1;
>  
> -     for (i = 0; i < MAX_VHOST_DEVICE; i++) {
> -             if (vdev != &vdpa_devices[i])
> +     rte_spinlock_lock(&vdpa_device_list_lock);
> +     TAILQ_FOREACH_SAFE(cur_dev, &vdpa_device_list, next, tmp_dev) {
> +             if (dev != cur_dev)
>                       continue;
>  
> -             memset(vdev, 0, sizeof(struct rte_vdpa_device));
> +             TAILQ_REMOVE(&vdpa_device_list, dev, next);
> +             rte_free(dev);
>               vdpa_device_num--;
> -
> -             return 0;
> +             ret = 0;
> +             break;
>       }
> +     rte_spinlock_lock(&vdpa_device_list_lock);

I missed Adrian's comment about the double lock here in v2.
I'll post a v4 fixing it.

Note to self: call this API in vdpa example.

Maxime
> -     return -1;
> +     return ret;
>  }
>  

Reply via email to