提交 f00e047e 编写于 作者: J Jeff Chua 提交者: Thomas Gleixner

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: NThomas Gleixner <tglx@linutronix.de>
Cc: Arjan van de Ven <arjan@linux.intel.com>
上级 bd45b7a3
......@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册