drm/i915: Wait on vma activity before taking the mutex
authorChris Wilson <chris@chris-wilson.co.uk>
Thu, 23 Jan 2020 22:44:59 +0000 (22:44 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Fri, 24 Jan 2020 10:37:13 +0000 (10:37 +0000)
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: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200123224459.38128-2-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_vma.c

index 4999882fbceb5b05ea968f161c6d94255f628b5a..84e03da0d5f9703a9a156cef8f7a531f6820931c 100644 (file)
@@ -1279,16 +1279,21 @@ int i915_vma_unbind(struct i915_vma *vma)
                /* XXX not always required: nop_clear_range */
                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);
        if (err)
-               return err;
+               goto out_rpm;
 
        err = __i915_vma_unbind(vma);
        mutex_unlock(&vm->mutex);
 
+out_rpm:
        if (wakeref)
                intel_runtime_pm_put(&vm->i915->runtime_pm, wakeref);
-
        return err;
 }