aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/time/timekeeping_internal.h
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/time/timekeeping_internal.h')
-rw-r--r--kernel/time/timekeeping_internal.h8
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
23static inline cycle_t clocksource_delta(cycle_t now, cycle_t last, cycle_t mask) 27static 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
33extern time64_t __ktime_get_real_seconds(void);
34
29#endif /* _TIMEKEEPING_INTERNAL_H */ 35#endif /* _TIMEKEEPING_INTERNAL_H */