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 <ch...@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursu...@intel.com>
---
 drivers/gpu/drm/i915/i915_vma.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c
index 08b91e88c229..9a79b26b925e 100644
--- a/drivers/gpu/drm/i915/i915_vma.c
+++ b/drivers/gpu/drm/i915/i915_vma.c
@@ -1268,16 +1268,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;
 }
 
-- 
2.25.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to