On 17/02/2015 09:43, Pavel Dovgaluk wrote: >> > int64_t deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL); >> > if (deadline == 0) { >> > qemu_clock_notify(QEMU_CLOCK_VIRTUAL); >> > } >> > >> > instead of qemu_notify_event(), and remove these lines from >> > qemu_tcg_cpu_thread_fn. > I tried this one. But there is one problem. > Expiring of the virtual timers is not the only reason of icount expiration in > replay mode. > It may be caused by host timers deadline or poll timeout in record mode. In > this case > qemu_clock_notify(QEMU_CLOCK_VIRTUAL) will not be called in replay mode and > we'll waste time for iothread sleeping.
Sure, but unconditional qemu_notify_event() is also wrong. So, to sum up: - it's okay to move code from qemu_tcg_cpu_thread_fn to cpu-exec.c - it's okay to add more qemu_clock_notify calls than just qemu_clock_notify(QEMU_CLOCK_VIRTUAL), each with its own condition - it's better if all these, after being moved to cpu-exec.c, are also extracted in a separate function - it's not okay to do an unconditional qemu_notify_event() in cpu-exec.c, even if it's under "if (replay_mode != NONE)". Thanks for your understanding! :) Paolo