Re: [PATCH] PCI/LINK: bw_notification: Do not leave interrupt handler NULL
From: Lukas Wunner
Date: Tue Mar 19 2019 - 15:25:55 EST
On Mon, Mar 18, 2019 at 08:12:04PM -0500, Alexandru Gagniuc wrote:
> A threaded IRQ with a NULL handler does not work with level-triggered
> interrupts. request_threaded_irq() will return an error:
>
> genirq: Threaded irq requested with handler=NULL and !ONESHOT for irq 16
> pcie_bw_notification: probe of 0000:00:1b.0:pcie010 failed with error -22
>
> For level interrupts we need to silence the interrupt before exiting
> the IRQ handler, so just clear the PCI_EXP_LNKSTA_LBMS bit there.
>
> Reported-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> Signed-off-by: Alexandru Gagniuc <mr.nuke.me@xxxxxxxxx>
I've tested this on my Ivy Bridge MacBook Pro which uses INTx on root and
downstream ports and I'm not seeing probe errors, so:
Tested-by: Lukas Wunner <lukas@xxxxxxxxx>
> @@ -67,8 +77,8 @@ static irqreturn_t pcie_bw_notification_handler(int irq, void *context)
> __pcie_print_link_status(dev, false);
> up_read(&pci_bus_sem);
>
> + pcie_capability_read_word(port, PCI_EXP_LNKSTA, &link_status);
> pcie_update_link_speed(port->subordinate, link_status);
> - pcie_capability_write_word(port, PCI_EXP_LNKSTA, events);
> return IRQ_HANDLED;
> }
I'd suggest leaving the call to pcie_update_link_speed() in
pcie_bw_notification_irq() to avoid the duplicate read of the
Link Status register.
With that addressed,
Reviewed-by: Lukas Wunner <lukas@xxxxxxxxx>
Thanks,
Lukas