um: time-travel: Fix periodic timers
[linux-2.6-microblaze.git] / arch / um / kernel / process.c
index 67c0d1a..cf242fc 100644 (file)
@@ -210,10 +210,15 @@ 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(TT_TMR_DISABLED, 0);
+                       time_travel_set_timer_mode(TT_TMR_DISABLED);
                /*
                 * time_travel_time will be adjusted in the timer
                 * IRQ handler so it works even when the signal