[Public] Network issue. Please ignore this duplicate one. : ) >-----Original Message----- >From: amd-gfx <amd-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx> On Behalf Of Lang Yu >Sent: Monday, September 30, 2024 2:38 PM >To: amd-gfx@xxxxxxxxxxxxxxxxxxxxx >Cc: Kuehling, Felix <Felix.Kuehling@xxxxxxx>; Yu, Lang <Lang.Yu@xxxxxxx>; >Kuehling, Felix <Felix.Kuehling@xxxxxxx> >Subject: [PATCH v2] drm/amdkfd: Fix an eviction fence leak > >Only creating a new reference for each process instead of each VM. > >Fixes: 9a1c1339abf9 ("drm/amdkfd: Run restore_workers on freezable WQs") > >Suggested-by: Felix Kuehling <felix.kuehling@xxxxxxx> >Signed-off-by: Lang Yu <lang.yu@xxxxxxx> >--- > drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 4 ++-- > drivers/gpu/drm/amd/amdkfd/kfd_process.c | 7 +++++-- > 2 files changed, 7 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 ce5ca304dba9..fa572ba7f9fc 100644 >--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c >+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c >@@ -1439,8 +1439,8 @@ static int init_kfd_vm(struct amdgpu_vm *vm, void >**process_info, > list_add_tail(&vm->vm_list_node, > &(vm->process_info->vm_list_head)); > vm->process_info->n_vms++; >- >- *ef = dma_fence_get(&vm->process_info->eviction_fence->base); >+ if (ef) >+ *ef = dma_fence_get(&vm->process_info->eviction_fence->base); > mutex_unlock(&vm->process_info->lock); > > return 0; >diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c >b/drivers/gpu/drm/amd/amdkfd/kfd_process.c >index d07acf1b2f93..d665ecdcd12f 100644 >--- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c >+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c >@@ -1702,12 +1702,15 @@ int kfd_process_device_init_vm(struct >kfd_process_device *pdd, > > ret = amdgpu_amdkfd_gpuvm_acquire_process_vm(dev->adev, avm, > &p->kgd_process_info, >- &ef); >+ p->ef ? NULL : &ef); > if (ret) { > dev_err(dev->adev->dev, "Failed to create process VM object\n"); > return ret; > } >- RCU_INIT_POINTER(p->ef, ef); >+ >+ if (!p->ef) >+ RCU_INIT_POINTER(p->ef, ef); >+ > pdd->drm_priv = drm_file->private_data; > > ret = kfd_process_device_reserve_ib_mem(pdd); >-- >2.25.1