From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57098) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aSoT4-0005sE-JR for qemu-devel@nongnu.org; Mon, 08 Feb 2016 11:15:15 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aSoT2-0002NF-7m for qemu-devel@nongnu.org; Mon, 08 Feb 2016 11:15:14 -0500 Received: from mail-wm0-x242.google.com ([2a00:1450:400c:c09::242]:34717) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aSoT2-0002N6-0T for qemu-devel@nongnu.org; Mon, 08 Feb 2016 11:15:12 -0500 Received: by mail-wm0-x242.google.com with SMTP id p63so16173810wmp.1 for ; Mon, 08 Feb 2016 08:15:11 -0800 (PST) Sender: Paolo Bonzini From: Paolo Bonzini Date: Mon, 8 Feb 2016 17:14:53 +0100 Message-Id: <1454948107-11844-3-git-send-email-pbonzini@redhat.com> In-Reply-To: <1454948107-11844-1-git-send-email-pbonzini@redhat.com> References: <1454948107-11844-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH 02/16] aio: do not really acquire/release the main AIO context List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: stefanha@redhat.com The main AIO context is used in many places that are not aware of AioContexts at all. bdrv_drain will soon do a release/acquire itself, which for the main AIO context would break because code calls bdrv_drain on it without acquiring anything. Very soon, bdrv will be ready for removal of aio_context_acquire from non-block-layer code. The idea is that the AioContext will be acquired by bdrv_*, and no one will care of what's running in the main I/O thread or in the dataplane thread. Even if there are two concurrent instances of the I/O thread, locks protect the data structures; this evolves naturally to the multiqueue case where there are multiple I/O threads touching the same BlockDriverState. When this happens, aio_context_acquire/release can go away, replaced by fine-grained locks, and this hack will also go away with it. Signed-off-by: Paolo Bonzini --- async.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/async.c b/async.c index d4dd2cc..d083564 100644 --- a/async.c +++ b/async.c @@ -369,10 +369,18 @@ void aio_context_unref(AioContext *ctx) void aio_context_acquire(AioContext *ctx) { - rfifolock_lock(&ctx->lock); + if (ctx == qemu_get_aio_context()) { + assert(qemu_mutex_iothread_locked()); + } else { + rfifolock_lock(&ctx->lock); + } } void aio_context_release(AioContext *ctx) { - rfifolock_unlock(&ctx->lock); + if (ctx == qemu_get_aio_context()) { + assert(qemu_mutex_iothread_locked()); + } else { + rfifolock_unlock(&ctx->lock); + } } -- 2.5.0