Merge patch series "scsi: hisi_sas: Minor fixes and cleanups"
chenxiang <chenxiang66@hisilicon.com> says: This series contain some fixes and cleanups including: - Set .phy_attached before notifying phyup event HISI_PHYEE_PHY_UP_PM; - Use standard error code instead of hardcode; - Check before using pointer variable; - Rollback some operations if FLR failed; - Correct the number of global debugfs registers; Link: https://lore.kernel.org/r/1702525516-51258-1-git-send-email-chenxiang66@hisilicon.com Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
commit
ed340d13aa
@ -1565,12 +1565,12 @@ EXPORT_SYMBOL_GPL(hisi_sas_controller_reset_done);
|
||||
static int hisi_sas_controller_prereset(struct hisi_hba *hisi_hba)
|
||||
{
|
||||
if (!hisi_hba->hw->soft_reset)
|
||||
return -1;
|
||||
return -ENOENT;
|
||||
|
||||
down(&hisi_hba->sem);
|
||||
if (test_and_set_bit(HISI_SAS_RESETTING_BIT, &hisi_hba->flags)) {
|
||||
up(&hisi_hba->sem);
|
||||
return -1;
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
if (hisi_sas_debugfs_enable && hisi_hba->debugfs_itct[0].itct)
|
||||
@ -1641,7 +1641,10 @@ static int hisi_sas_abort_task(struct sas_task *task)
|
||||
task->task_state_flags |= SAS_TASK_STATE_ABORTED;
|
||||
spin_unlock_irqrestore(&task->task_state_lock, flags);
|
||||
|
||||
if (slot && task->task_proto & SAS_PROTOCOL_SSP) {
|
||||
if (!slot)
|
||||
goto out;
|
||||
|
||||
if (task->task_proto & SAS_PROTOCOL_SSP) {
|
||||
u16 tag = slot->idx;
|
||||
int rc2;
|
||||
|
||||
@ -1688,7 +1691,7 @@ static int hisi_sas_abort_task(struct sas_task *task)
|
||||
rc = hisi_sas_softreset_ata_disk(device);
|
||||
}
|
||||
}
|
||||
} else if (slot && task->task_proto & SAS_PROTOCOL_SMP) {
|
||||
} else if (task->task_proto & SAS_PROTOCOL_SMP) {
|
||||
/* SMP */
|
||||
u32 tag = slot->idx;
|
||||
struct hisi_sas_cq *cq = &hisi_hba->cq[slot->dlvry_queue];
|
||||
|
@ -1605,6 +1605,11 @@ static irqreturn_t phy_up_v3_hw(int phy_no, struct hisi_hba *hisi_hba)
|
||||
}
|
||||
|
||||
phy->port_id = port_id;
|
||||
spin_lock(&phy->lock);
|
||||
/* Delete timer and set phy_attached atomically */
|
||||
del_timer(&phy->timer);
|
||||
phy->phy_attached = 1;
|
||||
spin_unlock(&phy->lock);
|
||||
|
||||
/*
|
||||
* Call pm_runtime_get_noresume() which pairs with
|
||||
@ -1618,11 +1623,6 @@ static irqreturn_t phy_up_v3_hw(int phy_no, struct hisi_hba *hisi_hba)
|
||||
|
||||
res = IRQ_HANDLED;
|
||||
|
||||
spin_lock(&phy->lock);
|
||||
/* Delete timer and set phy_attached atomically */
|
||||
del_timer(&phy->timer);
|
||||
phy->phy_attached = 1;
|
||||
spin_unlock(&phy->lock);
|
||||
end:
|
||||
if (phy->reset_completion)
|
||||
complete(phy->reset_completion);
|
||||
@ -3476,7 +3476,7 @@ static void debugfs_snapshot_global_reg_v3_hw(struct hisi_hba *hisi_hba)
|
||||
u32 *databuf = hisi_hba->debugfs_regs[dump_index][DEBUGFS_GLOBAL].data;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < debugfs_axi_reg.count; i++, databuf++)
|
||||
for (i = 0; i < debugfs_global_reg.count; i++, databuf++)
|
||||
*databuf = hisi_sas_read32(hisi_hba, 4 * i);
|
||||
}
|
||||
|
||||
@ -4968,6 +4968,7 @@ static void hisi_sas_reset_done_v3_hw(struct pci_dev *pdev)
|
||||
{
|
||||
struct sas_ha_struct *sha = pci_get_drvdata(pdev);
|
||||
struct hisi_hba *hisi_hba = sha->lldd_ha;
|
||||
struct Scsi_Host *shost = hisi_hba->shost;
|
||||
struct device *dev = hisi_hba->dev;
|
||||
int rc;
|
||||
|
||||
@ -4976,6 +4977,10 @@ static void hisi_sas_reset_done_v3_hw(struct pci_dev *pdev)
|
||||
rc = hw_init_v3_hw(hisi_hba);
|
||||
if (rc) {
|
||||
dev_err(dev, "FLR: hw init failed rc=%d\n", rc);
|
||||
clear_bit(HISI_SAS_REJECT_CMD_BIT, &hisi_hba->flags);
|
||||
scsi_unblock_requests(shost);
|
||||
clear_bit(HISI_SAS_RESETTING_BIT, &hisi_hba->flags);
|
||||
up(&hisi_hba->sem);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -5018,7 +5023,7 @@ static int _suspend_v3_hw(struct device *device)
|
||||
}
|
||||
|
||||
if (test_and_set_bit(HISI_SAS_RESETTING_BIT, &hisi_hba->flags))
|
||||
return -1;
|
||||
return -EPERM;
|
||||
|
||||
dev_warn(dev, "entering suspend state\n");
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user