@@ -1109,7 +1109,8 @@ static void coroutine_fn job_co_entry(void *opaque)
job->deferred_to_main_loop = true;
job->busy = true;
}
- aio_bh_schedule_oneshot(qemu_get_aio_context(), job_exit, job);
+ aio_bh_schedule_oneshot_event(qemu_get_aio_context(), job_exit, job,
+ QEMU_CLOCK_REALTIME);
}
void job_start(Job *job)
@@ -683,7 +683,7 @@ void aio_co_schedule(AioContext *ctx, Coroutine *co)
QSLIST_INSERT_HEAD_ATOMIC(&ctx->scheduled_coroutines,
co, co_scheduled_next);
- qemu_bh_schedule(ctx->co_schedule_bh);
+ qemu_bh_schedule_event(ctx->co_schedule_bh, QEMU_CLOCK_REALTIME);
aio_context_unref(ctx);
}
@@ -292,7 +292,8 @@ def gen_no_co_wrapper(func: FuncDecl) -> str:
}};
assert(qemu_in_coroutine());
- aio_bh_schedule_oneshot(qemu_get_aio_context(), {name}_bh, &s);
+ aio_bh_schedule_oneshot_event(qemu_get_aio_context(), {name}_bh, &s,
+ QEMU_CLOCK_REALTIME);
qemu_coroutine_yield();
{func.ret}
Convert qemu_bh_schedule() to qemu_bh_schedule_event() and aio_bh_schedule_oneshot() to aio_bh_schedule_oneshot_event(), which can specify the clock type, making it compatible with record-replay. Coroutine scheduling does not affect target machine state, so it should use QEMU_CLOCK_REALTIME so it is not recorded and replayed. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> --- job.c | 3 ++- util/async.c | 2 +- scripts/block-coroutine-wrapper.py | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-)