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

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
750 unsigned long expires_limit, mask;750 unsigned long expires_limit, mask;
751 int bit;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 expires_limit = expires + (expires - jiffies)/256;758 expires_limit = expires + (expires - jiffies)/256;
757 759
758 mask = expires ^ expires_limit;760 mask = expires ^ expires_limit;
759
760 if (mask == 0)761 if (mask == 0)
761 return expires;762 return expires;
762 763