Loading include/block/aio.h +9 −0 Original line number Diff line number Diff line Loading @@ -510,6 +510,15 @@ void aio_co_schedule(AioContext *ctx, struct Coroutine *co); */ void aio_co_wake(struct Coroutine *co); /** * aio_co_enter: * @ctx: the context to run the coroutine * @co: the coroutine to run * * Enter a coroutine in the specified AioContext. */ void aio_co_enter(AioContext *ctx, struct Coroutine *co); /** * Return the AioContext whose event loop runs in the current thread. * Loading util/async.c +6 −1 Original line number Diff line number Diff line Loading @@ -453,6 +453,11 @@ void aio_co_wake(struct Coroutine *co) smp_read_barrier_depends(); ctx = atomic_read(&co->ctx); aio_co_enter(ctx, co); } void aio_co_enter(AioContext *ctx, struct Coroutine *co) { if (ctx != qemu_get_current_aio_context()) { aio_co_schedule(ctx, co); return; Loading @@ -464,7 +469,7 @@ void aio_co_wake(struct Coroutine *co) QSIMPLEQ_INSERT_TAIL(&self->co_queue_wakeup, co, co_queue_next); } else { aio_context_acquire(ctx); qemu_coroutine_enter(co); qemu_aio_coroutine_enter(ctx, co); aio_context_release(ctx); } } Loading Loading
include/block/aio.h +9 −0 Original line number Diff line number Diff line Loading @@ -510,6 +510,15 @@ void aio_co_schedule(AioContext *ctx, struct Coroutine *co); */ void aio_co_wake(struct Coroutine *co); /** * aio_co_enter: * @ctx: the context to run the coroutine * @co: the coroutine to run * * Enter a coroutine in the specified AioContext. */ void aio_co_enter(AioContext *ctx, struct Coroutine *co); /** * Return the AioContext whose event loop runs in the current thread. * Loading
util/async.c +6 −1 Original line number Diff line number Diff line Loading @@ -453,6 +453,11 @@ void aio_co_wake(struct Coroutine *co) smp_read_barrier_depends(); ctx = atomic_read(&co->ctx); aio_co_enter(ctx, co); } void aio_co_enter(AioContext *ctx, struct Coroutine *co) { if (ctx != qemu_get_current_aio_context()) { aio_co_schedule(ctx, co); return; Loading @@ -464,7 +469,7 @@ void aio_co_wake(struct Coroutine *co) QSIMPLEQ_INSERT_TAIL(&self->co_queue_wakeup, co, co_queue_next); } else { aio_context_acquire(ctx); qemu_coroutine_enter(co); qemu_aio_coroutine_enter(ctx, co); aio_context_release(ctx); } } Loading