From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33365) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V3oUo-0004IV-Ht for qemu-devel@nongnu.org; Mon, 29 Jul 2013 10:32:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V3oUg-0005W3-4I for qemu-devel@nongnu.org; Mon, 29 Jul 2013 10:32:22 -0400 Received: from mail-wg0-x231.google.com ([2a00:1450:400c:c00::231]:36367) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V3oUf-0005Vw-Tt for qemu-devel@nongnu.org; Mon, 29 Jul 2013 10:32:14 -0400 Received: by mail-wg0-f49.google.com with SMTP id y10so4231170wgg.28 for ; Mon, 29 Jul 2013 07:32:13 -0700 (PDT) Date: Mon, 29 Jul 2013 16:32:10 +0200 From: Stefan Hajnoczi Message-ID: <20130729143210.GD4467@stefanha-thinkpad.redhat.com> References: <1374765505-14356-1-git-send-email-stefanha@redhat.com> <1374765505-14356-7-git-send-email-stefanha@redhat.com> <51F62302.3090003@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51F62302.3090003@linux.vnet.ibm.com> Subject: Re: [Qemu-devel] [PATCH v6 06/18] aio: stop using .io_flush() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Wenchao Xia Cc: Kevin Wolf , Ping Fan Liu , Stefan Hajnoczi , qemu-devel@nongnu.org, Michael Roth , alex@alex.org.uk, Paolo Bonzini On Mon, Jul 29, 2013 at 04:08:34PM +0800, Wenchao Xia wrote: > > Now that aio_poll() users check their termination condition themselves, > > it is no longer necessary to call .io_flush() handlers. > > > > The behavior of aio_poll() changes as follows: > > > > 1. .io_flush() is no longer invoked and file descriptors are *always* > > monitored. Previously returning 0 from .io_flush() would skip this file > > descriptor. > > > > Due to this change it is essential to check that requests are pending > > before calling qemu_aio_wait(). Failure to do so means we block, for > > example, waiting for an idle iSCSI socket to become readable when there > > are no requests. Currently all qemu_aio_wait()/aio_poll() callers check > > before calling. > > > > 2. aio_poll() now returns true if progress was made (BH or fd handlers > > executed) and false otherwise. Previously it would return true whenever > > 'busy', which means that .io_flush() returned true. The 'busy' concept > > no longer exists so just progress is returned. > > > > Due to this change we need to update tests/test-aio.c which asserts > > aio_poll() return values. Note that QEMU doesn't actually rely on these > > return values so only tests/test-aio.c cares. > > > > Note that ctx->notifier, the EventNotifier fd used for aio_notify(), is > > now handled as a special case. This is a little ugly but maintains > > aio_poll() semantics, i.e. aio_notify() does not count as 'progress' and > > aio_poll() avoids blocking when the user has not set any fd handlers yet. > > > I guess the goal is, distinguish qemu's internal used fd, with the > real meaningful external fd such as socket? Exactly, the AioContext's own internal EventNotifier should not count. For example, aio_poll() must not block if the user has not added any AioHandlers yet. > How about distinguish them with different GSource? AioContext itself is designed as a GSource. Internally it does not use GSource or the glib event loop. Introducing the glib event loop here would be a big change. I hope in the future we can unify main-loop.c and AioContext. At that point we might operate on GSources. Stefan