History

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.

Jeff Chua committed 16 years ago

Commit f00e0471 parent bd45b7a1 file · +4 −3Browse files

Showing the changes to kernel/timer.c (1 of 1 file). Show all

Unified · Split

kernel/timer.c+4−3
@@ -750,13 +750,14 @@ unsigned long apply_slack(struct timer_list *timer, unsigned long expires) · 749 unmodified lines
750750 unsigned long expires_limit, mask;
751751 int bit;
752752
753− expires_limit = expires + timer->slack;
753+ expires_limit = expires;
754754
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% */
756758 expires_limit = expires + (expires - jiffies)/256;
757759
758760 mask = expires ^ expires_limit;
759−
760761 if (mask == 0)
761762 return expires;
762763