In some unique situations a vCPU can be kicked even if it's not ready to execute TCG code i.e. when current_tb has never been set before. This can happen with the atomic stress test (not kvm-unit-test based), where a vCPU can query some work to a not yet started vCPU.
Signed-off-by: Alvise Rigo <a.r...@virtualopensystems.com> --- cpus.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cpus.c b/cpus.c index f61530c..3d90142 100644 --- a/cpus.c +++ b/cpus.c @@ -935,7 +935,9 @@ void async_run_on_cpu(CPUState *cpu, void (*func)(void *data), void *data) wi->done = false; qemu_mutex_unlock(&cpu->work_mutex); - qemu_cpu_kick(cpu); + if (tcg_enabled() && (atomic_read(&cpu->tcg_exec_flag) == 1)) { + qemu_cpu_kick(cpu); + } } void async_run_safe_work_on_cpu(CPUState *cpu, void (*func)(void *data), -- 2.5.0