Commit 37e6827a authored by Pawel Wodkowski's avatar Pawel Wodkowski Committed by Jim Harris
Browse files

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: default avatarPawel 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: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-by: default avatarChen Wang <chenx.wang@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 911c12c6
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -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;