drm/i915: Unlock the shared hwsp_gtt object after pinning
authorThomas Hellström <thomas.hellstrom@intel.com>
Thu, 3 Sep 2020 13:07:17 +0000 (15:07 +0200)
committerJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
Mon, 7 Sep 2020 12:08:11 +0000 (15:08 +0300)
The hwsp_gtt object is used for sub-allocation and could therefore
be shared by many contexts causing unnecessary contention during
concurrent context pinning.
However since we're currently locking it only for pinning, it remains
resident until we unpin it, and therefore it's safe to drop the
lock early, allowing for concurrent thread access.

Signed-off-by: Thomas Hellström <thomas.hellstrom@intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
drivers/gpu/drm/i915/gt/intel_context.c

index 61b05cd4c47aef8e26f9960bcef54f52eae289b1..d301dda1b2617b53f769f47b9ea1d5d1724449d8 100644 (file)
@@ -271,6 +271,15 @@ err_release:
        i915_active_release(&ce->active);
 err_ctx_unpin:
        intel_context_post_unpin(ce);
+
+       /*
+        * Unlock the hwsp_ggtt object since it's shared.
+        * In principle we can unlock all the global state locked above
+        * since it's pinned and doesn't need fencing, and will
+        * thus remain resident until it is explicitly unpinned.
+        */
+       i915_gem_ww_unlock_single(ce->timeline->hwsp_ggtt->obj);
+
        return err;
 }