Skip to content
Snippets Groups Projects
Commit f00e047e authored by Jeff Chua's avatar Jeff Chua Committed by Thomas Gleixner
Browse files

timers: Fix slack calculation for expired timers


commit 3bbb9ec9 (timers: Introduce the concept of timer slack for
legacy timers) does not take the case into account when the timer is
already expired. This broke wireless drivers.

The solution is not to apply slack to already expired timers.

Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Cc: Arjan van de Ven <arjan@linux.intel.com>
parent bd45b7a3
No related branches found
No related tags found
No related merge requests found
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment