Commit f00e047efdf9d31c8a7dd7875b411f97cfa7d8e5
Committed by
Thomas Gleixner
1 parent
bd45b7a385
Exists in
master
and in
39 other branches
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
kernel/timer.c
... | ... | @@ -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 |