void hclge_task_schedule(struct hclge_dev *hdev, unsigned long delay_time)
 {
-       if (!test_bit(HCLGE_STATE_REMOVING, &hdev->state))
+       if (!test_bit(HCLGE_STATE_REMOVING, &hdev->state) &&
+           !test_bit(HCLGE_STATE_RST_FAIL, &hdev->state))
                mod_delayed_work_on(cpumask_first(&hdev->affinity_mask),
                                    hclge_wq, &hdev->service_task,
                                    delay_time);
 
        hclge_dbg_dump_rst_info(hdev);
 
+       set_bit(HCLGE_STATE_RST_FAIL, &hdev->state);
+
        return false;
 }
 
        hdev->rst_stats.reset_fail_cnt = 0;
        hdev->rst_stats.reset_done_cnt++;
        ae_dev->reset_type = HNAE3_NONE_RESET;
+       clear_bit(HCLGE_STATE_RST_FAIL, &hdev->state);
 
        /* if default_reset_request has a higher level reset request,
         * it should be handled as soon as possible. since some errors
        set_bit(HCLGE_STATE_DOWN, &hdev->state);
        clear_bit(HCLGE_STATE_RST_SERVICE_SCHED, &hdev->state);
        clear_bit(HCLGE_STATE_RST_HANDLING, &hdev->state);
+       clear_bit(HCLGE_STATE_RST_FAIL, &hdev->state);
        clear_bit(HCLGE_STATE_MBX_SERVICE_SCHED, &hdev->state);
        clear_bit(HCLGE_STATE_MBX_HANDLING, &hdev->state);
 }
 
                set_bit(HCLGEVF_RESET_PENDING, &hdev->reset_state);
                hclgevf_reset_task_schedule(hdev);
        } else {
+               set_bit(HCLGEVF_STATE_RST_FAIL, &hdev->state);
                hclgevf_dump_rst_info(hdev);
        }
 }
        ae_dev->reset_type = HNAE3_NONE_RESET;
        hdev->rst_stats.rst_done_cnt++;
        hdev->rst_stats.rst_fail_cnt = 0;
+       clear_bit(HCLGEVF_STATE_RST_FAIL, &hdev->state);
 
        return ret;
 err_reset_lock:
 static void hclgevf_task_schedule(struct hclgevf_dev *hdev,
                                  unsigned long delay)
 {
-       if (!test_bit(HCLGEVF_STATE_REMOVING, &hdev->state))
+       if (!test_bit(HCLGEVF_STATE_REMOVING, &hdev->state) &&
+           !test_bit(HCLGEVF_STATE_RST_FAIL, &hdev->state))
                mod_delayed_work(hclgevf_wq, &hdev->service_task, delay);
 }
 
 {
        clear_bit(HCLGEVF_STATE_MBX_SERVICE_SCHED, &hdev->state);
        clear_bit(HCLGEVF_STATE_MBX_HANDLING, &hdev->state);
+       clear_bit(HCLGEVF_STATE_RST_FAIL, &hdev->state);
 
        INIT_DELAYED_WORK(&hdev->service_task, hclgevf_service_task);