diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_debugfs.c')
| -rw-r--r-- | drivers/gpu/drm/i915/i915_debugfs.c | 57 | 
1 files changed, 51 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index 4f40f1ce1d8..d09a6e02dc9 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c @@ -636,11 +636,16 @@ static int i915_ringbuffer_info(struct seq_file *m, void *data)  	struct drm_device *dev = node->minor->dev;  	drm_i915_private_t *dev_priv = dev->dev_private;  	struct intel_ring_buffer *ring; +	int ret;  	ring = &dev_priv->ring[(uintptr_t)node->info_ent->data];  	if (ring->size == 0)  		return 0; +	ret = mutex_lock_interruptible(&dev->struct_mutex); +	if (ret) +		return ret; +  	seq_printf(m, "Ring %s:\n", ring->name);  	seq_printf(m, "  Head :    %08x\n", I915_READ_HEAD(ring) & HEAD_ADDR);  	seq_printf(m, "  Tail :    %08x\n", I915_READ_TAIL(ring) & TAIL_ADDR); @@ -654,6 +659,8 @@ static int i915_ringbuffer_info(struct seq_file *m, void *data)  	seq_printf(m, "  Control : %08x\n", I915_READ_CTL(ring));  	seq_printf(m, "  Start :   %08x\n", I915_READ_START(ring)); +	mutex_unlock(&dev->struct_mutex); +  	return 0;  } @@ -842,7 +849,16 @@ static int i915_rstdby_delays(struct seq_file *m, void *unused)  	struct drm_info_node *node = (struct drm_info_node *) m->private;  	struct drm_device *dev = node->minor->dev;  	drm_i915_private_t *dev_priv = dev->dev_private; -	u16 crstanddelay = I915_READ16(CRSTANDVID); +	u16 crstanddelay; +	int ret; + +	ret = mutex_lock_interruptible(&dev->struct_mutex); +	if (ret) +		return ret; + +	crstanddelay = I915_READ16(CRSTANDVID); + +	mutex_unlock(&dev->struct_mutex);  	seq_printf(m, "w/ctx: %d, w/o ctx: %d\n", (crstanddelay >> 8) & 0x3f, (crstanddelay & 0x3f)); @@ -940,7 +956,11 @@ static int i915_delayfreq_table(struct seq_file *m, void *unused)  	struct drm_device *dev = node->minor->dev;  	drm_i915_private_t *dev_priv = dev->dev_private;  	u32 delayfreq; -	int i; +	int ret, i; + +	ret = mutex_lock_interruptible(&dev->struct_mutex); +	if (ret) +		return ret;  	for (i = 0; i < 16; i++) {  		delayfreq = I915_READ(PXVFREQ_BASE + i * 4); @@ -948,6 +968,8 @@ static int i915_delayfreq_table(struct seq_file *m, void *unused)  			   (delayfreq & PXVFREQ_PX_MASK) >> PXVFREQ_PX_SHIFT);  	} +	mutex_unlock(&dev->struct_mutex); +  	return 0;  } @@ -962,13 +984,19 @@ static int i915_inttoext_table(struct seq_file *m, void *unused)  	struct drm_device *dev = node->minor->dev;  	drm_i915_private_t *dev_priv = dev->dev_private;  	u32 inttoext; -	int i; +	int ret, i; + +	ret = mutex_lock_interruptible(&dev->struct_mutex); +	if (ret) +		return ret;  	for (i = 1; i <= 32; i++) {  		inttoext = I915_READ(INTTOEXT_BASE_ILK + i * 4);  		seq_printf(m, "INTTOEXT%02d: 0x%08x\n", i, inttoext);  	} +	mutex_unlock(&dev->struct_mutex); +  	return 0;  } @@ -977,9 +1005,19 @@ static int i915_drpc_info(struct seq_file *m, void *unused)  	struct drm_info_node *node = (struct drm_info_node *) m->private;  	struct drm_device *dev = node->minor->dev;  	drm_i915_private_t *dev_priv = dev->dev_private; -	u32 rgvmodectl = I915_READ(MEMMODECTL); -	u32 rstdbyctl = I915_READ(RSTDBYCTL); -	u16 crstandvid = I915_READ16(CRSTANDVID); +	u32 rgvmodectl, rstdbyctl; +	u16 crstandvid; +	int ret; + +	ret = mutex_lock_interruptible(&dev->struct_mutex); +	if (ret) +		return ret; + +	rgvmodectl = I915_READ(MEMMODECTL); +	rstdbyctl = I915_READ(RSTDBYCTL); +	crstandvid = I915_READ16(CRSTANDVID); + +	mutex_unlock(&dev->struct_mutex);  	seq_printf(m, "HD boost: %s\n", (rgvmodectl & MEMMODE_BOOST_EN) ?  		   "yes" : "no"); @@ -1167,9 +1205,16 @@ static int i915_gfxec(struct seq_file *m, void *unused)  	struct drm_info_node *node = (struct drm_info_node *) m->private;  	struct drm_device *dev = node->minor->dev;  	drm_i915_private_t *dev_priv = dev->dev_private; +	int ret; + +	ret = mutex_lock_interruptible(&dev->struct_mutex); +	if (ret) +		return ret;  	seq_printf(m, "GFXEC: %ld\n", (unsigned long)I915_READ(0x112f4)); +	mutex_unlock(&dev->struct_mutex); +  	return 0;  }  |