lkml.org 
[lkml]   [2003]   [Nov]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [Q] jiffies overflow & timers.
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@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:58    [W:0.055 / U:0.580 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site