From: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> There is no need to check the LRCA for non-aligment or range several times per interrupt handled when the VMA address in question is explicitly pinned and unpinned with a wider lifetime. So move the check to the place which does the pinning. Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> --- drivers/gpu/drm/i915/intel_lrc.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c index ea031bb46909..3f9b981cc226 100644 --- a/drivers/gpu/drm/i915/intel_lrc.c +++ b/drivers/gpu/drm/i915/intel_lrc.c @@ -297,8 +297,6 @@ uint64_t intel_lr_context_descriptor(struct intel_context *ctx, uint64_t lrca = i915_gem_obj_ggtt_offset(ctx_obj) + LRC_PPHWSP_PN * PAGE_SIZE; - WARN_ON(lrca & 0xFFFFFFFF00000FFFULL); - desc |= lrca; desc |= (u64)intel_execlists_ctx_id(ctx_obj) << GEN8_CTX_ID_SHIFT; @@ -999,6 +997,7 @@ static int intel_lr_context_do_pin(struct intel_engine_cs *ring, { struct drm_device *dev = ring->dev; struct drm_i915_private *dev_priv = dev->dev_private; + u64 lrca; int ret = 0; WARN_ON(!mutex_is_locked(&ring->dev->struct_mutex)); @@ -1007,6 +1006,12 @@ static int intel_lr_context_do_pin(struct intel_engine_cs *ring, if (ret) return ret; + lrca = i915_gem_obj_ggtt_offset(ctx_obj) + LRC_PPHWSP_PN * PAGE_SIZE; + if (WARN_ON(lrca & 0xFFFFFFFF00000FFFULL)) { + ret = -EINVAL; + goto unpin_ctx_obj; + } + ret = intel_pin_and_map_ringbuffer_obj(ring->dev, ringbuf); if (ret) goto unpin_ctx_obj; -- 1.9.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx