最近在写device driver,有需要去disable_irq,但和enable_irq不会成对
所以用了一个disable_irq_count来避免reentrance
又为了保护disable_irq_count,使用了spin_lock
后来打开CONFIG_DEBUG_ATOMIC_SLEEP才发现
disable_irq会sleep,所以不能用在spin_lock内
所以想请教一下要用什么方式才能保护好disable_irq_count,
让disable_irq只会执行一次
code:
void disableInterrupt() {
spin_lock_saveirq(&lock, flag);
if(disable_irq_count == 0) {
disable_irq(irq);
disable_irq_count++;
}
spin_lock_irqrestore(&lock, flag);
}
谢谢