88 lines
2.9 KiB
Diff
88 lines
2.9 KiB
Diff
From 0770577c0180258f9f17ec16961fb4b9b1eb4a6d Mon Sep 17 00:00:00 2001
|
|
From: Yihang Li <liyihang9@huawei.com>
|
|
Date: Fri, 17 Mar 2023 15:04:19 +0800
|
|
Subject: [PATCH 095/108] Revert "scsi: hisi_sas: Disable SATA disk phy for
|
|
severe I_T nexus reset failure"
|
|
|
|
driver inclusion
|
|
category: bugfix
|
|
bugzilla: https://gitee.com/src-openeuler/kernel/issues/I8F82P
|
|
CVE: NA
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
In that commit, if the softreset fails upon certain conditions, just
|
|
disable the PHY associated with the disk. The user needs to restore the
|
|
PHY.
|
|
|
|
SATA disks do not support simultaneous connection of multiple hosts.
|
|
Therefore, when multiple controllers are connected to a SATA disk at the
|
|
same time, the controller which is connected later failed to issue an ATA
|
|
softreset to the SATA disk. As a result, the PHY associated with the disk
|
|
is disabled and cannot be automatically recovered.
|
|
|
|
Now that, we will not focus on the execution result of softreset. No
|
|
matter whether the execution is successful or not, we will directly carry
|
|
out I_T_nexus_reset.
|
|
|
|
Fixes: c723ada86707 ("scsi: hisi_sas: Disable SATA disk phy for severe I_T nexus reset failure")
|
|
Signed-off-by: Yihang Li <liyihang9@huawei.com>
|
|
Signed-off-by: xiabing <xiabing12@h-partners.com>
|
|
Signed-off-by: YunYi Yang <yangyunyi2@huawei.com>
|
|
|
|
Conflicts:
|
|
drivers/scsi/hisi_sas/hisi_sas_main.c
|
|
---
|
|
drivers/scsi/hisi_sas/hisi_sas_main.c | 29 +++++----------------------
|
|
1 file changed, 5 insertions(+), 24 deletions(-)
|
|
|
|
diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/hisi_sas_main.c
|
|
index 48644ab23e4c..4f534b8a9206 100644
|
|
--- a/drivers/scsi/hisi_sas/hisi_sas_main.c
|
|
+++ b/drivers/scsi/hisi_sas/hisi_sas_main.c
|
|
@@ -1953,36 +1953,17 @@ static int hisi_sas_I_T_nexus_reset(struct domain_device *device)
|
|
}
|
|
hisi_sas_dereg_device(hisi_hba, device);
|
|
|
|
- rc = hisi_sas_debug_I_T_nexus_reset(device);
|
|
- if (rc == TMF_RESP_FUNC_COMPLETE && dev_is_sata(device)) {
|
|
- struct sas_phy *local_phy;
|
|
-
|
|
+ if (dev_is_sata(device)) {
|
|
rc = hisi_sas_softreset_ata_disk(device);
|
|
if (rc)
|
|
dev_err(dev, "I_T nexus reset: softreset failed (%d)\n",
|
|
rc);
|
|
- switch (rc) {
|
|
- case -ECOMM:
|
|
- rc = -ENODEV;
|
|
- break;
|
|
- case TMF_RESP_FUNC_FAILED:
|
|
- case -EMSGSIZE:
|
|
- case -EIO:
|
|
- local_phy = sas_get_local_phy(device);
|
|
- rc = sas_phy_enable(local_phy, 0);
|
|
- if (!rc) {
|
|
- local_phy->enabled = 0;
|
|
- dev_err(dev, "Disabled local phy of ATA disk %016llx due to softreset fail (%d)\n",
|
|
- SAS_ADDR(device->sas_addr), rc);
|
|
- rc = -ENODEV;
|
|
- }
|
|
- sas_put_local_phy(local_phy);
|
|
- break;
|
|
- default:
|
|
- break;
|
|
- }
|
|
+ if (rc == TMF_RESP_FUNC_FAILED)
|
|
+ dev_err(dev, "ata disk %016llx reset (%d)\n",
|
|
+ SAS_ADDR(device->sas_addr), rc);
|
|
}
|
|
|
|
+ rc = hisi_sas_debug_I_T_nexus_reset(device);
|
|
if ((rc == TMF_RESP_FUNC_COMPLETE) || (rc == -ENODEV))
|
|
hisi_sas_release_task(hisi_hba, device);
|
|
|
|
--
|
|
2.27.0
|
|
|