diff options
Diffstat (limited to 'kernel/time')
| -rw-r--r-- | kernel/time/timekeeping_internal.h | 6 | 
1 files changed, 5 insertions, 1 deletions
| diff --git a/kernel/time/timekeeping_internal.h b/kernel/time/timekeeping_internal.h index e20466ffc208..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)  {  	cycle_t ret = (now - last) & mask; -	return (s64) ret > 0 ? ret : 0; +	/* +	 * Prevent time going backwards by checking the MSB of mask in +	 * the result. If set, return 0. +	 */ +	return ret & ~(mask >> 1) ? 0 : ret;  }  #else  static inline cycle_t clocksource_delta(cycle_t now, cycle_t last, cycle_t mask) | 
