[...]
> > --- > > hw/virtio/vhost.c | 27 +++++++++++++++++++++++---- > > 1 file changed, 23 insertions(+), 4 deletions(-) > > > > diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index > > 59a32e9..e45f5e2 100644 > > --- a/hw/virtio/vhost.c > > +++ b/hw/virtio/vhost.c > > @@ -1234,6 +1234,18 @@ static void vhost_virtqueue_cleanup(struct > vhost_virtqueue *vq) > > event_notifier_cleanup(&vq->masked_notifier); > > } > > > > +static bool vhost_dev_used_memslots_is_exceeded(struct vhost_dev > > +*hdev) { > > + if (hdev->vhost_ops->vhost_get_used_memslots() > > > + hdev->vhost_ops->vhost_backend_memslots_limit(hdev)) { > > + error_report("vhost backend memory slots limit is less" > > + " than current number of present memory slots"); > > + return true; > > + } > > + > > + return false; > > +} > > + > > int vhost_dev_init(struct vhost_dev *hdev, void *opaque, > > VhostBackendType backend_type, uint32_t > > busyloop_timeout) { @@ -1252,10 +1264,7 @@ int vhost_dev_init(struct > > vhost_dev *hdev, void *opaque, > > goto fail; > > } > > > > - if (hdev->vhost_ops->vhost_get_used_memslots() > > > - hdev->vhost_ops->vhost_backend_memslots_limit(hdev)) { > > - error_report("vhost backend memory slots limit is less" > > - " than current number of present memory slots"); > > + if (vhost_dev_used_memslots_is_exceeded(hdev)) { > why do you keep this check? > it seems always be false > If a vhost device has been already added successfully, i.e. its memory Listener has been registered, i.e. hdev->vhost_ops->vhost_set_used_memslots() has been called(used_memslots is updated here), then if we hotplug another same backend type vhost device, hdev->vhost_ops->vhost_get_used_memslots() will not be 0( used_memslots is the same for the same type backend vhost device), so it will not always be false. Regards, Jay