On 8/30/06, Rik van Riel <riel@xxxxxxxxxxx> wrote:
Rick Brown wrote: > Hi, > > In my driver (Process context), I have written the following code: > > -------------------------------------------- > spin_lock(lock) > ... > //Critical section to manipulate driver data ... interrupt hits here interrupt handler tries to grab the spinlock, which is already taken *BOOM* > spin_u lock(lock) > --------------------------------------------- >
The interrupt handler TRIES to grab the spinlock, which is already taken. Why will it "BOOM"? Wouldn't the interrupt handler busy wait, waiting for the lock? Am I missing something here? Rajat
> I have written similar code in my interrupt handler (Interrupt > context). The driver data is not accessed from anywhere else. Is my > code safe from any potential concurrency issues? Is there a need to > use spin_lock_irqsave()? In both the places? You need to use spin_lock_irqsave() from process context. From the interrupt handler itself it doesn't hurt, but it shouldn't matter much since interrupt handlers should not get preempted.
-- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/