drm/amdkfd: Fix pasid value leak
authorXiaogang Chen <xiaogang.chen@amd.com>
Wed, 12 Feb 2025 06:24:02 +0000 (00:24 -0600)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 13 Feb 2025 02:05:50 +0000 (21:05 -0500)
Curret kfd does not allocate pasid values, instead uses pasid value for each
vm from graphic driver. So should not prevent graphic driver from releasing
pasid values since the values are allocated by graphic driver, not kfd driver
anymore. This patch does not stop graphic driver release pasid values.

Fixes: 8544374c0f82 ("drm/amdkfd: Have kfd driver use same PASID values from graphic driver")
Signed-off-by: Xiaogang Chen <xiaogang.chen@amd.com>
Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
drivers/gpu/drm/amd/amdkfd/kfd_process.c

index 092dbd8bec978f0f477e52f4b7dd9c6b81306588..236b73e283e8222be36b4c01fd634da57a528abf 100644 (file)
@@ -304,8 +304,6 @@ int amdgpu_amdkfd_gpuvm_acquire_process_vm(struct amdgpu_device *adev,
                                        struct amdgpu_vm *avm,
                                        void **process_info,
                                        struct dma_fence **ef);
-void amdgpu_amdkfd_gpuvm_release_process_vm(struct amdgpu_device *adev,
-                                       void *drm_priv);
 uint64_t amdgpu_amdkfd_gpuvm_get_process_page_dir(void *drm_priv);
 size_t amdgpu_amdkfd_get_available_memory(struct amdgpu_device *adev,
                                        uint8_t xcp_id);
index 60062c10b083fb79498225f59d634989cde8fc22..ea3f7ee189235313a09d3dd1d0c30f0b00b956b0 100644 (file)
@@ -1586,27 +1586,6 @@ void amdgpu_amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev,
        }
 }
 
-void amdgpu_amdkfd_gpuvm_release_process_vm(struct amdgpu_device *adev,
-                                           void *drm_priv)
-{
-       struct amdgpu_vm *avm;
-
-       if (WARN_ON(!adev || !drm_priv))
-               return;
-
-       avm = drm_priv_to_vm(drm_priv);
-
-       pr_debug("Releasing process vm %p\n", avm);
-
-       /* The original pasid of amdgpu vm has already been
-        * released during making a amdgpu vm to a compute vm
-        * The current pasid is managed by kfd and will be
-        * released on kfd process destroy. Set amdgpu pasid
-        * to 0 to avoid duplicate release.
-        */
-       amdgpu_vm_release_compute(adev, avm);
-}
-
 uint64_t amdgpu_amdkfd_gpuvm_get_process_page_dir(void *drm_priv)
 {
        struct amdgpu_vm *avm = drm_priv_to_vm(drm_priv);
index 22aa4a8f11891bde6f162af5eddd0bd2003e4c35..1c0fd95c3820471888231addf80eb2c29c1e9094 100644 (file)
@@ -2672,20 +2672,6 @@ unreserve_bo:
        return r;
 }
 
-/**
- * amdgpu_vm_release_compute - release a compute vm
- * @adev: amdgpu_device pointer
- * @vm: a vm turned into compute vm by calling amdgpu_vm_make_compute
- *
- * This is a correspondant of amdgpu_vm_make_compute. It decouples compute
- * pasid from vm. Compute should stop use of vm after this call.
- */
-void amdgpu_vm_release_compute(struct amdgpu_device *adev, struct amdgpu_vm *vm)
-{
-       amdgpu_vm_set_pasid(adev, vm, 0);
-       vm->is_compute_context = false;
-}
-
 static int amdgpu_vm_stats_is_zero(struct amdgpu_vm *vm)
 {
        for (int i = 0; i < __AMDGPU_PL_NUM; ++i) {
index 5010a3107bf8928bb64c8c24d12fdc6c5cab504c..f3ad687125ad65e0fc94b7a766072724925880b3 100644 (file)
@@ -489,7 +489,6 @@ int amdgpu_vm_set_pasid(struct amdgpu_device *adev, struct amdgpu_vm *vm,
 long amdgpu_vm_wait_idle(struct amdgpu_vm *vm, long timeout);
 int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm, int32_t xcp_id);
 int amdgpu_vm_make_compute(struct amdgpu_device *adev, struct amdgpu_vm *vm);
-void amdgpu_vm_release_compute(struct amdgpu_device *adev, struct amdgpu_vm *vm);
 void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm);
 int amdgpu_vm_lock_pd(struct amdgpu_vm *vm, struct drm_exec *exec,
                      unsigned int num_fences);
index c75373fd6ef1470f589795e998c852a949549a83..f45e33f79d36434bf19228f12103a01e4efc51a4 100644 (file)
@@ -1058,11 +1058,8 @@ static void kfd_process_destroy_pdds(struct kfd_process *p)
                kfd_process_device_destroy_cwsr_dgpu(pdd);
                kfd_process_device_destroy_ib_mem(pdd);
 
-               if (pdd->drm_file) {
-                       amdgpu_amdkfd_gpuvm_release_process_vm(
-                                       pdd->dev->adev, pdd->drm_priv);
+               if (pdd->drm_file)
                        fput(pdd->drm_file);
-               }
 
                if (pdd->qpd.cwsr_kaddr && !pdd->qpd.cwsr_base)
                        free_pages((unsigned long)pdd->qpd.cwsr_kaddr,