struct amdgpu_device *adev = dev->dev_private;
        int r = 0, i;
 
+       /* Avoid accidently unparking the sched thread during GPU reset */
+       mutex_lock(&adev->lock_reset);
+
        /* hold on the scheduler */
        for (i = 0; i < AMDGPU_MAX_RINGS; i++) {
                struct amdgpu_ring *ring = adev->rings[i];
                kthread_unpark(ring->sched.thread);
        }
 
+       mutex_unlock(&adev->lock_reset);
+
        return 0;
 }
 
        if (!fences)
                return -ENOMEM;
 
+       /* Avoid accidently unparking the sched thread during GPU reset */
+       mutex_lock(&adev->lock_reset);
+
        /* stop the scheduler */
        kthread_park(ring->sched.thread);
 
        /* restart the scheduler */
        kthread_unpark(ring->sched.thread);
 
+       mutex_unlock(&adev->lock_reset);
+
        ttm_bo_unlock_delayed_workqueue(&adev->mman.bdev, resched);
 
        kfree(fences);