Hi All,
I have a hardware that sends in interrupts on every command that is passed to it.
What I do is when I get the initial interrupt I schedule the tasklet and carry out the device initialization from the tasklet. The tasklet is the ultimate action performer on any interrupt. The ISR just acknowledges and clears the interrupt.
The tasklet itself sends in commands to initialize the hardware. We do a interruptible_sleep_on() after a command is sent (wait for wake_up). When a command is sent an interrupt occurs and again the tasklet is scheduled (I guess so). Now from some other part in the tasklet I send a wake_up_interruptible(). This goes into trouble and the kernel ends up saying "kernel not syncing". If I remove interruptible_sleep_on the driver at least gets loaded and wake_up_interruptible() are sent..
I guess the problem is synchronization of these events. At present I have not used any locks. Can any one help me understand how I can take care of this scenario? The locking I will have to use should work for SMP too. Any pointers with easy to understand example codes is more than welcome. ?
Cheers!
-Jinu
Novice slowly trying to become guru!