scsi: pm80xx: Tie the interrupt name to the module instance
authorVikram Auradkar <auradkar@google.com>
Thu, 14 Nov 2019 10:09:09 +0000 (15:39 +0530)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 20 Nov 2019 02:37:34 +0000 (21:37 -0500)
With MSI-x enabled, the interrupt instances are <prefix><index> where the
prefix is fixed for all module instances, making it a little harder to
track down what's what.

Link: https://lore.kernel.org/r/20191114100910.6153-13-deepak.ukey@microchip.com
Acked-by: Jack Wang <jinpu.wang@cloud.ionos.com>
Signed-off-by: Vikram Auradkar <auradkar@google.com>
Signed-off-by: Deepak Ukey <deepak.ukey@microchip.com>
Signed-off-by: Viswas G <Viswas.G@microchip.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/pm8001/pm8001_init.c
drivers/scsi/pm8001/pm8001_sas.h

index c0c9551..c6d9da7 100644 (file)
@@ -894,7 +894,6 @@ static u32 pm8001_setup_msix(struct pm8001_hba_info *pm8001_ha)
        u32 number_of_intr;
        int flag = 0;
        int rc;
-       static char intr_drvname[PM8001_MAX_MSIX_VEC][sizeof(DRV_NAME)+3];
 
        /* SPCv controllers supports 64 msi-x */
        if (pm8001_ha->chip_id == chip_8001) {
@@ -915,14 +914,16 @@ static u32 pm8001_setup_msix(struct pm8001_hba_info *pm8001_ha)
                                rc, pm8001_ha->number_of_intr));
 
        for (i = 0; i < number_of_intr; i++) {
-               snprintf(intr_drvname[i], sizeof(intr_drvname[0]),
-                               DRV_NAME"%d", i);
+               snprintf(pm8001_ha->intr_drvname[i],
+                       sizeof(pm8001_ha->intr_drvname[0]),
+                       "%s-%d", pm8001_ha->name, i);
                pm8001_ha->irq_vector[i].irq_id = i;
                pm8001_ha->irq_vector[i].drv_inst = pm8001_ha;
 
                rc = request_irq(pci_irq_vector(pm8001_ha->pdev, i),
                        pm8001_interrupt_handler_msix, flag,
-                       intr_drvname[i], &(pm8001_ha->irq_vector[i]));
+                       pm8001_ha->intr_drvname[i],
+                       &(pm8001_ha->irq_vector[i]));
                if (rc) {
                        for (j = 0; j < i; j++) {
                                free_irq(pci_irq_vector(pm8001_ha->pdev, i),
@@ -963,7 +964,7 @@ intx:
        pm8001_ha->irq_vector[0].irq_id = 0;
        pm8001_ha->irq_vector[0].drv_inst = pm8001_ha;
        rc = request_irq(pdev->irq, pm8001_interrupt_handler_intx, IRQF_SHARED,
-               DRV_NAME, SHOST_TO_SAS_HA(pm8001_ha->shost));
+               pm8001_ha->name, SHOST_TO_SAS_HA(pm8001_ha->shost));
        return rc;
 }
 
index f7be7b8..a55b03b 100644 (file)
@@ -541,6 +541,8 @@ struct pm8001_hba_info {
        struct pm8001_ccb_info  *ccb_info;
 #ifdef PM8001_USE_MSIX
        int                     number_of_intr;/*will be used in remove()*/
+       char                    intr_drvname[PM8001_MAX_MSIX_VEC]
+                               [PM8001_NAME_LENGTH+1+3+1];
 #endif
 #ifdef PM8001_USE_TASKLET
        struct tasklet_struct   tasklet[PM8001_MAX_MSIX_VEC];