Message ID | 20210323155059.628690-28-maarten.lankhorst@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/i915: Remove obj->mm.lock! | expand |
On Tue, Mar 23, 2021 at 04:50:16PM +0100, Maarten Lankhorst wrote: > Take the ww lock around engine_unpark. Because of the > many many places where rpm is used, I chose the safest option > and used a trylock to opportunistically take this lock for > __engine_unpark. Correct choice, runtime pm resume is on the critical path for dma-fence (we might need to wake up the device for e.g. atomic modeset commits), so definitely can't have a dma_resv_lock in here. -Daniel > > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> > Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com> > --- > drivers/gpu/drm/i915/gt/intel_engine_pm.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/gpu/drm/i915/gt/intel_engine_pm.c b/drivers/gpu/drm/i915/gt/intel_engine_pm.c > index 27d9d17b35cb..bddc5c98fb04 100644 > --- a/drivers/gpu/drm/i915/gt/intel_engine_pm.c > +++ b/drivers/gpu/drm/i915/gt/intel_engine_pm.c > @@ -27,12 +27,16 @@ static void dbg_poison_ce(struct intel_context *ce) > int type = i915_coherent_map_type(ce->engine->i915); > void *map; > > + if (!i915_gem_object_trylock(obj)) > + return; > + > map = i915_gem_object_pin_map(obj, type); > if (!IS_ERR(map)) { > memset(map, CONTEXT_REDZONE, obj->base.size); > i915_gem_object_flush_map(obj); > i915_gem_object_unpin_map(obj); > } > + i915_gem_object_unlock(obj); > } > } > > -- > 2.31.0 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff --git a/drivers/gpu/drm/i915/gt/intel_engine_pm.c b/drivers/gpu/drm/i915/gt/intel_engine_pm.c index 27d9d17b35cb..bddc5c98fb04 100644 --- a/drivers/gpu/drm/i915/gt/intel_engine_pm.c +++ b/drivers/gpu/drm/i915/gt/intel_engine_pm.c @@ -27,12 +27,16 @@ static void dbg_poison_ce(struct intel_context *ce) int type = i915_coherent_map_type(ce->engine->i915); void *map; + if (!i915_gem_object_trylock(obj)) + return; + map = i915_gem_object_pin_map(obj, type); if (!IS_ERR(map)) { memset(map, CONTEXT_REDZONE, obj->base.size); i915_gem_object_flush_map(obj); i915_gem_object_unpin_map(obj); } + i915_gem_object_unlock(obj); } }