From mboxrd@z Thu Jan 1 00:00:00 1970 From: oscar.mateo@intel.com Subject: [PATCH 43/53] drm/i915/bdw: Make sure error capture keeps working with Execlists Date: Fri, 13 Jun 2014 16:38:01 +0100 Message-ID: <1402673891-14618-44-git-send-email-oscar.mateo@intel.com> References: <1402673891-14618-1-git-send-email-oscar.mateo@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id CA34C6EA83 for ; Fri, 13 Jun 2014 08:43:35 -0700 (PDT) In-Reply-To: <1402673891-14618-1-git-send-email-oscar.mateo@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org From: Oscar Mateo Since the ringbuffer does not belong per engine anymore, we have to make sure that we are always recording the correct ringbuffer. TODO: This is only a small fix to keep basic error capture working, but we need to add more information for it to be useful (e.g. dump the context being executed). Signed-off-by: Oscar Mateo --- drivers/gpu/drm/i915/i915_gpu_error.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c index 87ec60e..f5897be 100644 --- a/drivers/gpu/drm/i915/i915_gpu_error.c +++ b/drivers/gpu/drm/i915/i915_gpu_error.c @@ -825,9 +825,6 @@ static void i915_record_ring_state(struct drm_device *dev, ering->hws = I915_READ(mmio); } - ering->cpu_ring_head = ring->buffer->head; - ering->cpu_ring_tail = ring->buffer->tail; - ering->hangcheck_score = ring->hangcheck.score; ering->hangcheck_action = ring->hangcheck.action; @@ -887,6 +884,7 @@ static void i915_gem_record_rings(struct drm_device *dev, for (i = 0; i < I915_NUM_RINGS; i++) { struct intel_engine_cs *ring = &dev_priv->ring[i]; + struct intel_ringbuffer *ringbuf = ring->buffer; if (ring->dev == NULL) continue; @@ -929,8 +927,18 @@ static void i915_gem_record_rings(struct drm_device *dev, } } + if (intel_enable_execlists(dev)) { + if (request) + ringbuf = request->ctx->engine[ring->id].ringbuf; + else + ringbuf = ring->default_context->engine[ring->id].ringbuf; + } + + error->ring[i].cpu_ring_head = ringbuf->head; + error->ring[i].cpu_ring_tail = ringbuf->tail; + error->ring[i].ringbuffer = - i915_error_ggtt_object_create(dev_priv, ring->buffer->obj); + i915_error_ggtt_object_create(dev_priv, ringbuf->obj); if (ring->status_page.obj) error->ring[i].hws_page = -- 1.9.0