Am Mittwoch, 24. Februar 2010 22:44:53 schrieb Rick L. Vinyard, Jr.:
The issue, as I understand it is that non-interrupt code may obtain the
lock and then the interrupt code is executed... hence the deadlock and the
need to use spin_lock_irqsave() and spin_unlock_irqrestore().
Yes.
If that is correct, is there any problem with the following approach?
Why not always a workqueue or alternatively spin_lock_irq() when
you are not in interrupt? This approach seems needlessly complicated.
Secondly, when you hold a spinlock, you must use GFP_ATOMIC.
GFP_NOIO is insufficient.
Regards
Oliver