| From a33c8acd5da3a9479d4bfae380e8cf580d71c378 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 29 Nov 2021 12:33:05 -0500 |
| Subject: drm/amdkfd: process_info lock not needed for svm |
| |
| From: Philip Yang <Philip.Yang@amd.com> |
| |
| [ Upstream commit 3abfe30d803e62cc75dec254eefab3b04d69219b ] |
| |
| process_info->lock is used to protect kfd_bo_list, vm_list_head, n_vms |
| and userptr valid/inval list, svm_range_restore_work and |
| svm_range_set_attr don't access those, so do not need to take |
| process_info lock. This will avoid potential circular locking issue. |
| |
| Signed-off-by: Philip Yang <Philip.Yang@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/amdkfd/kfd_svm.c | 9 --------- |
| 1 file changed, 9 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c |
| index 179080329af89..5a674235ae41a 100644 |
| --- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c |
| +++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c |
| @@ -1565,7 +1565,6 @@ svm_range_list_lock_and_flush_work(struct svm_range_list *svms, |
| static void svm_range_restore_work(struct work_struct *work) |
| { |
| struct delayed_work *dwork = to_delayed_work(work); |
| - struct amdkfd_process_info *process_info; |
| struct svm_range_list *svms; |
| struct svm_range *prange; |
| struct kfd_process *p; |
| @@ -1585,12 +1584,10 @@ static void svm_range_restore_work(struct work_struct *work) |
| * the lifetime of this thread, kfd_process and mm will be valid. |
| */ |
| p = container_of(svms, struct kfd_process, svms); |
| - process_info = p->kgd_process_info; |
| mm = p->mm; |
| if (!mm) |
| return; |
| |
| - mutex_lock(&process_info->lock); |
| svm_range_list_lock_and_flush_work(svms, mm); |
| mutex_lock(&svms->lock); |
| |
| @@ -1643,7 +1640,6 @@ static void svm_range_restore_work(struct work_struct *work) |
| out_reschedule: |
| mutex_unlock(&svms->lock); |
| mmap_write_unlock(mm); |
| - mutex_unlock(&process_info->lock); |
| |
| /* If validation failed, reschedule another attempt */ |
| if (evicted_ranges) { |
| @@ -2974,7 +2970,6 @@ static int |
| svm_range_set_attr(struct kfd_process *p, uint64_t start, uint64_t size, |
| uint32_t nattr, struct kfd_ioctl_svm_attribute *attrs) |
| { |
| - struct amdkfd_process_info *process_info = p->kgd_process_info; |
| struct mm_struct *mm = current->mm; |
| struct list_head update_list; |
| struct list_head insert_list; |
| @@ -2993,8 +2988,6 @@ svm_range_set_attr(struct kfd_process *p, uint64_t start, uint64_t size, |
| |
| svms = &p->svms; |
| |
| - mutex_lock(&process_info->lock); |
| - |
| svm_range_list_lock_and_flush_work(svms, mm); |
| |
| if (!svm_range_is_valid(mm, start, size)) { |
| @@ -3070,8 +3063,6 @@ svm_range_set_attr(struct kfd_process *p, uint64_t start, uint64_t size, |
| mutex_unlock(&svms->lock); |
| mmap_read_unlock(mm); |
| out: |
| - mutex_unlock(&process_info->lock); |
| - |
| pr_debug("pasid 0x%x svms 0x%p [0x%llx 0x%llx] done, r=%d\n", p->pasid, |
| &p->svms, start, start + size - 1, r); |
| |
| -- |
| 2.33.0 |
| |