Hi,
I have one issue and would like to get some expert advise from the group. The below shown code snippet gives some idea about the scenario. I have basically one function (func_1) which does a wake_up after processing some information. Once the wake_up is executed the system crashes.
So to debug this, i've put printks after the add_wait_queue() and schedule function to capture the functions that gets executed with a wake_up... but for no help.. Im unable to find the thread which gets executed after the wake_up.
I'm wondering how to capture or debug which thread/function gets the CPU when this wake_up has been executed... Any pointer would be highly appreciable.
How is such a situation usually debugged?? Can such a context switching be hooked..
/* Wait on here when we're waiting device to be ready */ wait_queue_head_t waitDev;
void func_1( struct func_arg*) {
/*..Do some useful work */
wake_up(&waitDev); /* crash occurs here */ }
int sec_func (struct func_arg2 *) {
/* some processing work done here */ .... .. set_current_state(TASK_UNINTERRUPTIBLE); add_wait_queue(&waitDev, &wait); spin_unlock(mutex); schedule(); remove_wait_queue(&waitDev, &wait); spin_lock(chip->mutex);
/* some more work is being done here */
}Thanks in Advance, Gromer