At Tue, 20 Jan 2015 15:46:13 +0200, Andy Shevchenko wrote:
On Tue, Jan 20, 2015 at 2:42 PM, Takashi Iwai tiwai@suse.de wrote:
At Wed, 07 Jan 2015 15:59:35 +0100, Takashi Iwai wrote:
[]
I recalled finally why I didn't want this sort of changes. Namely, devm_request_irq() can't be used safely for the shared PCI interrupts.
There is a small open window between the driver's remove call (i.e. card's private_free or device free calls) and the call of devres_release_all(). The registered irq handler still remains during this window. When an irq is triggered from another shared device during this, it goes to the remaining irq handler and accesses the hardware unexpectedly. In the case of snd_fm801_interrupt(), it's not too bad, though.
Don't we have interrupts disabled on ->remove() stage?
It's a shared irq, so it doesn't help even if your device disables the irq. The other device can trigger the irq line at any time.
Takashi