diff options
author | Xueming Li <xuemingl@nvidia.com> | 2021-10-08 16:02:15 +0800 |
---|---|---|
committer | Michael Roth <michael.roth@amd.com> | 2021-10-27 11:49:50 -0500 |
commit | c18bc855ade093a1df850a01daf851c478a9cca7 (patch) | |
tree | 73dbd8c6f709a9732221dcf8c019f142f98bd392 | |
parent | 27c6f20d9d8725ddd4d0744022c4a66ec4878c6d (diff) | |
download | qemu-c18bc855ade093a1df850a01daf851c478a9cca7.zip qemu-c18bc855ade093a1df850a01daf851c478a9cca7.tar.gz qemu-c18bc855ade093a1df850a01daf851c478a9cca7.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>
(cherry picked from commit a1ed9ef1de87c3e86ff68589604298ec90875a14)
Signed-off-by: Michael Roth <michael.roth@amd.com>
-rw-r--r-- | hw/virtio/vhost-user.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c index ded0c10..baff049 100644 --- a/hw/virtio/vhost-user.c +++ b/hw/virtio/vhost-user.c @@ -1465,8 +1465,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)) { |