diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0325-drm-amdgpu-rework-GEM-info-printing.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0325-drm-amdgpu-rework-GEM-info-printing.patch | 150 |
1 files changed, 0 insertions, 150 deletions
diff --git a/common/recipes-kernel/linux/files/0325-drm-amdgpu-rework-GEM-info-printing.patch b/common/recipes-kernel/linux/files/0325-drm-amdgpu-rework-GEM-info-printing.patch deleted file mode 100644 index 059de0b6..00000000 --- a/common/recipes-kernel/linux/files/0325-drm-amdgpu-rework-GEM-info-printing.patch +++ /dev/null @@ -1,150 +0,0 @@ -From 8c97cc2e58f806aec91a47949daf5a57c041e188 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> -Date: Mon, 15 Feb 2016 15:23:00 +0100 -Subject: [PATCH 0325/1110] drm/amdgpu: rework GEM info printing -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Print BOs grouped per client. - -Signed-off-by: Christian König <christian.koenig@amd.com> -Reviewed-by: Alex Deucher <alexander.deucher@amd.com> ---- - drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 - - drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 94 +++++++++++++++++++++------------ - 2 files changed, 61 insertions(+), 34 deletions(-) - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -index 9a9673c..ba66640 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -@@ -493,7 +493,6 @@ struct amdgpu_bo { - struct amdgpu_bo *parent; - - struct ttm_bo_kmap_obj dma_buf_vmap; -- pid_t pid; - struct amdgpu_mn *mn; - struct list_head mn_list; - }; -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c -index 86ce4f3..c44905a 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c -@@ -83,7 +83,6 @@ retry: - return r; - } - *obj = &robj->gem_base; -- robj->pid = task_pid_nr(current); - - mutex_lock(&adev->gem.mutex); - list_add_tail(&robj->list, &adev->gem.objects); -@@ -695,44 +694,73 @@ int amdgpu_mode_dumb_create(struct drm_file *file_priv, - } - - #if defined(CONFIG_DEBUG_FS) -+static int amdgpu_debugfs_gem_bo_info(int id, void *ptr, void *data) -+{ -+ struct drm_gem_object *gobj = ptr; -+ struct amdgpu_bo *bo = gem_to_amdgpu_bo(gobj); -+ struct seq_file *m = data; -+ -+ unsigned domain; -+ const char *placement; -+ unsigned pin_count; -+ -+ domain = amdgpu_mem_type_to_domain(bo->tbo.mem.mem_type); -+ switch (domain) { -+ case AMDGPU_GEM_DOMAIN_VRAM: -+ placement = "VRAM"; -+ break; -+ case AMDGPU_GEM_DOMAIN_GTT: -+ placement = " GTT"; -+ break; -+ case AMDGPU_GEM_DOMAIN_CPU: -+ default: -+ placement = " CPU"; -+ break; -+ } -+ seq_printf(m, "\t0x%08x: %12ld byte %s @ 0x%010Lx", -+ id, amdgpu_bo_size(bo), placement, -+ amdgpu_bo_gpu_offset(bo)); -+ -+ pin_count = ACCESS_ONCE(bo->pin_count); -+ if (pin_count) -+ seq_printf(m, " pin count %d", pin_count); -+ seq_printf(m, "\n"); -+ -+ return 0; -+} -+ - static int amdgpu_debugfs_gem_info(struct seq_file *m, void *data) - { - struct drm_info_node *node = (struct drm_info_node *)m->private; - struct drm_device *dev = node->minor->dev; -- struct amdgpu_device *adev = dev->dev_private; -- struct amdgpu_bo *rbo; -- unsigned i = 0; -+ struct drm_file *file; -+ int r; - -- mutex_lock(&adev->gem.mutex); -- list_for_each_entry(rbo, &adev->gem.objects, list) { -- unsigned pin_count; -- unsigned domain; -- const char *placement; -- -- domain = amdgpu_mem_type_to_domain(rbo->tbo.mem.mem_type); -- switch (domain) { -- case AMDGPU_GEM_DOMAIN_VRAM: -- placement = "VRAM"; -- break; -- case AMDGPU_GEM_DOMAIN_GTT: -- placement = " GTT"; -- break; -- case AMDGPU_GEM_DOMAIN_CPU: -- default: -- placement = " CPU"; -- break; -- } -- seq_printf(m, "bo[0x%08x] %12ld %s @ 0x%010Lx pid %8d", -- i, amdgpu_bo_size(rbo), placement, -- amdgpu_bo_gpu_offset(rbo), rbo->pid); -- -- pin_count = ACCESS_ONCE(rbo->pin_count); -- if (pin_count) -- seq_printf(m, " pin count %d", pin_count); -- seq_printf(m, "\n"); -- i++; -+ r = mutex_lock_interruptible(&dev->struct_mutex); -+ if (r) -+ return r; -+ -+ list_for_each_entry(file, &dev->filelist, lhead) { -+ struct task_struct *task; -+ -+ /* -+ * Although we have a valid reference on file->pid, that does -+ * not guarantee that the task_struct who called get_pid() is -+ * still alive (e.g. get_pid(current) => fork() => exit()). -+ * Therefore, we need to protect this ->comm access using RCU. -+ */ -+ rcu_read_lock(); -+ task = pid_task(file->pid, PIDTYPE_PID); -+ seq_printf(m, "pid %8d command %s:\n", pid_nr(file->pid), -+ task ? task->comm : "<unknown>"); -+ rcu_read_unlock(); -+ -+ spin_lock(&file->table_lock); -+ idr_for_each(&file->object_idr, amdgpu_debugfs_gem_bo_info, m); -+ spin_unlock(&file->table_lock); - } -- mutex_unlock(&adev->gem.mutex); -+ -+ mutex_unlock(&dev->struct_mutex); - return 0; - } - --- -2.7.4 - |