Commit d62f416f authored by Chris Wilson's avatar Chris Wilson

drm/i915: Wait on vma activity before taking the mutex

Optimistically wait for the prior vma activity before taking the mutex
to minimise the mutex hold time while unbinding. We will then verify the
vma is idle with a second wait under the mutex to ensure it is safe to
unbind.
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200123224459.38128-2-chris@chris-wilson.co.uk
parent 60e94557
...@@ -1279,16 +1279,21 @@ int i915_vma_unbind(struct i915_vma *vma) ...@@ -1279,16 +1279,21 @@ int i915_vma_unbind(struct i915_vma *vma)
/* XXX not always required: nop_clear_range */ /* XXX not always required: nop_clear_range */
wakeref = intel_runtime_pm_get(&vm->i915->runtime_pm); wakeref = intel_runtime_pm_get(&vm->i915->runtime_pm);
/* Optimistic wait before taking the mutex */
err = i915_vma_sync(vma);
if (err)
goto out_rpm;
err = mutex_lock_interruptible(&vm->mutex); err = mutex_lock_interruptible(&vm->mutex);
if (err) if (err)
return err; goto out_rpm;
err = __i915_vma_unbind(vma); err = __i915_vma_unbind(vma);
mutex_unlock(&vm->mutex); mutex_unlock(&vm->mutex);
out_rpm:
if (wakeref) if (wakeref)
intel_runtime_pm_put(&vm->i915->runtime_pm, wakeref); intel_runtime_pm_put(&vm->i915->runtime_pm, wakeref);
return err; return err;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment