Stephen Hemminger <shemminger@linux-foundation.org> writes:
I didn't see anything in disable_irq that would cause it to fail in
the suggested way. But I couldn't quite convince myself we were
race free either. I didn't see anything that was specific to MSI
that would cause something. But switching from level to edge
triggered, and to a lower latency delivery path may have caused
some behavior changes.
I took a look at the underlying side of this.
I don't know if the MSI capability for the forcedeth supports a mask
bit or not. Mine doesn't even have a msi capability. If it doesn't
support a mask bit the pci spec provides not valid way to mask the
interrupt, so what we do is actually disable the msi capability.
At which point we might get weird INTx interactions.
We have a similar case with ioapics and INTx that also turns
a hardware level disable into a reroute to another irq command.
So I'm going to take a look and see how infrequently we can use
hardware level disabled.
Since it looks like hardware level disables tend to be creatively
implemented I recommend using disable_irq as little as possible.
Eric
-