This information is useful when investigating page faults. Signed-off-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-pra...@amd.com> --- drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 25 +++++++++++++++++++++- drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 3 ++- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 12 +++++------ 4 files changed, 33 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c index 35457f44a089..e8ae93cc2cc7 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c @@ -1173,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, &p); + amdgpu_bo_print_info(id, bo, NULL, &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 568c2cd95703..fb581cd38998 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c @@ -1565,6 +1565,7 @@ uint32_t amdgpu_bo_get_preferred_domain(struct amdgpu_device *adev, * * @id: Index or Id of the BO * @bo: Requested BO for printing info + * @bo_va: optional VA allocations for the BO * @p: drm_printer to use * * Print BO information in debugfs file @@ -1572,7 +1573,8 @@ uint32_t amdgpu_bo_get_preferred_domain(struct amdgpu_device *adev, * Returns: * Size of the BO in bytes. */ -u64 amdgpu_bo_print_info(int id, struct amdgpu_bo *bo, struct drm_printer *p) +u64 amdgpu_bo_print_info(int id, struct amdgpu_bo *bo, struct amdgpu_bo_va *bo_va, + struct drm_printer *p) { struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev); struct dma_buf_attachment *attachment; @@ -1645,6 +1647,27 @@ u64 amdgpu_bo_print_info(int id, struct amdgpu_bo *bo, struct drm_printer *p) amdgpu_bo_print_flag(p, bo, VM_ALWAYS_VALID); amdgpu_bo_print_flag(p, bo, EXPLICIT_SYNC); + if (dma_resv_trylock(bo->tbo.base.resv)) { + if (bo_va) { + struct amdgpu_bo_va_mapping *mapping; + + drm_puts(p, " VA:[ "); + list_for_each_entry(mapping, &bo_va->valids, list) { + drm_printf(p, "0x%llx-0x%llx ", + mapping->start * AMDGPU_GPU_PAGE_SIZE, + (mapping->last + 1) * AMDGPU_GPU_PAGE_SIZE - 1); + } + list_for_each_entry(mapping, &bo_va->invalids, list) { + drm_printf(p, "0x%llx-0x%llx! ", + mapping->start * AMDGPU_GPU_PAGE_SIZE, + (mapping->last + 1) * AMDGPU_GPU_PAGE_SIZE - 1); + } + drm_puts(p, "]"); + } + + dma_resv_unlock(bo->tbo.base.resv); + } + drm_puts(p, "\n"); return size; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h index f411a8c3199c..1eb78ebfced0 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h @@ -348,7 +348,8 @@ void amdgpu_sa_bo_free(struct drm_suballoc **sa_bo, void amdgpu_sa_bo_dump_debug_info(struct amdgpu_sa_manager *sa_manager, struct seq_file *m); #endif -u64 amdgpu_bo_print_info(int id, struct amdgpu_bo *bo, struct drm_printer *p); +u64 amdgpu_bo_print_info(int id, struct amdgpu_bo *bo, struct amdgpu_bo_va *bo_va, + struct drm_printer *p); void amdgpu_debugfs_sa_init(struct amdgpu_device *adev); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c index 327ce9e883cc..7e9d26805f9f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c @@ -3020,7 +3020,7 @@ void amdgpu_debugfs_vm_bo_info(struct amdgpu_vm *vm, struct drm_printer *p) 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, p); + total_idle += amdgpu_bo_print_info(id++, bo_va->base.bo, bo_va, p); } total_idle_objs = id; id = 0; @@ -3029,7 +3029,7 @@ void amdgpu_debugfs_vm_bo_info(struct amdgpu_vm *vm, struct drm_printer *p) 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, p); + total_evicted += amdgpu_bo_print_info(id++, bo_va->base.bo, bo_va, p); } total_evicted_objs = id; id = 0; @@ -3038,7 +3038,7 @@ void amdgpu_debugfs_vm_bo_info(struct amdgpu_vm *vm, struct drm_printer *p) 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, p); + total_relocated += amdgpu_bo_print_info(id++, bo_va->base.bo, bo_va, p); } total_relocated_objs = id; id = 0; @@ -3047,7 +3047,7 @@ void amdgpu_debugfs_vm_bo_info(struct amdgpu_vm *vm, struct drm_printer *p) 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, p); + total_moved += amdgpu_bo_print_info(id++, bo_va->base.bo, bo_va, p); } total_moved_objs = id; id = 0; @@ -3056,7 +3056,7 @@ void amdgpu_debugfs_vm_bo_info(struct amdgpu_vm *vm, struct drm_printer *p) 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, p); + total_invalidated += amdgpu_bo_print_info(id++, bo_va->base.bo, bo_va, p); } total_invalidated_objs = id; id = 0; @@ -3065,7 +3065,7 @@ void amdgpu_debugfs_vm_bo_info(struct amdgpu_vm *vm, struct drm_printer *p) 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, p); + total_done += amdgpu_bo_print_info(id++, bo_va->base.bo, bo_va, p); } spin_unlock(&vm->status_lock); total_done_objs = id; -- 2.43.0