On 1/19/21 1:39 PM, Pavel Dovgalyuk wrote: > Sometimes interrupt event comes at the same time with > the virtual timers. In this case replay tries to proceed > the timers, because deadline for them is zero. > This patch allows processing interrupts and exceptions > by entering the vCPU execution loop, when deadline is zero, > but checkpoint associated with virtual timers is not ready > to be replayed. > > Signed-off-by: Pavel Dovgalyuk <pavel.dovgal...@ispras.ru> > --- > accel/tcg/tcg-cpus-icount.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/accel/tcg/tcg-cpus-icount.c b/accel/tcg/tcg-cpus-icount.c > index 9f45432275..a6d2bb8a88 100644 > --- a/accel/tcg/tcg-cpus-icount.c > +++ b/accel/tcg/tcg-cpus-icount.c > @@ -81,7 +81,13 @@ void icount_handle_deadline(void) > int64_t deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL, > QEMU_TIMER_ATTR_ALL); > > - if (deadline == 0) { > + /* > + * Instructions, interrupts, and exceptions are processed in cpu-exec. > + * Don't interrupt cpu thread, when these events are waiting > + * (i.e., there is no checkpoint) > + */ > + if (deadline == 0 > + && (replay_mode == REPLAY_MODE_RECORD || replay_has_checkpoint())) {
LGTM, but Cc'ing Peter/Alex just in case :) > icount_notify_aio_contexts(); > } > } > >