[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