最近在寫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);
}
謝謝