diff options
author | Heiner Kallweit <hkallweit1@gmail.com> | 2015-12-06 21:56:33 +0100 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2015-12-07 15:40:50 +0100 |
commit | 7e22c0024cf89404407f19955eab39b6d66de7b6 (patch) | |
tree | 6f8731f8591421312c969ea0782073f38ab16ecd /drivers/ata | |
parent | ata: ahci_brcmstb: remove unused definitions (diff) | |
download | linux-7e22c0024cf89404407f19955eab39b6d66de7b6.tar.xz linux-7e22c0024cf89404407f19955eab39b6d66de7b6.zip |
ata: core: fix irq description on AHCI single irq systems
On my machine with single irq AHCI just the PCI id is printed as
description in /proc/interrupts.
I found a related discussion from beginning of this year:
http://www.gossamer-threads.com/lists/linux/kernel/2117335
Seems like 4f37b504768c ("libata: Use dev_name() for request_irq() to
distinguish devices") tried to fix displaying a proper interrupt
description for one scenario but broke it for another one.
The mentioned discussion ended in the current situation being
considered as broken but w/o a patch to fix it.
The following patch is based on a proposal in this mail thread.
Now the interrupt is properly described as:
PCI-MSI 512000-edge ahci[0000:00:1f.2]
By combining both values also the scenario that commit 4f37b504768c
("libata: Use dev_name() for request_irq() to distinguish devices")
refers to should still be fine. There it should look like this now:
ahci[20100000.ide]
Using managed memory allocation ensures that the irq description
lives at least as long as the interrupt.
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Diffstat (limited to 'drivers/ata')
-rw-r--r-- | drivers/ata/libata-core.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index b79cb10e289e..60e368610c74 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -6223,6 +6223,7 @@ int ata_host_activate(struct ata_host *host, int irq, struct scsi_host_template *sht) { int i, rc; + char *irq_desc; rc = ata_host_start(host); if (rc) @@ -6234,8 +6235,14 @@ int ata_host_activate(struct ata_host *host, int irq, return ata_host_register(host, sht); } + irq_desc = devm_kasprintf(host->dev, GFP_KERNEL, "%s[%s]", + dev_driver_string(host->dev), + dev_name(host->dev)); + if (!irq_desc) + return -ENOMEM; + rc = devm_request_irq(host->dev, irq, irq_handler, irq_flags, - dev_name(host->dev), host); + irq_desc, host); if (rc) return rc; |