side effects of calling interruptible_sleep_on_timeout()
Srivatsa S. Bhat
srivatsa.bhat at linux.vnet.ibm.com
Wed Apr 25 06:26:14 EDT 2012
On 04/25/2012 03:36 AM, Philipp Ittershagen wrote:
> Hi Devendra,
>
> On Tue, Apr 24, 2012 at 03:24:23PM +0530, devendra rawat wrote:
>> Hi,
>> A switch driver is causing soft lockup on Montavista Linux Kernel
>> 2.6.10 system.
>> While browsing through the code of the driver. I came across a snippet
>> where after disabling the interrupts
>> a call is made to interruptible_sleep_on_timeout().
>> The code snippet is like
>> cli();
>> init_waitqueue_head(&queue);
>> interruptible_sleep_on_timeout(&queue, USEC_TO_JIFFIES(usec));
>> thread_check_signals();
>> sti();
>> I need to know the side effect of this sort of code, can it be
>> responsible for the softlockup of the system ? Its a PowerPC based
>> system.
>
> you cannot call sleep functions after disabling interrupts, because no
> interrupt will arrive for the scheduler to see the timeout and resume your
> task.
>
Yes, that's right. Also, in general, sleeping inside atomic sections (eg.,
sections with interrupts disabled or preempt disabled) is wrong. There is a
config option in the kernel that you can use to enable
sleep-inside-atomic-section-checking (CONFIG_DEBUG_ATOMIC_SLEEP I believe),
which can help you pin-point such bugs easily.
Regards,
Srivatsa S. Bhat
More information about the Kernelnewbies
mailing list