[lkml]   [2008]   [Mar]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: use of preempt_count instead of in_atomic() at leds-gpio.c
I wrote:
> Tetsuo Handa wrote:
>> So, it is impossible to know whether I am inside a spinlock or not.
>> OK. That's not what I want to do.
>> I want to make sure that my code (not a device driver) is called only
>> from a context where use of down()/mutex_lock()/kmalloc(GFP_KERNEL)/
>> get_user_pages()/kmap() etc. are permitted.
>> Is "if (in_atomic()) return;" check a correct method for avoiding
>> deadlocks when my code was accidentally called from a context
>> where use of down()/mutex_lock()/kmalloc(GFP_KERNEL)/get_user_pages()/
>> kmap() etc. are not permitted?

No. Quoting Andrew: "in_atomic() returns false inside spinlock on
non-preemptible kernels."

> You shouldn't sleep while holding a spinlock. As soon as another thread

or interrupt handler or tasklet

> attempts to take the spinlock, it will be stuck in a busy-wait loop.
Stefan Richter
-=====-==--- --== =-=-=

 \ /
  Last update: 2008-03-21 18:05    [W:0.177 / U:0.076 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site