Re: [PATCH 11/12] drm/i915: Expand error state's address width to 64b

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Feb 20, 2015 at 11:16 PM, Michel Thierry
<michel.thierry@xxxxxxxxx> wrote:
> From: Ben Widawsky <benjamin.widawsky@xxxxxxxxx>
>
> v2: 0 pad the new 8B fields or else intel_error_decode has a hard time.
> Note, regardless we need an igt update.
>
> v3: Make reloc_offset 64b also.
>
> Signed-off-by: Ben Widawsky <ben@xxxxxxxxxxxx>
> Signed-off-by: Michel Thierry <michel.thierry@xxxxxxxxx>
> ---
>  drivers/gpu/drm/i915/i915_drv.h       |  4 ++--
>  drivers/gpu/drm/i915/i915_gpu_error.c | 17 +++++++++--------
>  2 files changed, 11 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index af0d149..056ced5 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -459,7 +459,7 @@ struct drm_i915_error_state {
>
>                 struct drm_i915_error_object {
>                         int page_count;
> -                       u32 gtt_offset;
> +                       u64 gtt_offset;
>                         u32 *pages[0];
>                 } *ringbuffer, *batchbuffer, *wa_batchbuffer, *ctx, *hws_page;
>
> @@ -485,7 +485,7 @@ struct drm_i915_error_state {
>                 u32 size;
>                 u32 name;
>                 u32 rseqno, wseqno;
> -               u32 gtt_offset;
> +               u64 gtt_offset;
>                 u32 read_domains;
>                 u32 write_domain;
>                 s32 fence_reg:I915_MAX_NUM_FENCE_BITS;
> diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c
> index a982849..bbf25d0 100644
> --- a/drivers/gpu/drm/i915/i915_gpu_error.c
> +++ b/drivers/gpu/drm/i915/i915_gpu_error.c
> @@ -195,7 +195,7 @@ static void print_error_buffers(struct drm_i915_error_state_buf *m,
>         err_printf(m, "  %s [%d]:\n", name, count);
>
>         while (count--) {
> -               err_printf(m, "    %08x %8u %02x %02x %x %x",
> +               err_printf(m, "    %016llx %8u %02x %02x %x %x",
>                            err->gtt_offset,
>                            err->size,
>                            err->read_domains,
> @@ -415,7 +415,7 @@ int i915_error_state_to_str(struct drm_i915_error_state_buf *m,
>                                 err_printf(m, " (submitted by %s [%d])",
>                                            error->ring[i].comm,
>                                            error->ring[i].pid);
> -                       err_printf(m, " --- gtt_offset = 0x%08x\n",
> +                       err_printf(m, " --- gtt_offset = 0x%016llx\n",
>                                    obj->gtt_offset);
>                         print_error_obj(m, obj);
>                 }
> @@ -423,7 +423,8 @@ int i915_error_state_to_str(struct drm_i915_error_state_buf *m,
>                 obj = error->ring[i].wa_batchbuffer;
>                 if (obj) {
>                         err_printf(m, "%s (w/a) --- gtt_offset = 0x%08x\n",
> -                                  dev_priv->ring[i].name, obj->gtt_offset);
> +                                  dev_priv->ring[i].name,
> +                                  lower_32_bits(obj->gtt_offset));
>                         print_error_obj(m, obj);
>                 }
>
> @@ -442,14 +443,14 @@ int i915_error_state_to_str(struct drm_i915_error_state_buf *m,
>                 if ((obj = error->ring[i].ringbuffer)) {
>                         err_printf(m, "%s --- ringbuffer = 0x%08x\n",
>                                    dev_priv->ring[i].name,
> -                                  obj->gtt_offset);
> +                                  lower_32_bits(obj->gtt_offset));
>                         print_error_obj(m, obj);
>                 }
>
>                 if ((obj = error->ring[i].hws_page)) {
>                         err_printf(m, "%s --- HW Status = 0x%08x\n",
>                                    dev_priv->ring[i].name,
> -                                  obj->gtt_offset);
> +                                  lower_32_bits(obj->gtt_offset));
>                         offset = 0;
>                         for (elt = 0; elt < PAGE_SIZE/16; elt += 4) {
>                                 err_printf(m, "[%04x] %08x %08x %08x %08x\n",
> @@ -465,13 +466,13 @@ int i915_error_state_to_str(struct drm_i915_error_state_buf *m,
>                 if ((obj = error->ring[i].ctx)) {
>                         err_printf(m, "%s --- HW Context = 0x%08x\n",
>                                    dev_priv->ring[i].name,
> -                                  obj->gtt_offset);
> +                                  lower_32_bits(obj->gtt_offset));
>                         print_error_obj(m, obj);
>                 }
>         }
>
>         if ((obj = error->semaphore_obj)) {
> -               err_printf(m, "Semaphore page = 0x%08x\n", obj->gtt_offset);
> +               err_printf(m, "Semaphore page = 0x%016llx\n", obj->gtt_offset);

Can the 'lower_32_bits' be used for the semaphore object also.
Its mapped into GGTT during render ring init time, so may never have
an offset of > 4 GB.

>                 for (elt = 0; elt < PAGE_SIZE/16; elt += 4) {
>                         err_printf(m, "[%04x] %08x %08x %08x %08x\n",
>                                    elt * 4,
> @@ -571,7 +572,7 @@ i915_error_object_create(struct drm_i915_private *dev_priv,
>         int num_pages;
>         bool use_ggtt;
>         int i = 0;
> -       u32 reloc_offset;
> +       u64 reloc_offset;
>
>         if (src == NULL || src->pages == NULL)
>                 return NULL;
> --
> 2.1.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/intel-gfx





[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux