From: Xueming Li <xuemi...@nvidia.com> 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....@intel.com Cc: qemu-sta...@nongnu.org Cc: Yuwei Zhang <zhangyuwei.9...@bytedance.com> Signed-off-by: Xueming Li <xuemi...@nvidia.com> Message-Id: <20211008080215.590292-1-xuemi...@nvidia.com> Reviewed-by: Michael S. Tsirkin <m...@redhat.com> Signed-off-by: Michael S. Tsirkin <m...@redhat.com> (cherry picked from commit a1ed9ef1de87c3e86ff68589604298ec90875a14) Signed-off-by: Michael Roth <michael.r...@amd.com> --- hw/virtio/vhost-user.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c index aec6cc1990..7b35c5d71d 100644 --- a/hw/virtio/vhost-user.c +++ b/hw/virtio/vhost-user.c @@ -1469,8 +1469,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)) { -- 2.25.1