From: Paolo Bonzini <pbonz...@redhat.com> The aio workers may spend a long time executing I/O operations; mark that time as an extended quiescent state.
Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> Reviewed-by: Mike Day <ncm...@ncultra.org> --- block/raw-posix.c | 3 +++ block/raw-win32.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/block/raw-posix.c b/block/raw-posix.c index ba721d3..962833e 100644 --- a/block/raw-posix.c +++ b/block/raw-posix.c @@ -26,6 +26,7 @@ #include "qemu/log.h" #include "block/block_int.h" #include "qemu/module.h" +#include "qemu/rcu.h" #include "trace.h" #include "block/thread-pool.h" #include "qemu/iov.h" @@ -735,6 +736,7 @@ static int aio_worker(void *arg) RawPosixAIOData *aiocb = arg; ssize_t ret = 0; + rcu_thread_offline(); switch (aiocb->aio_type & QEMU_AIO_TYPE_MASK) { case QEMU_AIO_READ: ret = handle_aiocb_rw(aiocb); @@ -774,6 +776,7 @@ static int aio_worker(void *arg) } g_slice_free(RawPosixAIOData, aiocb); + rcu_thread_online(); return ret; } diff --git a/block/raw-win32.c b/block/raw-win32.c index 9b5b2af..5f88452 100644 --- a/block/raw-win32.c +++ b/block/raw-win32.c @@ -25,6 +25,7 @@ #include "qemu/timer.h" #include "block/block_int.h" #include "qemu/module.h" +#include "qemu/rcu.h" #include "raw-aio.h" #include "trace.h" #include "block/thread-pool.h" @@ -99,6 +100,7 @@ static int aio_worker(void *arg) ssize_t ret = 0; size_t count; + rcu_thread_offline(); switch (aiocb->aio_type & QEMU_AIO_TYPE_MASK) { case QEMU_AIO_READ: count = handle_aiocb_rw(aiocb); @@ -136,6 +138,7 @@ static int aio_worker(void *arg) } g_slice_free(RawWin32AIOData, aiocb); + rcu_thread_online(); return ret; } -- 1.8.3.1