On Tue, Jan 26, 2016 at 04:48:25PM +0100, Thomas Gleixner wrote:
On Tue, 26 Jan 2016, Bjorn Helgaas wrote:
Right. So we could certainly do something like this INVALID_IRQ thingy, but
that looks a bit weird. What would request_irq() return?
If it returns success, then drivers might make the wrong decision. If it
returns an error code, then the i801 one works, but we might have to fix
others anyway.
I was thinking request_irq() could return -EINVAL if the caller passed
INVALID_IRQ. That should tell drivers that this interrupt won't work.
We'd be making request_irq() return -EINVAL in some cases where it
currently returns success. But even though it returns success today,
I don't think the driver is getting interrupts, because the wire isn't
connected.
I think it's better to have a software flag in pci_dev to indicate that there
is no irq line and fix up the (probably few) affected drivers so they avoid
calling request_irq() and take the right action.
We could add an "irq_valid" flag in struct pci_dev and make a new
rule that drivers should check dev->irq_valid before using dev->irq.
But realistically, i801 is the only place that will check irq_valid
because that's the only driver where we know about a problem, so that
seems like sort of a point solution.
Bjorn
.