There are some problems with this patch. It doesn't apply cleanly. Are you sure you’re developing on an up to date master branch?
On Thu, Apr 23, 2020 at 09:39:36PM +0300, Dima Stepanov wrote: > > In case of the vhost-user devices the daemon can be killed at any > moment. Since QEMU supports the reconnet functionality the guest > notifiers should be reset and disabled after "disconnect" event. The > most issues were found if the "disconnect" event happened during vhost > device initialization step. > The disconnect event leads to the call of the vhost_dev_cleanup() > routine. Which memset to 0 a vhost device structure. Because of this, if > device was not started (dev.started == false) and the connection is > broken, then the set_guest_notifier method will produce assertion error. > Also connection can be broken after the dev.started field is set to > true. > A new notifiers_set field is added to the vhost_dev structure to track > the state of the guest notifiers during the initialization process. > > Signed-off-by: Dima Stepanov <dimas...@yandex-team.ru> > --- > hw/block/vhost-user-blk.c | 8 ++++---- > hw/virtio/vhost.c | 11 +++++++++++ > include/hw/virtio/vhost.h | 1 + > 3 files changed, 16 insertions(+), 4 deletions(-) > @@ -1449,6 +1456,10 @@ int vhost_dev_drop_guest_notifiers(struct vhost_dev *hdev, I can’t find the function vhost_dev_drop_guest_notifiers() in /hw/virtio/vhost.c, or anywhere in the codebase. Where does this code come from? > VirtioBusClass *k = VIRTIO_BUS_GET_CLASS(qbus); > int ret; > > + if (!hdev->notifiers_set) { > + return 0; > + } > + > ret = k->set_guest_notifiers(qbus->parent, nvqs, false); > if (ret < 0) { > error_report("Error reset guest notifier: %d", -ret); > diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h > index 4d0d2e2..e3711a7 100644 > --- a/include/hw/virtio/vhost.h > +++ b/include/hw/virtio/vhost.h > @@ -90,6 +90,7 @@ struct vhost_dev { > QLIST_HEAD(, vhost_iommu) iommu_list; > IOMMUNotifier n; > const VhostDevConfigOps *config_ops; > + bool notifiers_set; > }; > > int vhost_dev_init(struct vhost_dev *hdev, void *opaque, > -- > 2.7.4 > >