*
  * This function force-removes any fence from the given object, which is useful
  * if the kernel wants to do untiled GTT access.
- *
- * Returns:
- *
- * 0 on success, negative error code on failure.
  */
-int i915_vma_revoke_fence(struct i915_vma *vma)
+void i915_vma_revoke_fence(struct i915_vma *vma)
 {
        struct i915_fence_reg *fence = vma->fence;
+       intel_wakeref_t wakeref;
 
        lockdep_assert_held(&vma->vm->mutex);
        if (!fence)
-               return 0;
+               return;
 
-       if (atomic_read(&fence->pin_count))
-               return -EBUSY;
+       GEM_BUG_ON(fence->vma != vma);
+       GEM_BUG_ON(!i915_active_is_idle(&fence->active));
+       GEM_BUG_ON(atomic_read(&fence->pin_count));
+
+       fence->tiling = 0;
+       WRITE_ONCE(fence->vma, NULL);
+       vma->fence = NULL;
 
-       return fence_update(fence, NULL);
+       with_intel_runtime_pm_if_in_use(fence_to_uncore(fence)->rpm, wakeref)
+               fence_write(fence);
 }
 
 static struct i915_fence_reg *fence_find(struct i915_ggtt *ggtt)
 
                        return ERR_PTR(ret);
        }
 
+       ret = i915_vma_pin(vma, size, alignment, flags | PIN_GLOBAL);
+       if (ret)
+               return ERR_PTR(ret);
+
        if (vma->fence && !i915_gem_object_is_tiled(obj)) {
                mutex_lock(&ggtt->vm.mutex);
-               ret = i915_vma_revoke_fence(vma);
+               i915_vma_revoke_fence(vma);
                mutex_unlock(&ggtt->vm.mutex);
-               if (ret)
-                       return ERR_PTR(ret);
        }
 
-       ret = i915_vma_pin(vma, size, alignment, flags | PIN_GLOBAL);
-       if (ret)
-               return ERR_PTR(ret);
-
        ret = i915_vma_wait_for_bind(vma);
        if (ret) {
                i915_vma_unpin(vma);
 
                i915_vma_flush_writes(vma);
 
                /* release the fence reg _after_ flushing */
-               ret = i915_vma_revoke_fence(vma);
-               if (ret)
-                       return ret;
+               i915_vma_revoke_fence(vma);
 
                /* Force a pagefault for domain tracking on next user access */
                i915_vma_revoke_mmap(vma);
 
  * True if the vma has a fence, false otherwise.
  */
 int __must_check i915_vma_pin_fence(struct i915_vma *vma);
-int __must_check i915_vma_revoke_fence(struct i915_vma *vma);
+void i915_vma_revoke_fence(struct i915_vma *vma);
 
 int __i915_vma_pin_fence(struct i915_vma *vma);