[PATCH 1/1] Revert "drm/amdkfd: process_info lock not needed for svm"

Felix Kuehling felix.kuehling at amd.com
Fri Feb 25 20:59:16 UTC 2022


Am 2022-02-25 um 15:12 schrieb Philip Yang:
> This reverts commit 3abfe30d803e62cc75dec254eefab3b04d69219b.
>
> To fix deadlock in kFDSVMEvictTest when xnack off.

Please add your Signed-off-by. With that fixed, the patch is

Reviewed-by: Felix Kuehling <Felix.Kuehling at amd.com>


> ---
>   drivers/gpu/drm/amd/amdkfd/kfd_svm.c | 9 +++++++++
>   1 file changed, 9 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
> index b71d47afd243..509d915cbe69 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
> @@ -1629,6 +1629,7 @@ 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;
> @@ -1645,6 +1646,7 @@ static void svm_range_restore_work(struct work_struct *work)
>   	pr_debug("restore svm ranges\n");
>   
>   	p = container_of(svms, struct kfd_process, svms);
> +	process_info = p->kgd_process_info;
>   
>   	/* Keep mm reference when svm_range_validate_and_map ranges */
>   	mm = get_task_mm(p->lead_thread);
> @@ -1653,6 +1655,7 @@ static void svm_range_restore_work(struct work_struct *work)
>   		return;
>   	}
>   
> +	mutex_lock(&process_info->lock);
>   	svm_range_list_lock_and_flush_work(svms, mm);
>   	mutex_lock(&svms->lock);
>   
> @@ -1705,6 +1708,7 @@ 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);
>   	mmput(mm);
>   
>   	/* If validation failed, reschedule another attempt */
> @@ -3209,6 +3213,7 @@ svm_range_set_attr(struct kfd_process *p, struct mm_struct *mm,
>   		   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 list_head update_list;
>   	struct list_head insert_list;
>   	struct list_head remove_list;
> @@ -3226,6 +3231,8 @@ svm_range_set_attr(struct kfd_process *p, struct mm_struct *mm,
>   
>   	svms = &p->svms;
>   
> +	mutex_lock(&process_info->lock);
> +
>   	svm_range_list_lock_and_flush_work(svms, mm);
>   
>   	r = svm_range_is_valid(p, start, size);
> @@ -3300,6 +3307,8 @@ svm_range_set_attr(struct kfd_process *p, struct mm_struct *mm,
>   	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);
>   


More information about the amd-gfx mailing list