scsi: hisi_sas: Remove hisi_hba->timer for v3 hw
authorXiang Chen <chenxiang66@hisilicon.com>
Mon, 22 Jan 2024 06:25:47 +0000 (14:25 +0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 25 Jan 2024 02:11:54 +0000 (21:11 -0500)
hisi_hba->timer is not used for v3 hw but there are two places that some
operations related to hisi_hba->timer are called by v3 hw:

 - Deleting the timer in function hisi_sas_v3_hw() which is only for v3 hw;

 - Deleting the timer in function hisi_sas_controller_reset_prepare() which
   is common for v1/v2/v3 hw.

We can remove the timer in the first case, but for the second scenario we
need to remove it only for v3 hw, so check hw->sht which is NULL only for
v3 hw before deleting hisi_hba->timer.

Signed-off-by: Xiang Chen <chenxiang66@hisilicon.com>
Link: https://lore.kernel.org/r/1705904747-62186-5-git-send-email-chenxiang66@hisilicon.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/hisi_sas/hisi_sas_main.c
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c

index 0b66c733a40d2244754e69994fbe69ceef2b0ab5..097dfe4b620dce85736b8a0d5cf7f4b3c4842e9b 100644 (file)
@@ -1507,7 +1507,12 @@ void hisi_sas_controller_reset_prepare(struct hisi_hba *hisi_hba)
        scsi_block_requests(shost);
        hisi_hba->hw->wait_cmds_complete_timeout(hisi_hba, 100, 5000);
 
-       del_timer_sync(&hisi_hba->timer);
+       /*
+        * hisi_hba->timer is only used for v1/v2 hw, and check hw->sht
+        * which is also only used for v1/v2 hw to skip it for v3 hw
+        */
+       if (hisi_hba->hw->sht)
+               del_timer_sync(&hisi_hba->timer);
 
        set_bit(HISI_SAS_REJECT_CMD_BIT, &hisi_hba->flags);
 }
index 033298d59402e71547c6fc4b57479f487f4f5458..7d2a33514538c2cd8083733d8303f4dc5934de7d 100644 (file)
@@ -4935,7 +4935,6 @@ static void hisi_sas_v3_remove(struct pci_dev *pdev)
        struct Scsi_Host *shost = sha->shost;
 
        pm_runtime_get_noresume(dev);
-       del_timer_sync(&hisi_hba->timer);
 
        sas_unregister_ha(sha);
        flush_workqueue(hisi_hba->wq);