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