From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34392) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1atHTl-0000NM-MG for qemu-devel@nongnu.org; Thu, 21 Apr 2016 12:29:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1atHTi-0005wz-Fh for qemu-devel@nongnu.org; Thu, 21 Apr 2016 12:29:21 -0400 Received: from mx1.redhat.com ([209.132.183.28]:41197) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1atHTi-0005wk-Ar for qemu-devel@nongnu.org; Thu, 21 Apr 2016 12:29:18 -0400 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) (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 C4324C04B308 for ; Thu, 21 Apr 2016 16:29:17 +0000 (UTC) Date: Fri, 22 Apr 2016 00:29:22 +0800 From: Fam Zheng Message-ID: <20160421162922.GA5308@ad.usersys.redhat.com> References: <1461204268-7643-1-git-send-email-famz@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1461204268-7643-1-git-send-email-famz@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: qemu-devel@nongnu.org Cc: Paolo Bonzini , Max Reitz , Stefan Hajnoczi , "Michael S. Tsirkin" On Thu, 04/21 10:04, 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, This isn't the right fix, at least not in the intended way. The crash is gone because in this patch the handler is moved from iohandler's AioContext to the main loop AioContext, on which the mirror BH is scheduled, and consequently the mirror BH handler always runs first than the VQ handler. For 2.6 I think what we could do is reverting some changes in 5a7e7a0bad1 for non-dataplane case, i.e. call mirror_exit directly in mirror_run. It's too late today and I'll look into this tomorrow. The fix will probably be left for -rc4. Fam