diff options
Diffstat (limited to 'kernel/time/timekeeping_internal.h')
-rw-r--r-- | kernel/time/timekeeping_internal.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/kernel/time/timekeeping_internal.h b/kernel/time/timekeeping_internal.h index 4ea005a7f9da..5be76270ec4a 100644 --- a/kernel/time/timekeeping_internal.h +++ b/kernel/time/timekeeping_internal.h | |||
@@ -17,7 +17,11 @@ static inline cycle_t clocksource_delta(cycle_t now, cycle_t last, cycle_t mask) | |||
17 | { | 17 | { |
18 | cycle_t ret = (now - last) & mask; | 18 | cycle_t ret = (now - last) & mask; |
19 | 19 | ||
20 | return (s64) ret > 0 ? ret : 0; | 20 | /* |
21 | * Prevent time going backwards by checking the MSB of mask in | ||
22 | * the result. If set, return 0. | ||
23 | */ | ||
24 | return ret & ~(mask >> 1) ? 0 : ret; | ||
21 | } | 25 | } |
22 | #else | 26 | #else |
23 | static inline cycle_t clocksource_delta(cycle_t now, cycle_t last, cycle_t mask) | 27 | static inline cycle_t clocksource_delta(cycle_t now, cycle_t last, cycle_t mask) |
@@ -26,4 +30,6 @@ static inline cycle_t clocksource_delta(cycle_t now, cycle_t last, cycle_t mask) | |||
26 | } | 30 | } |
27 | #endif | 31 | #endif |
28 | 32 | ||
33 | extern time64_t __ktime_get_real_seconds(void); | ||
34 | |||
29 | #endif /* _TIMEKEEPING_INTERNAL_H */ | 35 | #endif /* _TIMEKEEPING_INTERNAL_H */ |