From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51926) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VlKPH-0005MQ-3j for qemu-devel@nongnu.org; Tue, 26 Nov 2013 10:18:37 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VlKP9-00065F-Sf for qemu-devel@nongnu.org; Tue, 26 Nov 2013 10:18:31 -0500 Received: from mx1.redhat.com ([209.132.183.28]:33721) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VlKP9-000654-Ki for qemu-devel@nongnu.org; Tue, 26 Nov 2013 10:18:23 -0500 From: Stefan Hajnoczi Date: Tue, 26 Nov 2013 16:17:59 +0100 Message-Id: <1385479081-17887-1-git-send-email-stefanha@redhat.com> Subject: [Qemu-devel] [PATCH v2 0/2] block: make aio_poll(ctx, true) block with no fds List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Kevin Wolf , pingfank@linux.vnet.ibm.com, alex@alex.org.uk, jan.kiszka@siemens.com, Stefan Hajnoczi , pbonzini@redhat.com v2: * Oops, this patch got lost. Rebased onto qemu.git/master for 1.8 Jan and Alex have expressed that aio_poll(ctx, blocking=true) should block even when there are no file descriptors registered. This can be handy since other threads may still kick the AioContext using aio_notify(ctx). A concrete example is a thread that has only a timer in its AioContext. aio_poll(ctx, true) should block until the timer expires or another thread invokes aio_notify(ctx). Alex and Paolo were concerned about bdrv_drain_all() which has the following comment: while (busy) { /* FIXME: We do not have timer support here, so this is effectively * a busy wait. */ QTAILQ_FOREACH(bs, &bdrv_states, list) { if (bdrv_start_throttled_reqs(bs)) { busy = true; } } busy = bdrv_requests_pending_all(); busy |= aio_poll(qemu_get_aio_context(), busy); } Patch 1 drops this outdated comment. The new I/O throttling code already eliminated the busy wait. Patch 2 drops the special case which returns immediately from aio_poll(ctx, true) when no file descriptors are registered. Note that aio_notify(ctx) still causes aio_poll(ctx, true) to return false. I don't see a need to change it so aio_poll(ctx, true) always returns true. Stefan Hajnoczi (2): block: clean up bdrv_drain_all() throttling comments aio: make aio_poll(ctx, true) block with no fds aio-posix.c | 5 ----- aio-win32.c | 5 ----- block.c | 7 +------ tests/test-aio.c | 1 - 4 files changed, 1 insertion(+), 17 deletions(-) -- 1.8.4.2