From: Marc-André Lureau <marcandre.lur...@redhat.com> All these functions must be called only after the backend is connected. They are called from virtio-net.c, after either virtio or link status change.
The check for nc->peer->link_down should ensure vhost_net_{start,stop}() are always called between vhost_user_{start,stop}(). Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> --- hw/virtio/vhost.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index e4eb97e..e34bd39 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1186,6 +1186,9 @@ void vhost_virtqueue_mask(struct vhost_dev *hdev, VirtIODevice *vdev, int n, int r, index = n - hdev->vq_index; struct vhost_vring_file file; + /* should only be called after backend is connected */ + assert(hdev->vhost_ops != NULL); + if (mask) { assert(vdev->use_guest_notifier_mask); file.fd = event_notifier_get_fd(&hdev->vqs[index].masked_notifier); @@ -1232,6 +1235,9 @@ int vhost_dev_start(struct vhost_dev *hdev, VirtIODevice *vdev) { int i, r; + /* should only be called after backend is connected */ + assert(hdev->vhost_ops != NULL); + hdev->started = true; r = vhost_dev_set_features(hdev, hdev->log_enabled); @@ -1292,6 +1298,9 @@ void vhost_dev_stop(struct vhost_dev *hdev, VirtIODevice *vdev) { int i; + /* should only be called after backend is connected */ + assert(hdev->vhost_ops != NULL); + for (i = 0; i < hdev->nvqs; ++i) { vhost_virtqueue_stop(hdev, vdev, -- 2.7.4