2014-04-17 17:04:40

by Alexander Gordeev

[permalink] [raw]
Subject: [PATCH 0/1] ahci: Do not receive interrupts sent by dummy ports

Tejun, David,

I would expect handle_bad_irq()->print_irq_desc() gets called
if dummy port interrupt arrived. Could be a spurious interrupt
complain as well.

Cc: Tejun Heo <[email protected]>
Cc: David Milburn <[email protected]>
Cc: [email protected]

Alexander Gordeev (1):
ahci: Do not receive interrupts sent by dummy ports

drivers/ata/ahci.c | 16 ++++++++++------
1 files changed, 10 insertions(+), 6 deletions(-)

--
1.7.7.6


2014-04-17 17:04:51

by Alexander Gordeev

[permalink] [raw]
Subject: [PATCH 1/1] ahci: Do not receive interrupts sent by dummy ports

In multiple MSI mode all AHCI ports (including dummy) get
assigned separate MSI vectors and (as result of execution
pci_enable_msi_exact() function) separate IRQ numbers,
(mapped to the MSI vectors).

Therefore, although interrupts from dummy ports are not
desired they are still enabled. We do not request IRQs
for dummy ports, but that only means we do not assign
AHCI-specific ISRs to corresponding IRQ numbers.

As result, dummy port interrupts still could come and
traverse all the way from the PCI device to the kernel,
causing unnecessary overhead.

This update disables IRQs for dummy ports and prevents
the described issue.

Signed-off-by: Alexander Gordeev <[email protected]>
Cc: Tejun Heo <[email protected]>
Cc: David Milburn <[email protected]>
Cc: [email protected]
---
drivers/ata/ahci.c | 16 ++++++++++------
1 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index 44d40c7..71e15b7 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -1241,12 +1241,16 @@ int ahci_host_activate(struct ata_host *host, int irq, unsigned int n_msis)
for (i = 0; i < host->n_ports; i++) {
struct ahci_port_priv *pp = host->ports[i]->private_data;

- /* pp is NULL for dummy ports */
- if (pp)
- rc = devm_request_threaded_irq(host->dev,
- irq + i, ahci_hw_interrupt,
- ahci_thread_fn, IRQF_SHARED,
- pp->irq_desc, host->ports[i]);
+ /* Do not receive interrupts sent by dummy ports */
+ if (!pp) {
+ disable_irq(irq + i);
+ continue;
+ }
+
+ rc = devm_request_threaded_irq(host->dev, irq + i,
+ ahci_hw_interrupt,
+ ahci_thread_fn, IRQF_SHARED,
+ pp->irq_desc, host->ports[i]);
if (rc)
goto out_free_irqs;
}
--
1.7.7.6

2014-04-17 17:06:48

by Tejun Heo

[permalink] [raw]
Subject: Re: [PATCH 1/1] ahci: Do not receive interrupts sent by dummy ports

On Thu, Apr 17, 2014 at 06:06:15PM +0200, Alexander Gordeev wrote:
> In multiple MSI mode all AHCI ports (including dummy) get
> assigned separate MSI vectors and (as result of execution
> pci_enable_msi_exact() function) separate IRQ numbers,
> (mapped to the MSI vectors).
>
> Therefore, although interrupts from dummy ports are not
> desired they are still enabled. We do not request IRQs
> for dummy ports, but that only means we do not assign
> AHCI-specific ISRs to corresponding IRQ numbers.
>
> As result, dummy port interrupts still could come and
> traverse all the way from the PCI device to the kernel,
> causing unnecessary overhead.
>
> This update disables IRQs for dummy ports and prevents
> the described issue.
>
> Signed-off-by: Alexander Gordeev <[email protected]>
> Cc: Tejun Heo <[email protected]>
> Cc: David Milburn <[email protected]>
> Cc: [email protected]

David, can you please test the patch?

Thanks.

--
tejun

2014-04-17 17:51:17

by David Milburn

[permalink] [raw]
Subject: Re: [PATCH 1/1] ahci: Do not receive interrupts sent by dummy ports

On 04/17/2014 12:06 PM, Tejun Heo wrote:
> On Thu, Apr 17, 2014 at 06:06:15PM +0200, Alexander Gordeev wrote:
>> In multiple MSI mode all AHCI ports (including dummy) get
>> assigned separate MSI vectors and (as result of execution
>> pci_enable_msi_exact() function) separate IRQ numbers,
>> (mapped to the MSI vectors).
>>
>> Therefore, although interrupts from dummy ports are not
>> desired they are still enabled. We do not request IRQs
>> for dummy ports, but that only means we do not assign
>> AHCI-specific ISRs to corresponding IRQ numbers.
>>
>> As result, dummy port interrupts still could come and
>> traverse all the way from the PCI device to the kernel,
>> causing unnecessary overhead.
>>
>> This update disables IRQs for dummy ports and prevents
>> the described issue.
>>
>> Signed-off-by: Alexander Gordeev <[email protected]>
>> Cc: Tejun Heo <[email protected]>
>> Cc: David Milburn <[email protected]>
>> Cc: [email protected]
>
> David, can you please test the patch?
>


Hi,

I have re-tested successfully, this patch prevents the crash
when using kdump, and I boot tested a system that boots off
ahci and has dummy ports present, no problems seen.

Thanks,
David

2014-04-18 19:56:57

by Tejun Heo

[permalink] [raw]
Subject: Re: [PATCH 1/1] ahci: Do not receive interrupts sent by dummy ports

On Thu, Apr 17, 2014 at 06:06:15PM +0200, Alexander Gordeev wrote:
> In multiple MSI mode all AHCI ports (including dummy) get
> assigned separate MSI vectors and (as result of execution
> pci_enable_msi_exact() function) separate IRQ numbers,
> (mapped to the MSI vectors).
>
> Therefore, although interrupts from dummy ports are not
> desired they are still enabled. We do not request IRQs
> for dummy ports, but that only means we do not assign
> AHCI-specific ISRs to corresponding IRQ numbers.
>
> As result, dummy port interrupts still could come and
> traverse all the way from the PCI device to the kernel,
> causing unnecessary overhead.
>
> This update disables IRQs for dummy ports and prevents
> the described issue.
>
> Signed-off-by: Alexander Gordeev <[email protected]>
> Cc: Tejun Heo <[email protected]>
> Cc: David Milburn <[email protected]>
> Cc: [email protected]

Applied to libata/for-3.15-fixes w/ David's tested-by added.

Thanks.

--
tejun