diff --git a/lib/vhost/rte_vhost/vhost_user.c b/lib/vhost/rte_vhost/vhost_user.c index 2acf08849..9aef88c9b 100644 --- a/lib/vhost/rte_vhost/vhost_user.c +++ b/lib/vhost/rte_vhost/vhost_user.c @@ -584,6 +584,7 @@ vhost_setup_mem_table(struct virtio_net *dev) { struct VhostUserMemory memory = dev->mem_table; struct rte_vhost_mem_region *reg; + struct vhost_virtqueue *vq; void *mmap_addr; uint64_t mmap_size; uint64_t mmap_offset; @@ -597,6 +598,17 @@ vhost_setup_mem_table(struct virtio_net *dev) dev->mem = NULL; } + for (i = 0; i < dev->nr_vring; i++) { + vq = dev->virtqueue[i]; + /* Those addresses won't be valid anymore in host address space + * after setting new mem table. Initiator need to resend these + * addresses. + */ + vq->desc = NULL; + vq->avail = NULL; + vq->used = NULL; + } + dev->nr_guest_pages = 0; if (!dev->guest_pages) { dev->max_guest_pages = 8;