Re: time_after - what on earth???

From: Rene Herman
Date: Tue Sep 11 2007 - 19:16:42 EST


On 09/12/2007 01:09 AM, Björn Steinbrink wrote:
On 2007.09.12 00:19:09 +0200, Rene Herman wrote:
On 09/12/2007 12:15 AM, Adrian McMenamin wrote:

On 11/09/2007, Rene Herman <rene.herman@xxxxxxxxx> wrote:
On 09/12/2007 12:05 AM, Adrian McMenamin wrote:

OK, why does this line occasionally return true:

What exactly is "occassionally"? Does it happen more than once per
boot? If not, and it happens after a certain time after booting, it
might be wrapping of the jiffie counter (see below).

if ((maple_dev->interval > 0) && (jiffies >maple_dev->when))

while this one never does (no other changes made):

if ((maple_dev->interval > 0) && (time_after(jiffies, maple_dev->when)))
Is maple_dev->when an unsigned long?

Yes. Does that make a difference?
If it had been a signed type, it could've wrapped to something you didn't expect, explaining the difference at least...

With an unsigned long, the only diference should be that time_after() deals with jiffie wrapping which I assume is not an actual problem here. I'll retreat into the shades again... ;-(

If "occasionally" is limited to once per boot, it might be jiffie
wrapping. IIRC jiffies are initialized so that they wrap after about 5
minutes of uptime to reveal such bugs without forcing you to wait for
ages just to have the counter wrap for the first time.

Yes, but if jiifie wrapping was the problem, I'd expect the contrary behaviour with the time_after() one hitting while the > one does not.

Rene.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/