On Wed, Aug 12, 2015 at 02:10:56PM +0300, Marcel Apfelbaum wrote: > On 08/12/2015 01:34 PM, Michael S. Tsirkin wrote: > >On Wed, Aug 12, 2015 at 01:19:51PM +0300, Marcel Apfelbaum wrote: > >>No need to send VHOST_SET_VRING_CALL to backend > >>before the negotiation with the guest is finished. > >> > >>Signed-off-by: Marcel Apfelbaum <mar...@redhat.com> > > > >Well - we do need to set it to the masked notifier initially to avoid > >losing events. You can't just drop it - need to move this call > >somewhere else. > What do we need to set? > I just dropped the call to VHOST_SET_VRING_CALL. > > Thanks, > Marcel
We use two eventfds: masked and unmasked one. We switch dynamically dependent on msi mask value. Code assumes we start out masked, so we need to match that. > > > >>--- > >> hw/virtio/vhost.c | 13 +------------ > >> 1 file changed, 1 insertion(+), 12 deletions(-) > >> > >>diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c > >>index 2712c6f..b448542 100644 > >>--- a/hw/virtio/vhost.c > >>+++ b/hw/virtio/vhost.c > >>@@ -875,24 +875,13 @@ static void vhost_eventfd_del(MemoryListener > >>*listener, > >> static int vhost_virtqueue_init(struct vhost_dev *dev, > >> struct vhost_virtqueue *vq, int n) > >> { > >>- struct vhost_vring_file file = { > >>- .index = n, > >>- }; > >> int r = event_notifier_init(&vq->masked_notifier, 0); > >>+ > >> if (r < 0) { > >> return r; > >> } > >> > >>- file.fd = event_notifier_get_fd(&vq->masked_notifier); > >>- r = dev->vhost_ops->vhost_call(dev, VHOST_SET_VRING_CALL, &file); > >>- if (r) { > >>- r = -errno; > >>- goto fail_call; > >>- } > >> return 0; > >>-fail_call: > >>- event_notifier_cleanup(&vq->masked_notifier); > >>- return r; > >> } > >> > >> static void vhost_virtqueue_cleanup(struct vhost_virtqueue *vq) > >>-- > >>2.1.0