irq_disable (9) - Linux Man Pages
irq_disable: Mark interrupt disabled
irq_disable - Mark interrupt disabled
void irq_disable(struct irq_desc
- irq descriptor which should be disabled
If the chip does not implement the irq_disable callback, we use a lazy disable approach. That means we mark the interrupt disabled, but leave the hardware unmasked. That's an optimization because we avoid the hardware access for the common case where no interrupt happens after we marked it disabled. If an interrupt happens, then the interrupt flow handler masks the line at the hardware level and marks it pending.
If the interrupt chip does not implement the irq_disable callback, a driver can disable the lazy approach for a particular irq line by calling 'irq_set_status_flags(irq, IRQ_DISABLE_UNLAZY)'. This can be used for devices which cannot disable the interrupt at the device level under certain circumstances and have to use disable_irq[_nosync] instead.
Thomas Gleixner <tglx [at] linutronix.de>
Ingo Molnar <mingo [at] elte.hu>