Messages in this thread | | | Date | Mon, 17 Nov 2003 16:28:48 -0500 (EST) | From | "Richard B. Johnson" <> | Subject | Re: [Q] jiffies overflow & timers. |
| |
On Mon, 17 Nov 2003, Ihar 'Philips' Filipau wrote:
> 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? >
schedule() is the kernel procedure that gives the CPU to somebody while your code is waiting for something to happen. You cannot call that in an interrupt or when a lock is held.
current->policy is a member of 'current' a pointer to a structure that completely defines the current task being executed. It exists inside the kernel. You don't need to create a task. Lots of tasks already exist.
Cheers, Dick Johnson Penguin : Linux version 2.4.22 on an i686 machine (797.90 BogoMips). Note 96.31% of all statistics are fiction.
- 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/
| |