On 12/04/2017 11:51, guangrong.xiao@xxxxxxxxx wrote: > +#ifdef TARGET_I386 > + /* > + * if more than period clocks were passed, i.e, the timer interrupt > + * has been lost, we should catch up the time. > + */ > + if (s->lost_tick_policy == LOST_TICK_POLICY_SLEW && > + (lost_clock / period)) { > + int lost_interrupt = lost_clock / period; > + > + s->irq_coalesced += lost_interrupt; > + lost_clock -= lost_interrupt * period; > + if (lost_interrupt) { > + DPRINTF_C("cmos: compensate %d interrupts, coalesced irqs " > + "increased to %d\n", lost_interrupt, > + s->irq_coalesced); > + rtc_coalesced_timer_update(s); > + } I think you should merge these two patches, since both of them essentially update the number of coalesced ticks and then split it between s->irq_coalesced and lost_clock. Paolo > + } else > +#endif > + /* > + * no way to compensate the interrupt if LOST_TICK_POLICY_SLEW > + * is not used, we should make the time progress anyway. > + */ > + lost_clock = MIN(lost_clock, period); > + assert(lost_clock >= 0); > + } > +