Commit 9de0b86f authored by Huazhong Tan's avatar Huazhong Tan Committed by David S. Miller

net: hns3: Prevent to request reset frequently

Netdevice reset should not be requested frequently, a new one
must wait a moment since there may be some work not completed.
Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: default avatarPeng Li <lipeng321@huawei.com>
Signed-off-by: default avatarSalil Mehta <salil.mehta@huawei.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6d4fab39
...@@ -2819,7 +2819,10 @@ static void hclge_clear_reset_cause(struct hclge_dev *hdev) ...@@ -2819,7 +2819,10 @@ static void hclge_clear_reset_cause(struct hclge_dev *hdev)
static void hclge_reset(struct hclge_dev *hdev) static void hclge_reset(struct hclge_dev *hdev)
{ {
struct hnae3_handle *handle;
/* perform reset of the stack & ae device for a client */ /* perform reset of the stack & ae device for a client */
handle = &hdev->vport[0].nic;
rtnl_lock(); rtnl_lock();
hclge_notify_client(hdev, HNAE3_DOWN_CLIENT); hclge_notify_client(hdev, HNAE3_DOWN_CLIENT);
...@@ -2836,6 +2839,7 @@ static void hclge_reset(struct hclge_dev *hdev) ...@@ -2836,6 +2839,7 @@ static void hclge_reset(struct hclge_dev *hdev)
} }
hclge_notify_client(hdev, HNAE3_UP_CLIENT); hclge_notify_client(hdev, HNAE3_UP_CLIENT);
handle->last_reset_time = jiffies;
rtnl_unlock(); rtnl_unlock();
} }
...@@ -2849,8 +2853,13 @@ static void hclge_reset_event(struct hnae3_handle *handle) ...@@ -2849,8 +2853,13 @@ static void hclge_reset_event(struct hnae3_handle *handle)
* know this if last reset request did not occur very recently (watchdog * know this if last reset request did not occur very recently (watchdog
* timer = 5*HZ, let us check after sufficiently large time, say 4*5*Hz) * timer = 5*HZ, let us check after sufficiently large time, say 4*5*Hz)
* In case of new request we reset the "reset level" to PF reset. * In case of new request we reset the "reset level" to PF reset.
* And if it is a repeat reset request of the most recent one then we
* want to make sure we throttle the reset request. Therefore, we will
* not allow it again before 3*HZ times.
*/ */
if (time_after(jiffies, (handle->last_reset_time + 4 * 5 * HZ))) if (time_before(jiffies, (handle->last_reset_time + 3 * HZ)))
return;
else if (time_after(jiffies, (handle->last_reset_time + 4 * 5 * HZ)))
handle->reset_level = HNAE3_FUNC_RESET; handle->reset_level = HNAE3_FUNC_RESET;
dev_info(&hdev->pdev->dev, "received reset event , reset type is %d", dev_info(&hdev->pdev->dev, "received reset event , reset type is %d",
...@@ -2862,8 +2871,6 @@ static void hclge_reset_event(struct hnae3_handle *handle) ...@@ -2862,8 +2871,6 @@ static void hclge_reset_event(struct hnae3_handle *handle)
if (handle->reset_level < HNAE3_GLOBAL_RESET) if (handle->reset_level < HNAE3_GLOBAL_RESET)
handle->reset_level++; handle->reset_level++;
handle->last_reset_time = jiffies;
} }
static void hclge_reset_subtask(struct hclge_dev *hdev) static void hclge_reset_subtask(struct hclge_dev *hdev)
......
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