diff mbox

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

Message ID 1424454366-19006-12-git-send-email-michel.thierry@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Michel Thierry Feb. 20, 2015, 5:46 p.m. UTC
From: Ben Widawsky <benjamin.widawsky@intel.com>

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@bwidawsk.net>
Signed-off-by: Michel Thierry <michel.thierry@intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h       |  4 ++--
 drivers/gpu/drm/i915/i915_gpu_error.c | 17 +++++++++--------
 2 files changed, 11 insertions(+), 10 deletions(-)

Comments

Akash Goel March 3, 2015, 4:42 p.m. UTC | #1
On Fri, Feb 20, 2015 at 11:16 PM, Michel Thierry
<michel.thierry@intel.com> wrote:
> From: Ben Widawsky <benjamin.widawsky@intel.com>
>
> 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@bwidawsk.net>
> Signed-off-by: Michel Thierry <michel.thierry@intel.com>
> ---
>  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@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff mbox

Patch

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);
 		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;