On 09/07/2018 13:24, Pavel Dovgalyuk wrote: > static void qemu_tcg_rr_wait_io_event(CPUState *cpu) > { > while (all_cpu_threads_idle()) { > stop_tcg_kick_timer(); > qemu_cond_wait(cpu->halt_cond, &qemu_global_mutex); > } > > start_tcg_kick_timer(); > > qemu_wait_io_event_common(cpu); > } > > all_cpu_threads_idle() returns true when there is no queued work. > But between this call and qemu_cond_wait() iothread may add queued work > and the vCPU thread will sleep infinitely.
Maybe queue_work_on_cpu is called outside BQL? Paolo