[Intel-gfx] [PATCH] drm/i915: Hold struct_mutex for per-file stats in debugfs/i915_gem_object

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Wed Jun 21 09:22:00 UTC 2017


On 17/06/2017 12:57, Chris Wilson wrote:
> As we walk the obj->vma_list in per_file_stats(), we need to hold
> struct_mutex to prevent alteration of that list.
> 
> Fixes: 1d2ac403ae3b ("drm: Protect dev->filelist with its own mutex")
> Fixes: c84455b4bacc ("drm/i915: Move debug only per-request pid tracking from request to ctx")
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=101460
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Daniel Vetter <daniel.vetter at intel.com>
> Cc: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
> ---
>   drivers/gpu/drm/i915/i915_debugfs.c | 6 +++++-
>   1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index 4577b0af6886..3f44076ec8a0 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -292,6 +292,8 @@ static int per_file_stats(int id, void *ptr, void *data)
>   	struct file_stats *stats = data;
>   	struct i915_vma *vma;
>   
> +	lockdep_assert_held(&obj->base.dev->struct_mutex);
> +
>   	stats->count++;
>   	stats->total += obj->base.size;
>   	if (!obj->bind_count)
> @@ -476,6 +478,8 @@ static int i915_gem_object_info(struct seq_file *m, void *data)
>   		struct drm_i915_gem_request *request;
>   		struct task_struct *task;
>   
> +		mutex_lock(&dev->struct_mutex);

Could have put it just before the spin_lock for maximum OCD but doesn't 
matter. ;)

> +
>   		memset(&stats, 0, sizeof(stats));
>   		stats.file_priv = file->driver_priv;
>   		spin_lock(&file->table_lock);
> @@ -487,7 +491,6 @@ static int i915_gem_object_info(struct seq_file *m, void *data)
>   		 * still alive (e.g. get_pid(current) => fork() => exit()).
>   		 * Therefore, we need to protect this ->comm access using RCU.
>   		 */
> -		mutex_lock(&dev->struct_mutex);
>   		request = list_first_entry_or_null(&file_priv->mm.request_list,
>   						   struct drm_i915_gem_request,
>   						   client_link);
> @@ -497,6 +500,7 @@ static int i915_gem_object_info(struct seq_file *m, void *data)
>   				PIDTYPE_PID);
>   		print_file_stats(m, task ? task->comm : "<unknown>", stats);
>   		rcu_read_unlock();
> +
>   		mutex_unlock(&dev->struct_mutex);
>   	}
>   	mutex_unlock(&dev->filelist_mutex);
> 

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

Regards,

Tvrtko


More information about the Intel-gfx mailing list