参考:http://stackoverflow.com/questions/4752031/why-cant-you-sleep-while-holding-spinlock
当内核进程A拥有spinlock的时候,发生中断,且ISR也想拥有spinlock,所以ISR会一直自旋下去。
所以,加入一定要在ISR中使用spinlock的话,记得使用在内核进程中获取spinlock之前diasble interrupt.
Example: your driver is executing and has just taken out a lock that controls access to its device. While the lock is held, the device issues an interrupt, which causes your interrupt handler to run. The interrupt handler, before accessing the device, must also obtain the lock. Taking out a spinlock in an interrupt handler is a legitimate thing to do; that is one of the reasons that spinlock operations do not sleep. But what happens if the interrupt routine executes in the same processor as the code that took out the lock originally? While the interrupt handler is spinning, the noninterrupt code will not be able to run to re;ease the lock. That processor will spin forever.
本文探讨了在内核中使用Spinlock时,中断处理程序如何正确获取锁以避免死锁情况的发生,强调在中断处理程序开始访问受保护资源前禁用中断的重要性。
1035

被折叠的 条评论
为什么被折叠?



