mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 19:30:52 +07:00
drm/i915: Hold struct_mutex for per-file stats in debugfs/i915_gem_object
As we walk the obj->vma_list in per_file_stats(), we need to hold struct_mutex to prevent alteration of that list. Fixes:1d2ac403ae
("drm: Protect dev->filelist with its own mutex") Fixes:c84455b4ba
("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@chris-wilson.co.uk> Cc: Daniel Vetter <daniel.vetter@intel.com> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20170617115744.4452-1-chris@chris-wilson.co.uk Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> (cherry picked from commit0caf81b5c5
) Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
d8462d0ad3
commit
2c73676267
@ -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);
|
||||
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user