AHCI: Make distinct names for ports in /proc/interrupts
authorAlexander Gordeev <agordeev@redhat.com>
Tue, 21 May 2013 23:53:48 +0000 (08:53 +0900)
committerTejun Heo <tj@kernel.org>
Tue, 21 May 2013 23:53:48 +0000 (08:53 +0900)
Currently all interrupts assigned to AHCI ports show up in
'/proc/interrupts' as 'ahci'. This fix adds port numbers as
suffixes and hence makes the descriptions distinct.

Reported-by: Jan Beulich <JBeulich@suse.com>
Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
drivers/ata/ahci.c
drivers/ata/ahci.h
drivers/ata/libahci.c

index 251e57d..4d1c672 100644 (file)
@@ -1142,9 +1142,11 @@ int ahci_host_activate(struct ata_host *host, int irq, unsigned int n_msis)
                return rc;
 
        for (i = 0; i < host->n_ports; i++) {
+               struct ahci_port_priv *pp = host->ports[i]->private_data;
+
                rc = devm_request_threaded_irq(host->dev,
                        irq + i, ahci_hw_interrupt, ahci_thread_fn, IRQF_SHARED,
-                       dev_driver_string(host->dev), host->ports[i]);
+                       pp->irq_desc, host->ports[i]);
                if (rc)
                        goto out_free_irqs;
        }
index b830e6c..05adf29 100644 (file)
@@ -306,6 +306,7 @@ struct ahci_port_priv {
        int                     fbs_last_dev;   /* save FBS.DEV of last FIS */
        /* enclosure management info per PM slot */
        struct ahci_em_priv     em_priv[EM_MAX_SLOTS];
+       char                    *irq_desc;      /* desc in /proc/interrupts */
 };
 
 struct ahci_host_priv {
index 34c8216..3797a7b 100644 (file)
@@ -2234,6 +2234,16 @@ static int ahci_port_start(struct ata_port *ap)
        if (!pp)
                return -ENOMEM;
 
+       if (ap->host->n_ports > 1) {
+               pp->irq_desc = devm_kzalloc(dev, 8, GFP_KERNEL);
+               if (!pp->irq_desc) {
+                       devm_kfree(dev, pp);
+                       return -ENOMEM;
+               }
+               snprintf(pp->irq_desc, 8,
+                        "%s%d", dev_driver_string(dev), ap->port_no);
+       }
+
        /* check FBS capability */
        if ((hpriv->cap & HOST_CAP_FBS) && sata_pmp_supported(ap)) {
                void __iomem *port_mmio = ahci_port_base(ap);