static void hisi_sas_task_done(struct sas_task *task)
 {
-       del_timer(&task->slow_task->timer);
+       del_timer_sync(&task->slow_task->timer);
        complete(&task->slow_task->completion);
 }
 
                res = hisi_sas_task_exec(task, GFP_KERNEL, 1, tmf);
 
                if (res) {
-                       del_timer(&task->slow_task->timer);
+                       del_timer_sync(&task->slow_task->timer);
                        dev_err(dev, "abort tmf: executing internal task failed: %d\n",
                                res);
                        goto ex_err;
        scsi_block_requests(shost);
        hisi_hba->hw->wait_cmds_complete_timeout(hisi_hba, 100, 5000);
 
-       if (timer_pending(&hisi_hba->timer))
-               del_timer_sync(&hisi_hba->timer);
+       del_timer_sync(&hisi_hba->timer);
 
        set_bit(HISI_SAS_REJECT_CMD_BIT, &hisi_hba->flags);
 }
        res = hisi_sas_internal_abort_task_exec(hisi_hba, sas_dev->device_id,
                                                task, abort_flag, tag, dq);
        if (res) {
-               del_timer(&task->slow_task->timer);
+               del_timer_sync(&task->slow_task->timer);
                dev_err(dev, "internal task abort: executing internal task failed: %d\n",
                        res);
                goto exit;
        struct hisi_hba *hisi_hba = sha->lldd_ha;
        struct Scsi_Host *shost = sha->core.shost;
 
-       if (timer_pending(&hisi_hba->timer))
-               del_timer(&hisi_hba->timer);
+       del_timer_sync(&hisi_hba->timer);
 
        sas_unregister_ha(sha);
        sas_remove_host(sha->core.shost);
 
        case STAT_IO_COMPLETE:
                /* internal abort command complete */
                ts->stat = TMF_RESP_FUNC_SUCC;
-               del_timer(&slot->internal_abort_timer);
+               del_timer_sync(&slot->internal_abort_timer);
                goto out;
        case STAT_IO_NO_DEVICE:
                ts->stat = TMF_RESP_FUNC_COMPLETE;
-               del_timer(&slot->internal_abort_timer);
+               del_timer_sync(&slot->internal_abort_timer);
                goto out;
        case STAT_IO_NOT_VALID:
                /* abort single io, controller don't find
                 * the io need to abort
                 */
                ts->stat = TMF_RESP_FUNC_FAILED;
-               del_timer(&slot->internal_abort_timer);
+               del_timer_sync(&slot->internal_abort_timer);
                goto out;
        default:
                break;