Commit f00e047efdf9d31c8a7dd7875b411f97cfa7d8e5

Authored by Jeff Chua
Committed by Thomas Gleixner
1 parent bd45b7a385

timers: Fix slack calculation for expired timers

commit 3bbb9ec946 (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: Thomas Gleixner <tglx@linutronix.de>
Cc: Arjan van de Ven <arjan@linux.intel.com>

Showing 1 changed file with 4 additions and 3 deletions Side-by-side Diff

... ... @@ -750,13 +750,14 @@
750 750 unsigned long expires_limit, mask;
751 751 int bit;
752 752  
753   - expires_limit = expires + timer->slack;
  753 + expires_limit = expires;
754 754  
755   - if (timer->slack < 0) /* auto slack: use 0.4% */
  755 + if (timer->slack > -1)
  756 + expires_limit = expires + timer->slack;
  757 + else if (time_after(expires, jiffies)) /* auto slack: use 0.4% */
756 758 expires_limit = expires + (expires - jiffies)/256;
757 759  
758 760 mask = expires ^ expires_limit;
759   -
760 761 if (mask == 0)
761 762 return expires;
762 763