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.
>
> ---
> 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
>
>