4.17-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Yunsheng Lin <[email protected]>

[ Upstream commit f5be79673fc4c925708c99ec37d77e0a2c3cd30b ]

When hclge_ae_stop is called during resetting, it will cancel the
service_task by calling cancel_work_sync, which may cause the
service_task to exit without clearing HCLGE_STATE_SERVICE_SCHED
bit. If this happens, the service_task will never run again.

This patch fixes this problem by clearing it after calling
cancel_work_sync in hclge_ae_stop.

Fixes: 46a3df9f9718 ("net: hns3: Add HNS3 Acceleration Engine & Compatibility 
Layer Support")
Signed-off-by: Yunsheng Lin <[email protected]>
Signed-off-by: Peng Li <[email protected]>
Signed-off-by: Salil Mehta <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
---
 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c   |    1 +
 drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c |    1 +
 2 files changed, 2 insertions(+)

--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
@@ -3802,6 +3802,7 @@ static void hclge_ae_stop(struct hnae3_h
 
        del_timer_sync(&hdev->service_timer);
        cancel_work_sync(&hdev->service_task);
+       clear_bit(HCLGE_STATE_SERVICE_SCHED, &hdev->state);
 
        if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state)) {
                hclge_mac_stop_phy(hdev);
--- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
@@ -1323,6 +1323,7 @@ static void hclgevf_ae_stop(struct hnae3
        hclgevf_reset_tqp_stats(handle);
        del_timer_sync(&hdev->service_timer);
        cancel_work_sync(&hdev->service_task);
+       clear_bit(HCLGEVF_STATE_SERVICE_SCHED, &hdev->state);
        hclgevf_update_link_status(hdev, 0);
 }
 


Reply via email to