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 | time_travel_time = ns; | 34 | time_travel_time = ns; |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | static inline void time_travel_set_timer(enum time_travel_timer_mode mode, | 37 | static inline void time_travel_set_timer_mode(enum time_travel_timer_mode mode) |
| 38 | unsigned long long expiry) | ||
| 39 | { | 38 | { |
| 40 | time_travel_timer_mode = mode; | 39 | time_travel_timer_mode = mode; |
| 40 | } | ||
| 41 | |||
| 42 | static inline void time_travel_set_timer_expiry(unsigned long long expiry) | ||
| 43 | { | ||
| 41 | time_travel_timer_expiry = expiry; | 44 | time_travel_timer_expiry = expiry; |
| 42 | } | 45 | } |
| 43 | #else | 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, | 56 | static inline void time_travel_set_timer_mode(enum time_travel_timer_mode mode) |
| 54 | unsigned long long expiry) | 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 | if (time_travel_timer_mode != TT_TMR_DISABLED || | 213 | if (time_travel_timer_mode != TT_TMR_DISABLED || |
| 214 | time_travel_timer_expiry < next) { | 214 | time_travel_timer_expiry < next) { |
| 215 | if (time_travel_timer_mode == TT_TMR_ONESHOT) | 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 | * time_travel_time will be adjusted in the timer | 218 | * time_travel_time will be adjusted in the timer |
| 219 | * IRQ handler so it works even when the signal | 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 | static int itimer_shutdown(struct clock_event_device *evt) | 50 | static int itimer_shutdown(struct clock_event_device *evt) |
| 51 | { | 51 | { |
| 52 | if (time_travel_mode != TT_MODE_OFF) | 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 | if (time_travel_mode != TT_MODE_INFCPU) | 55 | if (time_travel_mode != TT_MODE_INFCPU) |
| 56 | os_timer_disable(); | 56 | os_timer_disable(); |
| @@ -62,9 +62,10 @@ static int itimer_set_periodic(struct clock_event_device *evt) · 5 unmodified lines | |||
| 62 | { | 62 | { |
| 63 | unsigned long long interval = NSEC_PER_SEC / HZ; | 63 | unsigned long long interval = NSEC_PER_SEC / HZ; |
| 64 | 64 | ||
| 65 | if (time_travel_mode != TT_MODE_OFF) | 65 | if (time_travel_mode != TT_MODE_OFF) { |
| 66 | time_travel_set_timer(TT_TMR_PERIODIC, | 66 | time_travel_set_timer_mode(TT_TMR_PERIODIC); |
| 67 | time_travel_time + interval); | 67 | time_travel_set_timer_expiry(time_travel_time + interval); |
| 68 | } | ||
| 68 | 69 | ||
| 69 | if (time_travel_mode != TT_MODE_INFCPU) | 70 | if (time_travel_mode != TT_MODE_INFCPU) |
| 70 | os_timer_set_interval(interval); | 71 | os_timer_set_interval(interval); |
| @@ -77,9 +78,10 @@ static int itimer_next_event(unsigned long delta, · 6 unmodified lines | |||
| 77 | { | 78 | { |
| 78 | delta += 1; | 79 | delta += 1; |
| 79 | 80 | ||
| 80 | if (time_travel_mode != TT_MODE_OFF) | 81 | if (time_travel_mode != TT_MODE_OFF) { |
| 81 | time_travel_set_timer(TT_TMR_ONESHOT, | 82 | time_travel_set_timer_mode(TT_TMR_ONESHOT); |
| 82 | time_travel_time + delta); | 83 | time_travel_set_timer_expiry(time_travel_time + delta); |
| 84 | } | ||
| 83 | 85 | ||
| 84 | if (time_travel_mode != TT_MODE_INFCPU) | 86 | if (time_travel_mode != TT_MODE_INFCPU) |
| 85 | return os_timer_one_shot(delta); | 87 | return os_timer_one_shot(delta); |