Pull UML fix from Richard Weinberger: "Fix time travel mode" * tag 'for-linus-5.3-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/uml: um: fix time travel mode
Unified · Split
| @@ -34,10 +34,13 @@ static inline void time_travel_set_time(unsigned long long ns) · 33 unmodified lines | ||
| 34 | 34 | time_travel_time = ns; |
| 35 | 35 | } |
| 36 | 36 | |
| 37 | −static inline void time_travel_set_timer(enum time_travel_timer_mode mode, | |
| 38 | − unsigned long long expiry) | |
| 37 | +static inline void time_travel_set_timer_mode(enum time_travel_timer_mode mode) | |
| 39 | 38 | { |
| 40 | 39 | time_travel_timer_mode = mode; |
| 40 | +} | |
| 41 | + | |
| 42 | +static inline void time_travel_set_timer_expiry(unsigned long long expiry) | |
| 43 | +{ | |
| 41 | 44 | time_travel_timer_expiry = expiry; |
| 42 | 45 | } |
| 43 | 46 | #else |
| @@ -50,8 +53,11 @@ static inline void time_travel_set_time(unsigned long long ns) · 6 unmodified lines | ||
| 50 | 53 | { |
| 51 | 54 | } |
| 52 | 55 | |
| 53 | −static inline void time_travel_set_timer(enum time_travel_timer_mode mode, | |
| 54 | − unsigned long long expiry) | |
| 56 | +static inline void time_travel_set_timer_mode(enum time_travel_timer_mode mode) | |
| 57 | +{ | |
| 58 | +} | |
| 59 | + | |
| 60 | +static inline void time_travel_set_timer_expiry(unsigned long long expiry) | |
| 55 | 61 | { |
| 56 | 62 | } |
| 57 | 63 | |
| @@ -213,7 +213,7 @@ static void time_travel_sleep(unsigned long long duration) · 212 unmodified lines | ||
| 213 | 213 | if (time_travel_timer_mode != TT_TMR_DISABLED || |
| 214 | 214 | time_travel_timer_expiry < next) { |
| 215 | 215 | if (time_travel_timer_mode == TT_TMR_ONESHOT) |
| 216 | − time_travel_set_timer(TT_TMR_DISABLED, 0); | |
| 216 | + time_travel_set_timer_mode(TT_TMR_DISABLED); | |
| 217 | 217 | /* |
| 218 | 218 | * time_travel_time will be adjusted in the timer |
| 219 | 219 | * IRQ handler so it works even when the signal |
| @@ -50,7 +50,7 @@ void timer_handler(int sig, struct siginfo *unused_si, struct uml_pt_regs *regs) · 49 unmodified lines | ||
| 50 | 50 | static int itimer_shutdown(struct clock_event_device *evt) |
| 51 | 51 | { |
| 52 | 52 | if (time_travel_mode != TT_MODE_OFF) |
| 53 | − time_travel_set_timer(TT_TMR_DISABLED, 0); | |
| 53 | + time_travel_set_timer_mode(TT_TMR_DISABLED); | |
| 54 | 54 | |
| 55 | 55 | if (time_travel_mode != TT_MODE_INFCPU) |
| 56 | 56 | os_timer_disable(); |
| @@ -62,9 +62,10 @@ static int itimer_set_periodic(struct clock_event_device *evt) · 5 unmodified lines | ||
| 62 | 62 | { |
| 63 | 63 | unsigned long long interval = NSEC_PER_SEC / HZ; |
| 64 | 64 | |
| 65 | − if (time_travel_mode != TT_MODE_OFF) | |
| 66 | − time_travel_set_timer(TT_TMR_PERIODIC, | |
| 67 | − time_travel_time + interval); | |
| 65 | + if (time_travel_mode != TT_MODE_OFF) { | |
| 66 | + time_travel_set_timer_mode(TT_TMR_PERIODIC); | |
| 67 | + time_travel_set_timer_expiry(time_travel_time + interval); | |
| 68 | + } | |
| 68 | 69 | |
| 69 | 70 | if (time_travel_mode != TT_MODE_INFCPU) |
| 70 | 71 | os_timer_set_interval(interval); |
| @@ -77,9 +78,10 @@ static int itimer_next_event(unsigned long delta, · 6 unmodified lines | ||
| 77 | 78 | { |
| 78 | 79 | delta += 1; |
| 79 | 80 | |
| 80 | − if (time_travel_mode != TT_MODE_OFF) | |
| 81 | − time_travel_set_timer(TT_TMR_ONESHOT, | |
| 82 | − time_travel_time + delta); | |
| 81 | + if (time_travel_mode != TT_MODE_OFF) { | |
| 82 | + time_travel_set_timer_mode(TT_TMR_ONESHOT); | |
| 83 | + time_travel_set_timer_expiry(time_travel_time + delta); | |
| 84 | + } | |
| 83 | 85 | |
| 84 | 86 | if (time_travel_mode != TT_MODE_INFCPU) |
| 85 | 87 | return os_timer_one_shot(delta); |