Messages in this thread | | | Date | Mon, 21 Nov 2005 09:13:10 +0800 | From | liyu <> | Subject | Re: [Question] spin_lock in interrupt handler. |
| |
Steven Rostedt wrote:
>On Fri, 2005-11-18 at 16:37 +0800, liyu wrote: > > >>Hi, every one in LKML. >> >> I have one question about how to use spin_lock. >> >> I read Documentation/spinlocks.txt wrote by Linus. The Lesson 1 and >>2 are simple for me. >>But I confused in Lesson 3. The most doublt is why we can not use >>spin_lock_irq*() version in >>interrupt handler? >> >> At i386, I known the interrupt is disabled in interrupt handler. I >>think this feature is >>supplied in handware-level. The spin_lock_irqrestore() will use 'sti' >>instruction internal, it will change interrupt mask bit in FLAGS >>register, do this have re-enable interrupt, even in interrput handler? I >>can not sure this. >> >> > >Hello once again Liyu ;-) > >I don't see where he says you can't use spin_lock_irq* in interrupt >handlers. He only says that you are safe to use the non-irq* versions >IFF (if and only if) the locks are not used in interrupts. > >So, (copied from the text itself): > >--- >The reasons you mustn't use these versions if you have interrupts that >play with the spinlock is that you can get deadlocks: > > spin_lock(&lock); > ... > <- interrupt comes in: > spin_lock(&lock); >--- > >If you hold a spin lock without interrupts disabled, and an interrupt >happens on the same CPU that holds the lock, and that interrupt handler >tries to grab the lock it will just spin until that lock is released, >which will _never_ happen, since the lock is held by the process that >was interrupted, and will not run until the interrupt (that's spinning) >is done. So you have a deadlock. > >Clear? > >-- Steve > > > > >- >To unsubscribe from this list: send the line "unsubscribe linux-kernel" in >the body of a message to majordomo@vger.kernel.org >More majordomo info at http://vger.kernel.org/majordomo-info.html >Please read the FAQ at http://www.tux.org/lkml/ > > > > Hi, Steven, Nice to meet you too ;) (These are the words that I first studied in English class.)
Yes, I am clear, I think I understand it in wrong direction before.
Good Luck.
-liyu
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |