diff options
| author | Bartlomiej Zolnierkiewicz <[email protected]> | 2018-09-26 15:54:31 +0200 | 
|---|---|---|
| committer | Bartlomiej Zolnierkiewicz <[email protected]> | 2018-09-26 15:54:31 +0200 | 
| commit | aaccf3c97418f169afdbb5855e9cbcbda34e90fd (patch) | |
| tree | 5d4207e67958bdbc23288cf30178692f5534e1a0 /drivers/gpu/drm/i915/i915_gpu_error.c | |
| parent | f39684524b391c5a7ed0ac44db4fec3357af1c5d (diff) | |
| parent | 6bf4ca7fbc85d80446ac01c0d1d77db4d91a6d84 (diff) | |
Merge tag 'v4.19-rc5' of https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux into fbdev-for-next
Sync with upstream (which now contains fbdev-v4.19 changes) to
prepare a base for fbdev-v4.20 changes.
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gpu_error.c')
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gpu_error.c | 92 | 
1 files changed, 35 insertions, 57 deletions
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c index df234dc23274..f7f2aa71d8d9 100644 --- a/drivers/gpu/drm/i915/i915_gpu_error.c +++ b/drivers/gpu/drm/i915/i915_gpu_error.c @@ -31,6 +31,7 @@  #include <linux/stop_machine.h>  #include <linux/zlib.h>  #include <drm/drm_print.h> +#include <linux/ascii85.h>  #include "i915_gpu_error.h"  #include "i915_drv.h" @@ -335,21 +336,16 @@ static void print_error_buffers(struct drm_i915_error_state_buf *m,  				struct drm_i915_error_buffer *err,  				int count)  { -	int i; -  	err_printf(m, "%s [%d]:\n", name, count);  	while (count--) { -		err_printf(m, "    %08x_%08x %8u %02x %02x [ ", +		err_printf(m, "    %08x_%08x %8u %02x %02x %02x",  			   upper_32_bits(err->gtt_offset),  			   lower_32_bits(err->gtt_offset),  			   err->size,  			   err->read_domains, -			   err->write_domain); -		for (i = 0; i < I915_NUM_ENGINES; i++) -			err_printf(m, "%02x ", err->rseqno[i]); - -		err_printf(m, "] %02x", err->wseqno); +			   err->write_domain, +			   err->wseqno);  		err_puts(m, tiling_flag(err->tiling));  		err_puts(m, dirty_flag(err->dirty));  		err_puts(m, purgeable_flag(err->purgeable)); @@ -522,35 +518,12 @@ void i915_error_printf(struct drm_i915_error_state_buf *e, const char *f, ...)  	va_end(args);  } -static int -ascii85_encode_len(int len) -{ -	return DIV_ROUND_UP(len, 4); -} - -static bool -ascii85_encode(u32 in, char *out) -{ -	int i; - -	if (in == 0) -		return false; - -	out[5] = '\0'; -	for (i = 5; i--; ) { -		out[i] = '!' + in % 85; -		in /= 85; -	} - -	return true; -} -  static void print_error_obj(struct drm_i915_error_state_buf *m,  			    struct intel_engine_cs *engine,  			    const char *name,  			    struct drm_i915_error_object *obj)  { -	char out[6]; +	char out[ASCII85_BUFSZ];  	int page;  	if (!obj) @@ -572,12 +545,8 @@ static void print_error_obj(struct drm_i915_error_state_buf *m,  			len -= obj->unused;  		len = ascii85_encode_len(len); -		for (i = 0; i < len; i++) { -			if (ascii85_encode(obj->pages[page][i], out)) -				err_puts(m, out); -			else -				err_puts(m, "z"); -		} +		for (i = 0; i < len; i++) +			err_puts(m, ascii85_encode(obj->pages[page][i], out));  	}  	err_puts(m, "\n");  } @@ -973,8 +942,7 @@ i915_error_object_create(struct drm_i915_private *i915,  		void __iomem *s;  		int ret; -		ggtt->base.insert_page(&ggtt->base, dma, slot, -				       I915_CACHE_NONE, 0); +		ggtt->vm.insert_page(&ggtt->vm, dma, slot, I915_CACHE_NONE, 0);  		s = io_mapping_map_atomic_wc(&ggtt->iomap, slot);  		ret = compress_page(&compress, (void  __force *)s, dst); @@ -993,7 +961,7 @@ unwind:  out:  	compress_fini(&compress, dst); -	ggtt->base.clear_range(&ggtt->base, slot, PAGE_SIZE); +	ggtt->vm.clear_range(&ggtt->vm, slot, PAGE_SIZE);  	return dst;  } @@ -1022,13 +990,10 @@ static void capture_bo(struct drm_i915_error_buffer *err,  		       struct i915_vma *vma)  {  	struct drm_i915_gem_object *obj = vma->obj; -	int i;  	err->size = obj->base.size;  	err->name = obj->base.name; -	for (i = 0; i < I915_NUM_ENGINES; i++) -		err->rseqno[i] = __active_get_seqno(&vma->last_read[i]);  	err->wseqno = __active_get_seqno(&obj->frontbuffer_write);  	err->engine = __active_get_engine_id(&obj->frontbuffer_write); @@ -1051,6 +1016,9 @@ static u32 capture_error_bo(struct drm_i915_error_buffer *err,  	int i = 0;  	list_for_each_entry(vma, head, vm_link) { +		if (!vma->obj) +			continue; +  		if (pinned_only && !i915_vma_is_pinned(vma))  			continue; @@ -1287,9 +1255,11 @@ static void error_record_engine_registers(struct i915_gpu_state *error,  static void record_request(struct i915_request *request,  			   struct drm_i915_error_request *erq)  { -	erq->context = request->ctx->hw_id; +	struct i915_gem_context *ctx = request->gem_context; + +	erq->context = ctx->hw_id;  	erq->sched_attr = request->sched.attr; -	erq->ban_score = atomic_read(&request->ctx->ban_score); +	erq->ban_score = atomic_read(&ctx->ban_score);  	erq->seqno = request->global_seqno;  	erq->jiffies = request->emitted_jiffies;  	erq->start = i915_ggtt_offset(request->ring->vma); @@ -1297,7 +1267,7 @@ static void record_request(struct i915_request *request,  	erq->tail = request->tail;  	rcu_read_lock(); -	erq->pid = request->ctx->pid ? pid_nr(request->ctx->pid) : 0; +	erq->pid = ctx->pid ? pid_nr(ctx->pid) : 0;  	rcu_read_unlock();  } @@ -1461,12 +1431,12 @@ static void gem_record_rings(struct i915_gpu_state *error)  		request = i915_gem_find_active_request(engine);  		if (request) { +			struct i915_gem_context *ctx = request->gem_context;  			struct intel_ring *ring; -			ee->vm = request->ctx->ppgtt ? -				&request->ctx->ppgtt->base : &ggtt->base; +			ee->vm = ctx->ppgtt ? &ctx->ppgtt->vm : &ggtt->vm; -			record_context(&ee->context, request->ctx); +			record_context(&ee->context, ctx);  			/* We need to copy these to an anonymous buffer  			 * as the simplest method to avoid being overwritten @@ -1483,11 +1453,10 @@ static void gem_record_rings(struct i915_gpu_state *error)  			ee->ctx =  				i915_error_object_create(i915, -							 to_intel_context(request->ctx, -									  engine)->state); +							 request->hw_context->state);  			error->simulated |= -				i915_gem_context_no_error_capture(request->ctx); +				i915_gem_context_no_error_capture(ctx);  			ee->rq_head = request->head;  			ee->rq_post = request->postfix; @@ -1563,17 +1532,17 @@ static void capture_active_buffers(struct i915_gpu_state *error)  static void capture_pinned_buffers(struct i915_gpu_state *error)  { -	struct i915_address_space *vm = &error->i915->ggtt.base; +	struct i915_address_space *vm = &error->i915->ggtt.vm;  	struct drm_i915_error_buffer *bo;  	struct i915_vma *vma;  	int count_inactive, count_active;  	count_inactive = 0; -	list_for_each_entry(vma, &vm->active_list, vm_link) +	list_for_each_entry(vma, &vm->inactive_list, vm_link)  		count_inactive++;  	count_active = 0; -	list_for_each_entry(vma, &vm->inactive_list, vm_link) +	list_for_each_entry(vma, &vm->active_list, vm_link)  		count_active++;  	bo = NULL; @@ -1667,7 +1636,16 @@ static void capture_reg_state(struct i915_gpu_state *error)  	}  	/* 4: Everything else */ -	if (INTEL_GEN(dev_priv) >= 8) { +	if (INTEL_GEN(dev_priv) >= 11) { +		error->ier = I915_READ(GEN8_DE_MISC_IER); +		error->gtier[0] = I915_READ(GEN11_RENDER_COPY_INTR_ENABLE); +		error->gtier[1] = I915_READ(GEN11_VCS_VECS_INTR_ENABLE); +		error->gtier[2] = I915_READ(GEN11_GUC_SG_INTR_ENABLE); +		error->gtier[3] = I915_READ(GEN11_GPM_WGBOXPERF_INTR_ENABLE); +		error->gtier[4] = I915_READ(GEN11_CRYPTO_RSVD_INTR_ENABLE); +		error->gtier[5] = I915_READ(GEN11_GUNIT_CSME_INTR_ENABLE); +		error->ngtier = 6; +	} else if (INTEL_GEN(dev_priv) >= 8) {  		error->ier = I915_READ(GEN8_DE_MISC_IER);  		for (i = 0; i < 4; i++)  			error->gtier[i] = I915_READ(GEN8_GT_IER(i));  |