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

Submitted by Michel Thierry on July 1, 2015, 3:27 p.m.

Details

Message ID 1435764453-11954-12-git-send-email-michel.thierry@intel.com
State New
Headers show

Not browsing as part of any series.

Commit Message

Michel Thierry July 1, 2015, 3:27 p.m.
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(-)

Patch hide | download patch | download mbox

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 7bccfd5..d245c82 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -546,7 +546,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;
 
@@ -572,7 +572,7 @@  struct drm_i915_error_state {
 		u32 size;
 		u32 name;
 		u32 rseqno[I915_NUM_RINGS], 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 6f42569..cdbd4c2 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.c
+++ b/drivers/gpu/drm/i915/i915_gpu_error.c
@@ -197,7 +197,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 [ ",
+		err_printf(m, "    %016llx %8u %02x %02x [ ",
 			   err->gtt_offset,
 			   err->size,
 			   err->read_domains,
@@ -426,7 +426,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);
 		}
@@ -434,7 +434,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);
 		}
 
@@ -453,14 +454,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",
@@ -476,13 +477,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,
@@ -590,7 +591,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;

Comments

On 7/1/2015 8:57 PM, Michel Thierry wrote:
> 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 7bccfd5..d245c82 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -546,7 +546,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;
>
> @@ -572,7 +572,7 @@ struct drm_i915_error_state {
>   		u32 size;
>   		u32 name;
>   		u32 rseqno[I915_NUM_RINGS], 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 6f42569..cdbd4c2 100644
> --- a/drivers/gpu/drm/i915/i915_gpu_error.c
> +++ b/drivers/gpu/drm/i915/i915_gpu_error.c
> @@ -197,7 +197,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 [ ",
> +		err_printf(m, "    %016llx %8u %02x %02x [ ",
>   			   err->gtt_offset,
>   			   err->size,
>   			   err->read_domains,
> @@ -426,7 +426,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);
>   		}
> @@ -434,7 +434,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);
>   		}
>
> @@ -453,14 +454,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",
> @@ -476,13 +477,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 ring init time, so may not have an offset > 4GB.

>   		for (elt = 0; elt < PAGE_SIZE/16; elt += 4) {
>   			err_printf(m, "[%04x] %08x %08x %08x %08x\n",
>   				   elt * 4,
> @@ -590,7 +591,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;
>
On 7/7/2015 1:53 PM, Goel, Akash wrote:
> On 7/1/2015 8:57 PM, Michel Thierry wrote:
>> @@ -476,13 +477,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 ring init time, so may not have an offset > 4GB.
>
Makes sense, will change to:
	if ((obj = error->semaphore_obj)) {
		err_printf(m, "Semaphore page = 0x%08x\n",
			   lower_32_bits(obj->gtt_offset));

>>           for (elt = 0; elt < PAGE_SIZE/16; elt += 4) {
>>               err_printf(m, "[%04x] %08x %08x %08x %08x\n",
>>                      elt * 4,
>> @@ -590,7 +591,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;
>>