vhost: clear desc, avail and used addresses on setting new mem table

This fixes queue handling for QEMU 2.12 which is sending new memory
table but resetting only some queues

Fixes #339

Change-Id: Ic971725261720d7459e49a4f14bc15c2f2a77b1a
Signed-off-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
Reviewed-on: https://review.gerrithub.io/420372
Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Chen Wang <chenx.wang@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
Pawel Wodkowski 2018-07-25 20:09:03 +02:00 committed by Jim Harris
parent 911c12c657
commit 37e6827a85

View File

@ -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;