[BUGREPORT] DDE timer handling
Andre Puschmann
andre.puschmann at imms.de
Tue Mar 17 09:28:07 CET 2009
Hi list,
I am working on a port of an Ethernet-based fieldbus stack to TUDOS. The
stack is a Linux kernel module so I am utilizing DDE as a wrapper for this.
Things seem to work like this: the module creates a kernel thread which
does the network polling in an endless loop. The loop basically looks
like this:
while (1)
receive_data()
process_data()
send_data()
schedule_func()
Here, schedule_func() does the following:
set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(1);
Which I interpret as something like wait for 10ms (assume HZ==100) or an
event to occur and then restart the loop. schedule_timeout() creates a
new timer with the specified timeout and calls plain schedule().
Ok, this works quite good up to an arbitrary point where the complete
system stops working. Sometimes, the system runs 2min, sometimes 1h and
sometimes 3h, so it varies a lot. After the stuck occurs, using jdb, I
see the kernel_thread waiting for a message to be woken up. On the other
hand, the timer_thread which has to throw this messages is in idle state.
I am still a L4 beginner, especially in debugging its subsystems.
However, for me that looks like we lost a timer event somewhere. I
replaced schedule_timeout() with msleep(10) which omits the timer stuff
and that works for me here for hours without any stuck.
Before further tracking down this issue I want to make sure that you
guys don't have any patch pending that fixes that problem, have u?
Best regards,
Andre
More information about the l4-hackers
mailing list