diff options
Diffstat (limited to 'drivers/gpu/drm/i915/gt/intel_engine_cs.c')
| -rw-r--r-- | drivers/gpu/drm/i915/gt/intel_engine_cs.c | 16 | 
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c index 898692989313..7fd33e81c2d9 100644 --- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c +++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c @@ -1311,12 +1311,13 @@ static void hexdump(struct drm_printer *m, const void *buf, size_t len)  	}  } -static void intel_engine_print_registers(const struct intel_engine_cs *engine, +static void intel_engine_print_registers(struct intel_engine_cs *engine,  					 struct drm_printer *m)  {  	struct drm_i915_private *dev_priv = engine->i915;  	const struct intel_engine_execlists * const execlists =  		&engine->execlists; +	unsigned long flags;  	u64 addr;  	if (engine->id == RCS0 && IS_GEN_RANGE(dev_priv, 4, 7)) @@ -1397,15 +1398,16 @@ static void intel_engine_print_registers(const struct intel_engine_cs *engine,  				   idx, hws[idx * 2], hws[idx * 2 + 1]);  		} -		rcu_read_lock(); +		spin_lock_irqsave(&engine->active.lock, flags);  		for (idx = 0; idx < execlists_num_ports(execlists); idx++) {  			struct i915_request *rq;  			unsigned int count; +			char hdr[80];  			rq = port_unpack(&execlists->port[idx], &count); -			if (rq) { -				char hdr[80]; - +			if (!rq) { +				drm_printf(m, "\t\tELSP[%d] idle\n", idx); +			} else if (!i915_request_signaled(rq)) {  				snprintf(hdr, sizeof(hdr),  					 "\t\tELSP[%d] count=%d, ring:{start:%08x, hwsp:%08x, seqno:%08x}, rq: ",  					 idx, count, @@ -1414,11 +1416,11 @@ static void intel_engine_print_registers(const struct intel_engine_cs *engine,  					 hwsp_seqno(rq));  				print_request(m, rq, hdr);  			} else { -				drm_printf(m, "\t\tELSP[%d] idle\n", idx); +				print_request(m, rq, "\t\tELSP[%d] rq: ");  			}  		}  		drm_printf(m, "\t\tHW active? 0x%x\n", execlists->active); -		rcu_read_unlock(); +		spin_unlock_irqrestore(&engine->active.lock, flags);  	} else if (INTEL_GEN(dev_priv) > 6) {  		drm_printf(m, "\tPP_DIR_BASE: 0x%08x\n",  			   ENGINE_READ(engine, RING_PP_DIR_BASE));  | 
