um: time-travel: Fix periodic timers
[linux-2.6-microblaze.git] / arch / um / kernel / process.c
index 6bede78..cf242fc 100644 (file)
@@ -210,7 +210,12 @@ static void time_travel_sleep(unsigned long long duration)
        if (time_travel_mode != TT_MODE_INFCPU)
                os_timer_disable();
 
-       if (time_travel_timer_mode != TT_TMR_DISABLED ||
+       while (time_travel_timer_mode == TT_TMR_PERIODIC &&
+              time_travel_timer_expiry < time_travel_time)
+               time_travel_set_timer_expiry(time_travel_timer_expiry +
+                                            time_travel_timer_interval);
+
+       if (time_travel_timer_mode != TT_TMR_DISABLED &&
            time_travel_timer_expiry < next) {
                if (time_travel_timer_mode == TT_TMR_ONESHOT)
                        time_travel_set_timer_mode(TT_TMR_DISABLED);