Merge tag 'amd-drm-next-5.14-2021-05-21' of https://gitlab.freedesktop.org/agd5f...
[platform/kernel/linux-starfive.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_vm.c
index 57a6ad0..55991f3 100644 (file)
@@ -25,6 +25,7 @@
  *          Alex Deucher
  *          Jerome Glisse
  */
+
 #include <linux/dma-fence-array.h>
 #include <linux/interval_tree_generic.h>
 #include <linux/idr.h>
@@ -1730,6 +1731,50 @@ error_unlock:
        return r;
 }
 
+void amdgpu_vm_get_memory(struct amdgpu_vm *vm, uint64_t *vram_mem,
+                               uint64_t *gtt_mem, uint64_t *cpu_mem)
+{
+       struct amdgpu_bo_va *bo_va, *tmp;
+
+       list_for_each_entry_safe(bo_va, tmp, &vm->idle, base.vm_status) {
+               if (!bo_va->base.bo)
+                       continue;
+               amdgpu_bo_get_memory(bo_va->base.bo, vram_mem,
+                               gtt_mem, cpu_mem);
+       }
+       list_for_each_entry_safe(bo_va, tmp, &vm->evicted, base.vm_status) {
+               if (!bo_va->base.bo)
+                       continue;
+               amdgpu_bo_get_memory(bo_va->base.bo, vram_mem,
+                               gtt_mem, cpu_mem);
+       }
+       list_for_each_entry_safe(bo_va, tmp, &vm->relocated, base.vm_status) {
+               if (!bo_va->base.bo)
+                       continue;
+               amdgpu_bo_get_memory(bo_va->base.bo, vram_mem,
+                               gtt_mem, cpu_mem);
+       }
+       list_for_each_entry_safe(bo_va, tmp, &vm->moved, base.vm_status) {
+               if (!bo_va->base.bo)
+                       continue;
+               amdgpu_bo_get_memory(bo_va->base.bo, vram_mem,
+                               gtt_mem, cpu_mem);
+       }
+       spin_lock(&vm->invalidated_lock);
+       list_for_each_entry_safe(bo_va, tmp, &vm->invalidated, base.vm_status) {
+               if (!bo_va->base.bo)
+                       continue;
+               amdgpu_bo_get_memory(bo_va->base.bo, vram_mem,
+                               gtt_mem, cpu_mem);
+       }
+       list_for_each_entry_safe(bo_va, tmp, &vm->done, base.vm_status) {
+               if (!bo_va->base.bo)
+                       continue;
+               amdgpu_bo_get_memory(bo_va->base.bo, vram_mem,
+                               gtt_mem, cpu_mem);
+       }
+       spin_unlock(&vm->invalidated_lock);
+}
 /**
  * amdgpu_vm_bo_update - update all BO mappings in the vm page table
  *