From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57590) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1atFbD-0001HX-G8 for qemu-devel@nongnu.org; Thu, 21 Apr 2016 10:28:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1atFbC-0005kP-HI for qemu-devel@nongnu.org; Thu, 21 Apr 2016 10:28:55 -0400 Received: from mx1.redhat.com ([209.132.183.28]:37595) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1atFbC-0005jt-Ca for qemu-devel@nongnu.org; Thu, 21 Apr 2016 10:28:54 -0400 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 79B687AE8E for ; Thu, 21 Apr 2016 14:28:53 +0000 (UTC) Date: Thu, 21 Apr 2016 22:28:57 +0800 From: Fam Zheng Message-ID: <20160421142857.GB2220@ad.usersys.redhat.com> References: <1461204268-7643-1-git-send-email-famz@redhat.com> <20160421144938-mutt-send-email-mst@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160421144938-mutt-send-email-mst@redhat.com> Subject: Re: [Qemu-devel] [PATCH] virtio: Register host notifier handler as external List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Michael S. Tsirkin" Cc: qemu-devel@nongnu.org, Paolo Bonzini , Stefan Hajnoczi , Max Reitz On Thu, 04/21 15:20, Michael S. Tsirkin wrote: > On Thu, Apr 21, 2016 at 10:04:28AM +0800, Fam Zheng wrote: > > This ensures the bdrv_drained_begin() in block layer is effective and > > fixes launchpad bug #1570134. > > > > Signed-off-by: Fam Zheng > > --- > > hw/virtio/virtio.c | 7 ++++--- > > 1 file changed, 4 insertions(+), 3 deletions(-) > > > > diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c > > index f745c4a..002c2c6 100644 > > --- a/hw/virtio/virtio.c > > +++ b/hw/virtio/virtio.c > > @@ -1829,10 +1829,11 @@ void virtio_queue_set_host_notifier_fd_handler(VirtQueue *vq, bool assign, > > bool set_handler) > > { > > if (assign && set_handler) { > > - event_notifier_set_handler(&vq->host_notifier, > > - virtio_queue_host_notifier_read); > > + aio_set_event_notifier(qemu_get_aio_context(), &vq->host_notifier, > > + true, virtio_queue_host_notifier_read); > > } else { > > - event_notifier_set_handler(&vq->host_notifier, NULL); > > + aio_set_event_notifier(qemu_get_aio_context(), &vq->host_notifier, > > + true, NULL); > > } > > if (!assign) { > > /* Test and clear notifier before after disabling event, > > Is this the right thing to do in all cases? > E.g. it doesn't look like event_notifier_set_handler previously called > aio_set_event_notifier on win32. Was there a reason for this? It's a good catch. I'm not sure whether/how win32 goes with ioeventfd, but it seems all the existing host notifier handling (fd handler) in vhost and data plane mismatch with the event notifier implementation (WaitObject) in win32. This is a subject understood best by Paolo but since he's on PTO I'll see if I can figure out the answer by testing this code with wine. Fam