Message ID | 20200810103103.303818-20-maarten.lankhorst@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/i915: Correct the locking hierarchy in gem. | expand |
On 8/10/20 12:30 PM, Maarten Lankhorst wrote: > 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> Ugh. We should probably fix this properly as soon as possible to avoid copy-pasting of self-tests that aren't fixed yet. For the hack: Acked-by: Thomas Hellström <thomas.hellstrom@intel.com>
diff --git a/drivers/gpu/drm/i915/gt/intel_context.c b/drivers/gpu/drm/i915/gt/intel_context.c index c05ef213bdc2..671081b0e4d6 100644 --- a/drivers/gpu/drm/i915/gt/intel_context.c +++ b/drivers/gpu/drm/i915/gt/intel_context.c @@ -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; }
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> --- drivers/gpu/drm/i915/gt/intel_context.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)