中断处理函数用spinlock注意点

参考: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.

 

你可能感兴趣的:(c,linux,内核,spinlock,ISR)