Commit ed340d13 authored by Martin K. Petersen's avatar Martin K. Petersen

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.comSigned-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parents 6df14a32 73e33f96
...@@ -1565,12 +1565,12 @@ EXPORT_SYMBOL_GPL(hisi_sas_controller_reset_done); ...@@ -1565,12 +1565,12 @@ EXPORT_SYMBOL_GPL(hisi_sas_controller_reset_done);
static int hisi_sas_controller_prereset(struct hisi_hba *hisi_hba) static int hisi_sas_controller_prereset(struct hisi_hba *hisi_hba)
{ {
if (!hisi_hba->hw->soft_reset) if (!hisi_hba->hw->soft_reset)
return -1; return -ENOENT;
down(&hisi_hba->sem); down(&hisi_hba->sem);
if (test_and_set_bit(HISI_SAS_RESETTING_BIT, &hisi_hba->flags)) { if (test_and_set_bit(HISI_SAS_RESETTING_BIT, &hisi_hba->flags)) {
up(&hisi_hba->sem); up(&hisi_hba->sem);
return -1; return -EPERM;
} }
if (hisi_sas_debugfs_enable && hisi_hba->debugfs_itct[0].itct) 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) ...@@ -1641,7 +1641,10 @@ static int hisi_sas_abort_task(struct sas_task *task)
task->task_state_flags |= SAS_TASK_STATE_ABORTED; task->task_state_flags |= SAS_TASK_STATE_ABORTED;
spin_unlock_irqrestore(&task->task_state_lock, flags); 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; u16 tag = slot->idx;
int rc2; int rc2;
...@@ -1688,7 +1691,7 @@ static int hisi_sas_abort_task(struct sas_task *task) ...@@ -1688,7 +1691,7 @@ static int hisi_sas_abort_task(struct sas_task *task)
rc = hisi_sas_softreset_ata_disk(device); 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 */ /* SMP */
u32 tag = slot->idx; u32 tag = slot->idx;
struct hisi_sas_cq *cq = &hisi_hba->cq[slot->dlvry_queue]; 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) ...@@ -1605,6 +1605,11 @@ static irqreturn_t phy_up_v3_hw(int phy_no, struct hisi_hba *hisi_hba)
} }
phy->port_id = port_id; 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 * 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) ...@@ -1618,11 +1623,6 @@ static irqreturn_t phy_up_v3_hw(int phy_no, struct hisi_hba *hisi_hba)
res = IRQ_HANDLED; 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: end:
if (phy->reset_completion) if (phy->reset_completion)
complete(phy->reset_completion); complete(phy->reset_completion);
...@@ -3476,7 +3476,7 @@ static void debugfs_snapshot_global_reg_v3_hw(struct hisi_hba *hisi_hba) ...@@ -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; u32 *databuf = hisi_hba->debugfs_regs[dump_index][DEBUGFS_GLOBAL].data;
int i; 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); *databuf = hisi_sas_read32(hisi_hba, 4 * i);
} }
...@@ -4968,6 +4968,7 @@ static void hisi_sas_reset_done_v3_hw(struct pci_dev *pdev) ...@@ -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 sas_ha_struct *sha = pci_get_drvdata(pdev);
struct hisi_hba *hisi_hba = sha->lldd_ha; struct hisi_hba *hisi_hba = sha->lldd_ha;
struct Scsi_Host *shost = hisi_hba->shost;
struct device *dev = hisi_hba->dev; struct device *dev = hisi_hba->dev;
int rc; int rc;
...@@ -4976,6 +4977,10 @@ static void hisi_sas_reset_done_v3_hw(struct pci_dev *pdev) ...@@ -4976,6 +4977,10 @@ static void hisi_sas_reset_done_v3_hw(struct pci_dev *pdev)
rc = hw_init_v3_hw(hisi_hba); rc = hw_init_v3_hw(hisi_hba);
if (rc) { if (rc) {
dev_err(dev, "FLR: hw init failed rc=%d\n", 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; return;
} }
...@@ -5018,7 +5023,7 @@ static int _suspend_v3_hw(struct device *device) ...@@ -5018,7 +5023,7 @@ static int _suspend_v3_hw(struct device *device)
} }
if (test_and_set_bit(HISI_SAS_RESETTING_BIT, &hisi_hba->flags)) if (test_and_set_bit(HISI_SAS_RESETTING_BIT, &hisi_hba->flags))
return -1; return -EPERM;
dev_warn(dev, "entering suspend state\n"); dev_warn(dev, "entering suspend state\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment