86 lines
3.4 KiB
Diff
86 lines
3.4 KiB
Diff
From 675855af069cab3fd5d9ef5da1e3459ef83a208a Mon Sep 17 00:00:00 2001
|
|
From: Jiaran Zhang <zhangjiaran@huawei.com>
|
|
Date: Sat, 24 Jul 2021 15:45:09 +0800
|
|
Subject: [PATCH 073/283] net: hns3: add scheduling logic for error handling
|
|
task
|
|
|
|
mainline inclusion
|
|
from mainline-v5.14-rc1
|
|
commit aff399a638da7e56680cdf6fa7544b67e0373a4e
|
|
category: feature
|
|
bugzilla: https://gitee.com/src-openeuler/kernel/issues/I8EMUR
|
|
CVE: NA
|
|
|
|
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=aff399a638da7e56680cdf6fa7544b67e0373a4e
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
Error handling & recovery is done in context of reset task which
|
|
gets scheduled from misc interrupt handler in existing code. But
|
|
since error handling has been moved to new task, it should get
|
|
scheduled instead of the reset task from the interrupt handler.
|
|
|
|
Signed-off-by: Jiaran Zhang <zhangjiaran@huawei.com>
|
|
Signed-off-by: Salil Mehta <salil.mehta@huawei.com>
|
|
Signed-off-by: Yufeng Mo <moyufeng@huawei.com>
|
|
Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
Reviewed-by: Yongxin Li <liyongxin1@huawei.com>
|
|
Signed-off-by: Junxin Chen <chenjunxin1@huawei.com>
|
|
Signed-off-by: Zheng Zengkai <zhengzengkai@huawei.com>
|
|
Signed-off-by: Xiaodong Li <lixiaodong67@huawei.com>
|
|
|
|
Conflicts:
|
|
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
|
|
---
|
|
.../hisilicon/hns3/hns3pf/hclge_main.c | 20 ++++++-------------
|
|
1 file changed, 6 insertions(+), 14 deletions(-)
|
|
|
|
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
|
|
index 8d69e4568baf..0ec52f603fc5 100644
|
|
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
|
|
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
|
|
@@ -3311,18 +3311,8 @@ static irqreturn_t hclge_misc_irq_handle(int irq, void *data)
|
|
/* vector 0 interrupt is shared with reset and mailbox source events.*/
|
|
switch (event_cause) {
|
|
case HCLGE_VECTOR0_EVENT_ERR:
|
|
- /* we do not know what type of reset is required now. This could
|
|
- * only be decided after we fetch the type of errors which
|
|
- * caused this event. Therefore, we will do below for now:
|
|
- * 1. Assert HNAE3_UNKNOWN_RESET type of reset. This means we
|
|
- * have defered type of reset to be used.
|
|
- * 2. Schedule the reset serivce task.
|
|
- * 3. When service task receives HNAE3_UNKNOWN_RESET type it
|
|
- * will fetch the correct type of reset. This would be done
|
|
- * by first decoding the types of errors.
|
|
- */
|
|
- set_bit(HNAE3_UNKNOWN_RESET, &hdev->reset_request);
|
|
- /* fall through */
|
|
+ hclge_errhand_task_schedule(hdev);
|
|
+ break;
|
|
case HCLGE_VECTOR0_EVENT_RST:
|
|
hclge_reset_task_schedule(hdev);
|
|
break;
|
|
@@ -4285,14 +4275,16 @@ static void hclge_service_task(struct work_struct *work)
|
|
struct hclge_dev *hdev =
|
|
container_of(work, struct hclge_dev, service_task.work);
|
|
|
|
+ hclge_errhand_service_task(hdev);
|
|
hclge_reset_service_task(hdev);
|
|
hclge_mailbox_service_task(hdev);
|
|
hclge_periodic_service_task(hdev);
|
|
|
|
- /* Handle reset and mbx again in case periodical task delays the
|
|
- * handling by calling hclge_task_schedule() in
|
|
+ /* Handle error recovery, reset and mbx again in case periodical task
|
|
+ * delays the handling by calling hclge_task_schedule() in
|
|
* hclge_periodic_service_task().
|
|
*/
|
|
+ hclge_errhand_service_task(hdev);
|
|
hclge_reset_service_task(hdev);
|
|
hclge_mailbox_service_task(hdev);
|
|
}
|
|
--
|
|
2.34.1
|
|
|