net/bnxt: modify port DB to handle more info
[dpdk.git] / lib / librte_vhost / vhost_user.c
index 4ca8728..6039a8f 100644 (file)
@@ -1070,6 +1070,13 @@ vhost_user_set_mem_table(struct virtio_net **pdev, struct VhostUserMsg *msg,
        }
 
        if (dev->mem) {
+               if (dev->flags & VIRTIO_DEV_VDPA_CONFIGURED) {
+                       struct rte_vdpa_device *vdpa_dev = dev->vdpa_dev;
+
+                       if (vdpa_dev && vdpa_dev->ops->dev_close)
+                               vdpa_dev->ops->dev_close(dev->vid);
+                       dev->flags &= ~VIRTIO_DEV_VDPA_CONFIGURED;
+               }
                free_mem_region(dev);
                rte_free(dev->mem);
                dev->mem = NULL;
@@ -1612,6 +1619,12 @@ vhost_user_set_vring_call(struct virtio_net **pdev, struct VhostUserMsg *msg,
                "vring call idx:%d file:%d\n", file.index, file.fd);
 
        vq = dev->virtqueue[file.index];
+
+       if (vq->ready) {
+               vhost_user_notify_queue_state(dev, file.index, 0);
+               vq->ready = 0;
+       }
+
        if (vq->callfd >= 0)
                close(vq->callfd);
 
@@ -1870,6 +1883,11 @@ vhost_user_set_vring_kick(struct virtio_net **pdev, struct VhostUserMsg *msg,
                                dev->vid, file.index, 1);
        }
 
+       if (vq->ready) {
+               vhost_user_notify_queue_state(dev, file.index, 0);
+               vq->ready = 0;
+       }
+
        if (vq->kickfd >= 0)
                close(vq->kickfd);
        vq->kickfd = file.fd;