From: David M Nieto <david.ni...@amd.com>

Add fence tracking for amdgpu resources on gpuvm creation

Signed-off-by: David M Nieto <david.ni...@amd.com>
---
 .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c    | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
index e93850f2f3b1..26e84c2d6316 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
@@ -1042,13 +1042,16 @@ int amdgpu_amdkfd_gpuvm_create_process_vm(struct 
kgd_dev *kgd, u32 pasid,
                                          struct dma_fence **ef)
 {
        struct amdgpu_device *adev = get_amdgpu_device(kgd);
+       struct amdgpu_fpriv *fpriv;
        struct amdgpu_vm *new_vm;
        int ret;
 
-       new_vm = kzalloc(sizeof(*new_vm), GFP_KERNEL);
-       if (!new_vm)
+       fpriv = kzalloc(sizeof(*fpriv), GFP_KERNEL);
+       if (!fpriv)
                return -ENOMEM;
 
+       new_vm = &fpriv->vm;
+
        /* Initialize AMDGPU part of the VM */
        ret = amdgpu_vm_init(adev, new_vm, AMDGPU_VM_CONTEXT_COMPUTE, pasid);
        if (ret) {
@@ -1063,12 +1066,14 @@ int amdgpu_amdkfd_gpuvm_create_process_vm(struct 
kgd_dev *kgd, u32 pasid,
 
        *vm = (void *) new_vm;
 
+       amdgpu_smi_create_proc_node(adev, fpriv, pasid);
+
        return 0;
 
 init_kfd_vm_fail:
        amdgpu_vm_fini(adev, new_vm);
 amdgpu_vm_init_fail:
-       kfree(new_vm);
+       kfree(fpriv);
        return ret;
 }
 
@@ -1142,6 +1147,8 @@ void amdgpu_amdkfd_gpuvm_destroy_process_vm(struct 
kgd_dev *kgd, void *vm)
 {
        struct amdgpu_device *adev = get_amdgpu_device(kgd);
        struct amdgpu_vm *avm = (struct amdgpu_vm *)vm;
+       struct amdgpu_fpriv *fpriv =
+               container_of(avm, struct amdgpu_fpriv, vm);
 
        if (WARN_ON(!kgd || !vm))
                return;
@@ -1149,8 +1156,10 @@ void amdgpu_amdkfd_gpuvm_destroy_process_vm(struct 
kgd_dev *kgd, void *vm)
        pr_debug("Destroying process vm %p\n", vm);
 
        /* Release the VM context */
+       amdgpu_smi_remove_proc_node(adev, fpriv);
+
        amdgpu_vm_fini(adev, avm);
-       kfree(vm);
+       kfree(fpriv);
 }
 
 void amdgpu_amdkfd_gpuvm_release_process_vm(struct kgd_dev *kgd, void *vm)
-- 
2.29.0

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to