Using the drm_printer interface will allow us to use these functions when generating the coredump.
Signed-off-by: Pierre-Eric Pelloux-Prayer <[email protected]> --- drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c | 5 ++- drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 5 ++- drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 38 +++++++++---------- drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 5 ++- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 42 ++++++++++----------- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 5 +-- 6 files changed, 52 insertions(+), 48 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c index 8e626f50b362..15ccb0eeb78e 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c @@ -1773,12 +1773,15 @@ static int amdgpu_debugfs_vm_info_show(struct seq_file *m, void *unused) struct amdgpu_device *adev = m->private; struct drm_device *dev = adev_to_drm(adev); struct drm_file *file; + struct drm_printer p; int r; r = mutex_lock_interruptible(&dev->filelist_mutex); if (r) return r; + p = drm_seq_file_printer(m); + list_for_each_entry(file, &dev->filelist, lhead) { struct amdgpu_fpriv *fpriv = file->driver_priv; struct amdgpu_vm *vm = &fpriv->vm; @@ -1793,7 +1796,7 @@ static int amdgpu_debugfs_vm_info_show(struct seq_file *m, void *unused) r = amdgpu_bo_reserve(vm->root.bo, true); if (r) break; - amdgpu_debugfs_vm_bo_info(vm, m); + amdgpu_debugfs_vm_bo_info(vm, &p); amdgpu_bo_unreserve(vm->root.bo); } diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c index 2c68118fe9fd..35457f44a089 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c @@ -1141,12 +1141,15 @@ static int amdgpu_debugfs_gem_info_show(struct seq_file *m, void *unused) struct amdgpu_device *adev = m->private; struct drm_device *dev = adev_to_drm(adev); struct drm_file *file; + struct drm_printer p; int r; r = mutex_lock_interruptible(&dev->filelist_mutex); if (r) return r; + p = drm_seq_file_printer(m); + list_for_each_entry(file, &dev->filelist, lhead) { struct task_struct *task; struct drm_gem_object *gobj; @@ -1170,7 +1173,7 @@ static int amdgpu_debugfs_gem_info_show(struct seq_file *m, void *unused) idr_for_each_entry(&file->object_idr, gobj, id) { struct amdgpu_bo *bo = gem_to_amdgpu_bo(gobj); - amdgpu_bo_print_info(id, bo, m); + amdgpu_bo_print_info(id, bo, &p); } spin_unlock(&file->table_lock); } diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c index 3339703f40b7..568c2cd95703 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c @@ -1553,27 +1553,26 @@ uint32_t amdgpu_bo_get_preferred_domain(struct amdgpu_device *adev, return domain; } -#if defined(CONFIG_DEBUG_FS) -#define amdgpu_bo_print_flag(m, bo, flag) \ +#define amdgpu_bo_print_flag(p, bo, flag) \ do { \ if (bo->flags & (AMDGPU_GEM_CREATE_ ## flag)) { \ - seq_printf((m), " " #flag); \ + drm_printf((p), " " #flag); \ } \ } while (0) /** - * amdgpu_bo_print_info - print BO info in debugfs file + * amdgpu_bo_print_info - print BO info in printer * * @id: Index or Id of the BO * @bo: Requested BO for printing info - * @m: debugfs file + * @p: drm_printer to use * * Print BO information in debugfs file * * Returns: * Size of the BO in bytes. */ -u64 amdgpu_bo_print_info(int id, struct amdgpu_bo *bo, struct seq_file *m) +u64 amdgpu_bo_print_info(int id, struct amdgpu_bo *bo, struct drm_printer *p) { struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev); struct dma_buf_attachment *attachment; @@ -1623,31 +1622,30 @@ u64 amdgpu_bo_print_info(int id, struct amdgpu_bo *bo, struct seq_file *m) } size = amdgpu_bo_size(bo); - seq_printf(m, "\t\t0x%08x: %12lld byte %s", - id, size, placement); + drm_printf(p, "\t\t0x%08x: %12lld byte %s", + id, size, placement); pin_count = READ_ONCE(bo->tbo.pin_count); if (pin_count) - seq_printf(m, " pin count %d", pin_count); + drm_printf(p, " pin count %d", pin_count); dma_buf = READ_ONCE(bo->tbo.base.dma_buf); attachment = READ_ONCE(bo->tbo.base.import_attach); if (attachment) - seq_printf(m, " imported from ino:%lu", file_inode(dma_buf->file)->i_ino); + drm_printf(p, " imported from ino:%lu", file_inode(dma_buf->file)->i_ino); else if (dma_buf) - seq_printf(m, " exported as ino:%lu", file_inode(dma_buf->file)->i_ino); + drm_printf(p, " exported as ino:%lu", file_inode(dma_buf->file)->i_ino); - amdgpu_bo_print_flag(m, bo, CPU_ACCESS_REQUIRED); - amdgpu_bo_print_flag(m, bo, NO_CPU_ACCESS); - amdgpu_bo_print_flag(m, bo, CPU_GTT_USWC); - amdgpu_bo_print_flag(m, bo, VRAM_CLEARED); - amdgpu_bo_print_flag(m, bo, VRAM_CONTIGUOUS); - amdgpu_bo_print_flag(m, bo, VM_ALWAYS_VALID); - amdgpu_bo_print_flag(m, bo, EXPLICIT_SYNC); + amdgpu_bo_print_flag(p, bo, CPU_ACCESS_REQUIRED); + amdgpu_bo_print_flag(p, bo, NO_CPU_ACCESS); + amdgpu_bo_print_flag(p, bo, CPU_GTT_USWC); + amdgpu_bo_print_flag(p, bo, VRAM_CLEARED); + amdgpu_bo_print_flag(p, bo, VRAM_CONTIGUOUS); + amdgpu_bo_print_flag(p, bo, VM_ALWAYS_VALID); + amdgpu_bo_print_flag(p, bo, EXPLICIT_SYNC); - seq_puts(m, "\n"); + drm_puts(p, "\n"); return size; } -#endif diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h index 375448627f7b..f411a8c3199c 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h @@ -139,6 +139,8 @@ struct amdgpu_bo_vm { struct amdgpu_vm_bo_base entries[]; }; +struct drm_printer; + static inline struct amdgpu_bo *ttm_to_amdgpu_bo(struct ttm_buffer_object *tbo) { return container_of(tbo, struct amdgpu_bo, tbo); @@ -345,8 +347,9 @@ void amdgpu_sa_bo_free(struct drm_suballoc **sa_bo, #if defined(CONFIG_DEBUG_FS) void amdgpu_sa_bo_dump_debug_info(struct amdgpu_sa_manager *sa_manager, struct seq_file *m); -u64 amdgpu_bo_print_info(int id, struct amdgpu_bo *bo, struct seq_file *m); #endif +u64 amdgpu_bo_print_info(int id, struct amdgpu_bo *bo, struct drm_printer *p); + void amdgpu_debugfs_sa_init(struct amdgpu_device *adev); bool amdgpu_bo_support_uswc(u64 bo_flags); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c index 3911c78f8282..327ce9e883cc 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c @@ -2990,16 +2990,15 @@ bool amdgpu_vm_handle_fault(struct amdgpu_device *adev, u32 pasid, return false; } -#if defined(CONFIG_DEBUG_FS) /** * amdgpu_debugfs_vm_bo_info - print BO info for the VM * * @vm: Requested VM for printing BO info - * @m: debugfs file + * @p: the drm_printer to use * * Print BO information in debugfs file for the VM */ -void amdgpu_debugfs_vm_bo_info(struct amdgpu_vm *vm, struct seq_file *m) +void amdgpu_debugfs_vm_bo_info(struct amdgpu_vm *vm, struct drm_printer *p) { struct amdgpu_bo_va *bo_va, *tmp; u64 total_idle = 0; @@ -3017,74 +3016,73 @@ void amdgpu_debugfs_vm_bo_info(struct amdgpu_vm *vm, struct seq_file *m) unsigned int id = 0; spin_lock(&vm->status_lock); - seq_puts(m, "\tIdle BOs:\n"); + drm_puts(p, "\tIdle BOs:\n"); list_for_each_entry_safe(bo_va, tmp, &vm->idle, base.vm_status) { if (!bo_va->base.bo) continue; - total_idle += amdgpu_bo_print_info(id++, bo_va->base.bo, m); + total_idle += amdgpu_bo_print_info(id++, bo_va->base.bo, p); } total_idle_objs = id; id = 0; - seq_puts(m, "\tEvicted BOs:\n"); + drm_puts(p, "\tEvicted BOs:\n"); list_for_each_entry_safe(bo_va, tmp, &vm->evicted, base.vm_status) { if (!bo_va->base.bo) continue; - total_evicted += amdgpu_bo_print_info(id++, bo_va->base.bo, m); + total_evicted += amdgpu_bo_print_info(id++, bo_va->base.bo, p); } total_evicted_objs = id; id = 0; - seq_puts(m, "\tRelocated BOs:\n"); + drm_puts(p, "\tRelocated BOs:\n"); list_for_each_entry_safe(bo_va, tmp, &vm->relocated, base.vm_status) { if (!bo_va->base.bo) continue; - total_relocated += amdgpu_bo_print_info(id++, bo_va->base.bo, m); + total_relocated += amdgpu_bo_print_info(id++, bo_va->base.bo, p); } total_relocated_objs = id; id = 0; - seq_puts(m, "\tMoved BOs:\n"); + drm_puts(p, "\tMoved BOs:\n"); list_for_each_entry_safe(bo_va, tmp, &vm->moved, base.vm_status) { if (!bo_va->base.bo) continue; - total_moved += amdgpu_bo_print_info(id++, bo_va->base.bo, m); + total_moved += amdgpu_bo_print_info(id++, bo_va->base.bo, p); } total_moved_objs = id; id = 0; - seq_puts(m, "\tInvalidated BOs:\n"); + drm_puts(p, "\tInvalidated BOs:\n"); list_for_each_entry_safe(bo_va, tmp, &vm->invalidated, base.vm_status) { if (!bo_va->base.bo) continue; - total_invalidated += amdgpu_bo_print_info(id++, bo_va->base.bo, m); + total_invalidated += amdgpu_bo_print_info(id++, bo_va->base.bo, p); } total_invalidated_objs = id; id = 0; - seq_puts(m, "\tDone BOs:\n"); + drm_puts(p, "\tDone BOs:\n"); list_for_each_entry_safe(bo_va, tmp, &vm->done, base.vm_status) { if (!bo_va->base.bo) continue; - total_done += amdgpu_bo_print_info(id++, bo_va->base.bo, m); + total_done += amdgpu_bo_print_info(id++, bo_va->base.bo, p); } spin_unlock(&vm->status_lock); total_done_objs = id; - seq_printf(m, "\tTotal idle size: %12lld\tobjs:\t%d\n", total_idle, + drm_printf(p, "\tTotal idle size: %12lld\tobjs:\t%d\n", total_idle, total_idle_objs); - seq_printf(m, "\tTotal evicted size: %12lld\tobjs:\t%d\n", total_evicted, + drm_printf(p, "\tTotal evicted size: %12lld\tobjs:\t%d\n", total_evicted, total_evicted_objs); - seq_printf(m, "\tTotal relocated size: %12lld\tobjs:\t%d\n", total_relocated, + drm_printf(p, "\tTotal relocated size: %12lld\tobjs:\t%d\n", total_relocated, total_relocated_objs); - seq_printf(m, "\tTotal moved size: %12lld\tobjs:\t%d\n", total_moved, + drm_printf(p, "\tTotal moved size: %12lld\tobjs:\t%d\n", total_moved, total_moved_objs); - seq_printf(m, "\tTotal invalidated size: %12lld\tobjs:\t%d\n", total_invalidated, + drm_printf(p, "\tTotal invalidated size: %12lld\tobjs:\t%d\n", total_invalidated, total_invalidated_objs); - seq_printf(m, "\tTotal done size: %12lld\tobjs:\t%d\n", total_done, + drm_printf(p, "\tTotal done size: %12lld\tobjs:\t%d\n", total_done, total_done_objs); } -#endif /** * amdgpu_vm_update_fault_cache - update cached fault into. diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h index f3ad687125ad..0bf9ea018eb7 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h @@ -43,6 +43,7 @@ struct amdgpu_bo_va; struct amdgpu_job; struct amdgpu_bo_list_entry; struct amdgpu_bo_vm; +struct drm_printer; /* * GPUVM handling @@ -598,9 +599,7 @@ void amdgpu_vm_pt_free_work(struct work_struct *work); void amdgpu_vm_pt_free_list(struct amdgpu_device *adev, struct amdgpu_vm_update_params *params); -#if defined(CONFIG_DEBUG_FS) -void amdgpu_debugfs_vm_bo_info(struct amdgpu_vm *vm, struct seq_file *m); -#endif +void amdgpu_debugfs_vm_bo_info(struct amdgpu_vm *vm, struct drm_printer *p); int amdgpu_vm_pt_map_tables(struct amdgpu_device *adev, struct amdgpu_vm *vm); -- 2.43.0
