Regarding threaded irq and normal irq

anish singh anish198519851985 at gmail.com
Tue Sep 6 04:27:22 EDT 2011


On Tue, Sep 6, 2011 at 10:59 AM, anish singh
<anish198519851985 at gmail.com> wrote:
> On Tue, Sep 6, 2011 at 10:51 AM, Mulyadi Santosa
> <mulyadi.santosa at gmail.com> wrote:
>> Hi :)
>>
>> On 06/09/2011, sandeep kumar <coolsandyforyou at gmail.com> wrote:
>>> Hmm..But when i tried to take a mutex lock in threaded_irq, it is throwing a
>>> warning message
>>> "BUG: sleeping function called from invalid context"... So i was wondering
>>> which way it is..
>>
>> Please don't top post :)
>>
>> Anyway, regarding that "BUG:" message, could it be that mutex function
>> mistakenly assume it's called inside top half, thus bails out since
> How can mutex assume? IMHO the message would have printed
> because sleeping would be forbidden there but again AFAIK in the threaded
> handler we can do I2C transactions which can sleep.So kind of
> paradox there.

>>something like using in_irq() inside the threaded irq handler?
I think after going thorough the code of mutex_lock we can find out the
reason why it is printing the warning eventhough we are calling it in a
threaded handler i.e. kernel thread.

>From the code:
126 /**
127  * might_sleep - annotation for functions that can sleep
128  *
129  * this macro will print a stack trace if it is executed in an atomic
130  * context (spinlock, irq-handler, ...).

129 line no is important.
This might_sleep is called by mutex_lock function and in the defintion
of __might_sleep  i found below code.I think this below if condition is
false because irqs_disabled is true.This causes the warning.

         if ((preempt_count_equals(preempt_offset) && !irqs_disabled()) ||
             system_state != SYSTEM_RUNNING || oops_in_progress)
               return;

Hope i am right?

> ps:I have seen the code where sandeep is doing the taking the mutex lock.
> He is taking mutex lock at the beginging of the handler and releasing
> at the end.
>> sleeping is forbidden there? which mutex function do you use? (sorry I
>> don't follow every locking functions exist now)
>>
>> --
>> regards,
>>
>> Mulyadi Santosa
>> Freelance Linux trainer and consultant
>>
>> blog: the-hydra.blogspot.com
>> training: mulyaditraining.blogspot.com
>>
>> _______________________________________________
>> Kernelnewbies mailing list
>> Kernelnewbies at kernelnewbies.org
>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>>
>



More information about the Kernelnewbies mailing list