]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/amdkfd: Fix pasid value leak
authorXiaogang Chen <xiaogang.chen@amd.com>
Wed, 12 Feb 2025 06:24:02 +0000 (00:24 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 29 May 2025 09:13:49 +0000 (11:13 +0200)
[ Upstream commit 10e08943caedfb4b0b95933d248503a6f6b9fef6 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
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 a160ffe80b3def390f28c740d7acf5c69a81b51d..55d5399676951e049b99d5592b4d41cd9c4b525f 100644 (file)
@@ -303,8 +303,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 0c8129f8d363574352128eb9b5ce7cda40c64f92..b3c8eae4604251eeb78fa447ca3dfbd0cf2092d4 100644 (file)
@@ -1578,27 +1578,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 f0d675c0fc69c98fd28c9af553d95a5fd0815bb8..21be10d46cf9ce19d6178b6370348eec7a8a5d47 100644 (file)
@@ -2687,20 +2687,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 3f411922534b390ebb13a8d216282d7ee1cd1dfe..7c0c24732481e9191e8cb699dd13989ed97f3356 100644 (file)
@@ -1059,11 +1059,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,