[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20190319192550.5lxfm3h2jnaip3on@wunner.de>
Date: Tue, 19 Mar 2019 20:25:50 +0100
From: Lukas Wunner <lukas@...ner.de>
To: Alexandru Gagniuc <mr.nuke.me@...il.com>
Cc: bhelgaas@...gle.com, austin_bolen@...l.com,
alex_gagniuc@...lteam.com, keith.busch@...el.com,
Shyam_Iyer@...l.com, okaya@...nel.org,
torvalds@...ux-foundation.org, linux-pci@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH] PCI/LINK: bw_notification: Do not leave interrupt
handler NULL
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@...ux-foundation.org>
> Signed-off-by: Alexandru Gagniuc <mr.nuke.me@...il.com>
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@...ner.de>
> @@ -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@...ner.de>
Thanks,
Lukas
Powered by blists - more mailing lists