1. 实现代码如下:
#define local_irq_enable() do { raw_local_irq_enable(); } while (0) #define local_irq_disable() do { raw_local_irq_disable(); } while (0) #define raw_local_irq_disable() arch_local_irq_disable() #define raw_local_irq_enable() arch_local_irq_enable() #define arch_local_irq_disable() 与CPU架构有关 #define arch_local_irq_enable() 与CPU架构有关从local_irq_enable实现来看, 实现内部并没有做count计数,那么不管我之前做了多少次local_irq_disable, 只需要做一次local_irq_enable,即可.
2. 不能嵌套会有什么影响?
类似于spin_lock_irq()不能做嵌套使用.
例如:
spin_lock_irq(&lock_a); ... ... spin_lock_irq(&lock_b); ... ... spin_unlock_irq(&lock_b); ... /*这个位置,中断已被enable.*/ ... /*这一段位置,可能被中断,发生意想不到的问题*/ spin_unlock_irq(&lock_a);使用spin_lock/unlock_irq()及spin_lock/unlock_irqsave()相关; 要异常小心.
3. 为什么local_irq_enable/disable没有使用count计数,这个有待进一步了解.或者为什么这样设计?
如果分析有错误,希望一超讨论.8368655502