]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/i915: Dirty hack to fix selftests locking inversion
authorMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Wed, 19 Aug 2020 14:08:58 +0000 (16:08 +0200)
committerJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
Mon, 7 Sep 2020 11:31:43 +0000 (14:31 +0300)
Some i915 selftests still use i915_vma_lock() as inner lock, and
intel_context_create_request() intel_timeline->mutex as outer lock.
Fortunately for selftests this is not an issue, they should be fixed
but we can move ahead and cleanify lockdep now.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: Thomas Hellström <thomas.hellstrom@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200819140904.1708856-19-maarten.lankhorst@linux.intel.com
Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
drivers/gpu/drm/i915/gt/intel_context.c

index c05ef213bdc2115cf1502627e9bd35102dcc6234..671081b0e4d636ba79368b5a2da02ea9005202b2 100644 (file)
@@ -459,6 +459,18 @@ struct i915_request *intel_context_create_request(struct intel_context *ce)
        rq = i915_request_create(ce);
        intel_context_unpin(ce);
 
+       if (IS_ERR(rq))
+               return rq;
+
+       /*
+        * timeline->mutex should be the inner lock, but is used as outer lock.
+        * Hack around this to shut up lockdep in selftests..
+        */
+       lockdep_unpin_lock(&ce->timeline->mutex, rq->cookie);
+       mutex_release(&ce->timeline->mutex.dep_map, _RET_IP_);
+       mutex_acquire(&ce->timeline->mutex.dep_map, SINGLE_DEPTH_NESTING, 0, _RET_IP_);
+       rq->cookie = lockdep_pin_lock(&ce->timeline->mutex);
+
        return rq;
 }