[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 02/16] aio: do not really acquire/release the main A
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH 02/16] aio: do not really acquire/release the main AIO context |
Date: |
Tue, 9 Feb 2016 12:46:00 +0100 |
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 <address@hidden>
---
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
- [Qemu-devel] [PATCH v3 00/16] aio: first part of aio_context_acquire/release pushdown, Paolo Bonzini, 2016/02/09
- [Qemu-devel] [PATCH 01/16] aio: introduce aio_context_in_iothread, Paolo Bonzini, 2016/02/09
- [Qemu-devel] [PATCH 02/16] aio: do not really acquire/release the main AIO context,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 03/16] aio: introduce aio_poll_internal, Paolo Bonzini, 2016/02/09
- [Qemu-devel] [PATCH 04/16] aio: only call aio_poll_internal from iothread, Paolo Bonzini, 2016/02/09
- [Qemu-devel] [PATCH 07/16] aio: convert from RFifoLock to QemuRecMutex, Paolo Bonzini, 2016/02/09
- [Qemu-devel] [PATCH 06/16] qemu-thread: introduce QemuRecMutex, Paolo Bonzini, 2016/02/09
- [Qemu-devel] [PATCH 05/16] iothread: release AioContext around aio_poll, Paolo Bonzini, 2016/02/09
- [Qemu-devel] [PATCH 08/16] aio: rename bh_lock to list_lock, Paolo Bonzini, 2016/02/09
- [Qemu-devel] [PATCH 11/16] qemu-thread: optimize QemuLockCnt with futexes on Linux, Paolo Bonzini, 2016/02/09
- [Qemu-devel] [PATCH 09/16] qemu-thread: introduce QemuLockCnt, Paolo Bonzini, 2016/02/09
- [Qemu-devel] [PATCH 10/16] aio: make ctx->list_lock a QemuLockCnt, subsuming ctx->walking_bh, Paolo Bonzini, 2016/02/09
- [Qemu-devel] [PATCH 13/16] aio-posix: remove walking_handlers, protecting AioHandler list with list_lock, Paolo Bonzini, 2016/02/09