mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-02 14:34:13 -04:00
Merge patch series "scsi: hisi_sas: Minor fixes and cleanups"
chenxiang <chenxiang66@hisilicon.com> says: This series contains some fixes and cleanups including: - Fix a deadlock issue related to automatic debugfs; - Remove redundant checks for automatic debugfs; - Check whether debugfs is enabled before removing or releasing it; - Remove hisi_hba->timer for v3 hw; Link: https://lore.kernel.org/r/1705904747-62186-1-git-send-email-chenxiang66@hisilicon.com Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
@@ -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);
|
||||
}
|
||||
@@ -1573,7 +1578,7 @@ static int hisi_sas_controller_prereset(struct hisi_hba *hisi_hba)
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
if (hisi_sas_debugfs_enable && hisi_hba->debugfs_itct[0].itct)
|
||||
if (hisi_sas_debugfs_enable)
|
||||
hisi_hba->hw->debugfs_snapshot_regs(hisi_hba);
|
||||
|
||||
return 0;
|
||||
@@ -1961,10 +1966,18 @@ static bool hisi_sas_internal_abort_timeout(struct sas_task *task,
|
||||
struct hisi_hba *hisi_hba = dev_to_hisi_hba(device);
|
||||
struct hisi_sas_internal_abort_data *timeout = data;
|
||||
|
||||
if (hisi_sas_debugfs_enable && hisi_hba->debugfs_itct[0].itct) {
|
||||
down(&hisi_hba->sem);
|
||||
if (hisi_sas_debugfs_enable) {
|
||||
/*
|
||||
* If timeout occurs in device gone scenario, to avoid
|
||||
* circular dependency like:
|
||||
* hisi_sas_dev_gone() -> down() -> ... ->
|
||||
* hisi_sas_internal_abort_timeout() -> down().
|
||||
*/
|
||||
if (!timeout->rst_ha_timeout)
|
||||
down(&hisi_hba->sem);
|
||||
hisi_hba->hw->debugfs_snapshot_regs(hisi_hba);
|
||||
up(&hisi_hba->sem);
|
||||
if (!timeout->rst_ha_timeout)
|
||||
up(&hisi_hba->sem);
|
||||
}
|
||||
|
||||
if (task->task_state_flags & SAS_TASK_STATE_DONE) {
|
||||
@@ -2617,7 +2630,8 @@ static __exit void hisi_sas_exit(void)
|
||||
{
|
||||
sas_release_transport(hisi_sas_stt);
|
||||
|
||||
debugfs_remove(hisi_sas_debugfs_dir);
|
||||
if (hisi_sas_debugfs_enable)
|
||||
debugfs_remove(hisi_sas_debugfs_dir);
|
||||
}
|
||||
|
||||
module_init(hisi_sas_init);
|
||||
|
||||
@@ -4902,7 +4902,8 @@ hisi_sas_v3_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
err_out_remove_host:
|
||||
scsi_remove_host(shost);
|
||||
err_out_undo_debugfs:
|
||||
debugfs_exit_v3_hw(hisi_hba);
|
||||
if (hisi_sas_debugfs_enable)
|
||||
debugfs_exit_v3_hw(hisi_hba);
|
||||
err_out_free_host:
|
||||
hisi_sas_free(hisi_hba);
|
||||
scsi_host_put(shost);
|
||||
@@ -4934,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);
|
||||
@@ -4942,7 +4942,9 @@ static void hisi_sas_v3_remove(struct pci_dev *pdev)
|
||||
|
||||
hisi_sas_v3_destroy_irqs(pdev, hisi_hba);
|
||||
hisi_sas_free(hisi_hba);
|
||||
debugfs_exit_v3_hw(hisi_hba);
|
||||
if (hisi_sas_debugfs_enable)
|
||||
debugfs_exit_v3_hw(hisi_hba);
|
||||
|
||||
scsi_host_put(shost);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user