From: Andrew Morton <akpm@linux-foundation.org>
To: Chris Peterson <cpeterso@cpeterso.com>
Cc: linux-kernel@vger.kernel.org, tglx@linutronix.de
Subject: Re: [RFC] mod_timer() helper functions?
Date: Sun, 17 May 2009 01:03:47 -0700 [thread overview]
Message-ID: <20090517010347.f25843f9.akpm@linux-foundation.org> (raw)
In-Reply-To: <a24804730905170050m16bfb81cj6c9ee4c99ac9d08f@mail.gmail.com>
On Sun, 17 May 2009 00:50:55 -0700 Chris Peterson <cpeterso@cpeterso.com> wrote:
> >> Reviewing the kernel's nearly one-thousand calls to mod_timer(), there
> >> are three basic patterns:
> >>
> >> __* multi-second timeouts
> >> __* millisecond timeouts
> >> __* +1 jiffie ASAP events
> >>
>
> Is there a functional difference between the following "expire this
> timer ASAP" statements?
>
> mod_timer(timer, jiffies + 1); /* 48 uses */
> mod_timer(timer, jiffies); /* 44 uses */
> mod_timer(timer, jiffies - 1); /* 6 uses */
That's something which has always worried me. Lots of code does:
mod_timer(timer, jiffies + 1);
(for varying values of "1"). What happens if this thread of control
then gets stalled for a couple of jiffies. Say it gets preempted or
there's a long interrupt or whatever. So there's a several-jiffy
interval between the caller evaluating jiffies+1 and the entry to
mod_timer().
>From my reading, we'll hit
int i;
/* If the timeout is larger than 0xffffffff on 64-bit
* architectures then we use the maximum timeout:
*/
if (idx > 0xffffffffUL) {
idx = 0xffffffffUL;
expires = idx + base->timer_jiffies;
}
i = (expires >> (TVR_BITS + 3 * TVN_BITS)) & TVN_MASK;
vec = base->tv5.vec + i;
and the timer gets scheduled at some time in the far-distant future!
But this is such a glaring and huge problem that surely it cannot
exist. But I don't know why not.
If the bug _does_ exist then mod_timer(timer, jiffies - 1) will set the
timer to go off in the far future. mod_timer(timer, jiffies) will
usually make it go off real soon now, but it's scary. mod_timer(timer,
jiffies + 1) is safer, but still vulnerable.
next prev parent reply other threads:[~2009-05-17 8:05 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-16 7:36 [RFC] mod_timer() helper functions? Chris Peterson
2009-05-17 6:03 ` Andrew Morton
2009-05-17 7:50 ` Chris Peterson
2009-05-17 8:03 ` Andrew Morton [this message]
2009-05-17 12:13 ` Thomas Gleixner
2009-05-18 7:14 ` Andi Kleen
2009-05-20 7:11 ` Chris Peterson
2009-05-20 8:14 ` Andi Kleen
2009-05-21 5:11 ` Chris Peterson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090517010347.f25843f9.akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=cpeterso@cpeterso.com \
--cc=linux-kernel@vger.kernel.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox