diff options
Diffstat (limited to 'kernel/timer.c')
| -rw-r--r-- | kernel/timer.c | 7 | 
1 files changed, 4 insertions, 3 deletions
diff --git a/kernel/timer.c b/kernel/timer.c index 9199f3c5221..be394af5bc2 100644 --- a/kernel/timer.c +++ b/kernel/timer.c @@ -750,13 +750,14 @@ unsigned long apply_slack(struct timer_list *timer, unsigned long expires)  	unsigned long expires_limit, mask;  	int bit; -	expires_limit = expires + timer->slack; +	expires_limit = expires; -	if (timer->slack < 0) /* auto slack: use 0.4% */ +	if (timer->slack > -1) +		expires_limit = expires + timer->slack; +	else if (time_after(expires, jiffies)) /* auto slack: use 0.4% */  		expires_limit = expires + (expires - jiffies)/256;  	mask = expires ^ expires_limit; -  	if (mask == 0)  		return expires;  | 
