Re: [Q] jiffies overflow & timers.

From: Ihar 'Philips' Filipau
Date: Mon Nov 17 2003 - 16:03:18 EST


Richard B. Johnson wrote:

Use jiffies as other modules use it:

tim = jiffies + TIMEOUT_IN_HZ;
while(time_before(jiffies, tim))
{
if(what_im_waiting_for())
break;
current->policy |= SCHED_YIELD;
schedule();
}
//
// Note that somebody could have taken the CPU for many seconds
// causing a 'timeout', therefore, you need to add one more check
// after loop-termination:
//
if(what_im_waiting_for())
good();
else
timed_out();

Overflow is handled up to one complete wrap of jiffies + TIMEOUT. It's
only the second wrap that will fail and if you are waiting several
months for something to happen in your code, the code is broken.


Thanks! Looks & sounds sane.

Will try to apply this to my case.
what_im_waiting_for() == 'any expired timer'. I'm generating event to upper layer, if timer wasn't canceled before. This is network layer implementation - e.g. if line is Okay for some specified time, we need to generate event that line is 'up'. Or if we didn't get positive ack for some specified time resend payload. Something like this.

And sure you example needs to be enhanced for the case when timer gets canceled before. Doable in anyway.

You example implies I have to have something I can call schedule() on - currently I'm running without any user space part. To follow your advice I will need to create process a la kswapd/keventd?

P.S. BTW it looks like that tcp_timer.c does exactly what I do right now - this is 2.4.22 - hope 2.6 handles this correctly? I had enlightenment to take a look into tcp - tcp has to have timers - but found (as it seems) bug...

--
Ihar 'Philips' Filipau / with best regards from Saarbruecken.
-- _ _ _
"... and for $64000 question, could you get yourself |_|*|_|
vaguely familiar with the notion of on-topic posting?" |_|_|*|
-- Al Viro @ LKML |*|*|*|

-
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/