aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorXueming Li <xuemingl@nvidia.com>2021-10-08 16:02:15 +0800
committerMichael S. Tsirkin <mst@redhat.com>2021-10-20 04:37:55 -0400
commita1ed9ef1de87c3e86ff68589604298ec90875a14 (patch)
treedf51a1d1ca2f4b853034028b42a8af52bdeac73e /hw
parentc47d4fa0c8f0a28614cc0ce849dc9bbaa5c6878f (diff)
downloadqemu-a1ed9ef1de87c3e86ff68589604298ec90875a14.zip
qemu-a1ed9ef1de87c3e86ff68589604298ec90875a14.tar.gz
qemu-a1ed9ef1de87c3e86ff68589604298ec90875a14.tar.bz2
vhost-user: fix duplicated notifier MR init
In case of device resume after suspend, VQ notifier MR still valid. Duplicated registrations explode memory block list and slow down device resume. Fixes: 44866521bd6e ("vhost-user: support registering external host notifiers") Cc: tiwei.bie@intel.com Cc: qemu-stable@nongnu.org Cc: Yuwei Zhang <zhangyuwei.9149@bytedance.com> Signed-off-by: Xueming Li <xuemingl@nvidia.com> Message-Id: <20211008080215.590292-1-xuemingl@nvidia.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'hw')
-rw-r--r--hw/virtio/vhost-user.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c
index 2c85562..bf6e502 100644
--- a/hw/virtio/vhost-user.c
+++ b/hw/virtio/vhost-user.c
@@ -1526,8 +1526,9 @@ static int vhost_user_slave_handle_vring_host_notifier(struct vhost_dev *dev,
name = g_strdup_printf("vhost-user/host-notifier@%p mmaps[%d]",
user, queue_idx);
- memory_region_init_ram_device_ptr(&n->mr, OBJECT(vdev), name,
- page_size, addr);
+ if (!n->mr.ram) /* Don't init again after suspend. */
+ memory_region_init_ram_device_ptr(&n->mr, OBJECT(vdev), name,
+ page_size, addr);
g_free(name);
if (virtio_queue_set_host_notifier_mr(vdev, queue_idx, &n->mr, true)) {