提交 012fcb52 编写于 作者: H Huazhong Tan 提交者: David S. Miller

net: hns3: activate reset timer when calling reset_event

When calling hclge_reset_event() within HCLGE_RESET_INTERVAL,
it returns directly now. If no one call it again, then the
error which needs a reset to fix it can not be fixed.

So this patch activates the reset timer for this case, and
adds checking in the end of the reset procedure to make this
error fixed earlier.
Signed-off-by: NHuazhong Tan <tanhuazhong@huawei.com>
Reviewed-by: NPeng Li <lipeng321@huawei.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 72e2fb07
...@@ -3517,7 +3517,15 @@ static void hclge_reset(struct hclge_dev *hdev) ...@@ -3517,7 +3517,15 @@ static void hclge_reset(struct hclge_dev *hdev)
hdev->reset_fail_cnt = 0; hdev->reset_fail_cnt = 0;
hdev->rst_stats.reset_done_cnt++; hdev->rst_stats.reset_done_cnt++;
ae_dev->reset_type = HNAE3_NONE_RESET; ae_dev->reset_type = HNAE3_NONE_RESET;
del_timer(&hdev->reset_timer);
/* if default_reset_request has a higher level reset request,
* it should be handled as soon as possible. since some errors
* need this kind of reset to fix.
*/
hdev->reset_level = hclge_get_reset_level(ae_dev,
&hdev->default_reset_request);
if (hdev->reset_level != HNAE3_NONE_RESET)
set_bit(hdev->reset_level, &hdev->reset_request);
return; return;
...@@ -3552,9 +3560,10 @@ static void hclge_reset_event(struct pci_dev *pdev, struct hnae3_handle *handle) ...@@ -3552,9 +3560,10 @@ static void hclge_reset_event(struct pci_dev *pdev, struct hnae3_handle *handle)
handle = &hdev->vport[0].nic; handle = &hdev->vport[0].nic;
if (time_before(jiffies, (hdev->last_reset_time + if (time_before(jiffies, (hdev->last_reset_time +
HCLGE_RESET_INTERVAL))) HCLGE_RESET_INTERVAL))) {
mod_timer(&hdev->reset_timer, jiffies + HCLGE_RESET_INTERVAL);
return; return;
else if (hdev->default_reset_request) } else if (hdev->default_reset_request)
hdev->reset_level = hdev->reset_level =
hclge_get_reset_level(ae_dev, hclge_get_reset_level(ae_dev,
&hdev->default_reset_request); &hdev->default_reset_request);
...@@ -3584,6 +3593,12 @@ static void hclge_reset_timer(struct timer_list *t) ...@@ -3584,6 +3593,12 @@ static void hclge_reset_timer(struct timer_list *t)
{ {
struct hclge_dev *hdev = from_timer(hdev, t, reset_timer); struct hclge_dev *hdev = from_timer(hdev, t, reset_timer);
/* if default_reset_request has no value, it means that this reset
* request has already be handled, so just return here
*/
if (!hdev->default_reset_request)
return;
dev_info(&hdev->pdev->dev, dev_info(&hdev->pdev->dev,
"triggering reset in reset timer\n"); "triggering reset in reset timer\n");
hclge_reset_event(hdev->pdev, NULL); hclge_reset_event(hdev->pdev, NULL);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册