Signed-off-by: Fam Zheng <f...@redhat.com> --- block.c | 10 ++++++++++ include/block/block.h | 11 +++++++++++ 2 files changed, 21 insertions(+)
diff --git a/block.c b/block.c index a995a8e..e65b906 100644 --- a/block.c +++ b/block.c @@ -4324,6 +4324,16 @@ AioContext *bdrv_get_aio_context(BlockDriverState *bs) return bs->aio_context; } +void bdrv_coroutine_enter(BlockDriverState *bs, Coroutine *co) +{ + aio_co_enter(bdrv_get_aio_context(bs), co); +} + +void bdrv_coroutine_enter_if_inactive(BlockDriverState *bs, Coroutine *co) +{ + aio_co_enter_if_inactive(bdrv_get_aio_context(bs), co); +} + static void bdrv_do_remove_aio_context_notifier(BdrvAioNotifier *ban) { QLIST_REMOVE(ban, list); diff --git a/include/block/block.h b/include/block/block.h index 488a07e..dd9416e 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -558,6 +558,17 @@ bool bdrv_debug_is_suspended(BlockDriverState *bs, const char *tag); AioContext *bdrv_get_aio_context(BlockDriverState *bs); /** + * Transfer control to @co in the aio context of @bs + */ +void bdrv_coroutine_enter(BlockDriverState *bs, Coroutine *co); + +/** + * Transfer control to @co in the aio context of @bs if it's not active (i.e. + * part of the call stack of the running coroutine). Otherwise, do nothing. + */ +void bdrv_coroutine_enter_if_inactive(BlockDriverState *bs, Coroutine *co); + +/** * bdrv_set_aio_context: * * Changes the #AioContext used for fd handlers, timers, and BHs by this -- 2.9.3