67 lines
2.4 KiB
Diff
67 lines
2.4 KiB
Diff
From fe6bf545050fcdedee0acfff0f9e4dfdd172e340 Mon Sep 17 00:00:00 2001
|
|
From: Luo Jiaxing <luojiaxing@huawei.com>
|
|
Date: Tue, 3 Aug 2021 14:47:57 +0800
|
|
Subject: [PATCH 075/108] scsi: hisi_sas: Warn in v3 hw channel interrupt
|
|
handler when status reg cleared
|
|
|
|
mainline inclusion
|
|
from mainline-v5.13-rc1
|
|
commit 2d31cb20a3cd611a9a544f9586eb3908ee2085cf
|
|
category: feature
|
|
bugzilla: https://gitee.com/src-openeuler/kernel/issues/I8EKNE
|
|
|
|
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2d31cb20a3cd611a9a544f9586eb3908ee2085cf
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
If a channel interrupt occurs without any status bit set, the handler will
|
|
return directly. However, if such redundant interrupts are received, it's
|
|
better to check what happen, so add logs for this.
|
|
|
|
Link: https://lore.kernel.org/r/1617709711-195853-6-git-send-email-john.garry@huawei.com
|
|
Signed-off-by: Luo Jiaxing <luojiaxing@huawei.com>
|
|
Signed-off-by: Yihang Li <liyihang6@hisilicon.com>
|
|
Signed-off-by: John Garry <john.garry@huawei.com>
|
|
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
|
|
Reviewed-by: Ouyangdelong <ouyangdelong@huawei.com>
|
|
Signed-off-by: Nifujia <nifujia1@hisilicon.com>
|
|
Signed-off-by: Zheng Zengkai <zhengzengkai@huawei.com>
|
|
Signed-off-by: YunYi Yang <yangyunyi2@huawei.com>
|
|
---
|
|
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 10 ++++++++--
|
|
1 file changed, 8 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
|
|
index dfe2dba65dbd..74aa794a70b4 100644
|
|
--- a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
|
|
+++ b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
|
|
@@ -1877,8 +1877,11 @@ static void handle_chl_int1_v3_hw(struct hisi_hba *hisi_hba, int phy_no)
|
|
int i;
|
|
|
|
irq_value &= ~irq_msk;
|
|
- if (!irq_value)
|
|
+ if (!irq_value) {
|
|
+ dev_warn(dev, "phy%d channel int 1 received with status bits cleared\n",
|
|
+ phy_no);
|
|
return;
|
|
+ }
|
|
|
|
for (i = 0; i < ARRAY_SIZE(port_axi_error); i++) {
|
|
const struct hisi_sas_hw_error *error = &port_axi_error[i];
|
|
@@ -1906,8 +1909,11 @@ static void handle_chl_int2_v3_hw(struct hisi_hba *hisi_hba, int phy_no)
|
|
BIT(CHL_INT2_RX_INVLD_DW_OFF);
|
|
|
|
irq_value &= ~irq_msk;
|
|
- if (!irq_value)
|
|
+ if (!irq_value) {
|
|
+ dev_warn(dev, "phy%d channel int 2 received with status bits cleared\n",
|
|
+ phy_no);
|
|
return;
|
|
+ }
|
|
|
|
if (irq_value & BIT(CHL_INT2_SL_IDAF_TOUT_CONF_OFF)) {
|
|
dev_warn(dev, "phy%d identify timeout\n", phy_no);
|
|
--
|
|
2.27.0
|
|
|