[PATCH 1/1] drm/amdgpu: Use kfd_lock_pdd_by_id helper in more places

Deucher, Alexander Alexander.Deucher at amd.com
Mon Aug 22 15:53:19 UTC 2022


[AMD Official Use Only - General]

> -----Original Message-----
> From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of
> Daniel Phillips
> Sent: Monday, August 22, 2022 11:30 AM
> To: amd-gfx at lists.freedesktop.org
> Cc: Phillips, Daniel <Daniel.Phillips at amd.com>; Kuehling, Felix
> <Felix.Kuehling at amd.com>
> Subject: [PATCH 1/1] drm/amdgpu: Use kfd_lock_pdd_by_id helper in more
> places
> 
> Convert most of the "mutex_lock; kfd_process_device_data_by_id"
> occurrences in kfd_chardev to use the kfd_lock_pdd_by_id. These will now
> consistently log debug output if the lookup fails. Sites where
> kfd_process_device_data_by_id is used without locking are not converted
> for now.
> 
> Signed-off-by: Daniel Phillips <daniel.phillips at amd.com>
> ---
>  drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 96 ++++++++----------------
>  1 file changed, 32 insertions(+), 64 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
> b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
> index 2b3d8bc8f0aa..bb5528c55b73 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
> @@ -75,6 +75,7 @@ static inline struct kfd_process_device
> *kfd_lock_pdd_by_id(struct kfd_process *
>  	if (pdd)
>  		return pdd;
> 
> +	pr_debug("Could not find gpu id 0x%x\n", gpu_id);

Leftover debugging code.

>  	mutex_unlock(&p->mutex);
>  	return NULL;
>  }
> @@ -311,14 +312,9 @@ static int kfd_ioctl_create_queue(struct file *filep,
> struct kfd_process *p,
> 
>  	pr_debug("Looking for gpu id 0x%x\n", args->gpu_id);
> 
> -	mutex_lock(&p->mutex);
> -
> -	pdd = kfd_process_device_data_by_id(p, args->gpu_id);
> -	if (!pdd) {
> -		pr_debug("Could not find gpu id 0x%x\n", args->gpu_id);
> -		err = -EINVAL;
> -		goto err_pdd;
> -	}
> +	pdd = kfd_lock_pdd_by_id(p, args->gpu_id);
> +	if (!pdd)
> +		return -EINVAL;
>  	dev = pdd->dev;
> 
>  	pdd = kfd_bind_process_to_device(dev, p); @@ -405,7 +401,6 @@
> static int kfd_ioctl_create_queue(struct file *filep, struct kfd_process *p,
>  		amdgpu_amdkfd_free_gtt_mem(dev->adev, wptr_bo);
>  err_wptr_map_gart:
>  err_bind_process:
> -err_pdd:
>  	mutex_unlock(&p->mutex);
>  	return err;
>  }
> @@ -566,13 +561,9 @@ static int kfd_ioctl_set_memory_policy(struct file
> *filep,
>  		return -EINVAL;
>  	}
> 
> -	mutex_lock(&p->mutex);
> -	pdd = kfd_process_device_data_by_id(p, args->gpu_id);
> -	if (!pdd) {
> -		pr_debug("Could not find gpu id 0x%x\n", args->gpu_id);
> -		err = -EINVAL;
> -		goto err_pdd;
> -	}
> +	pdd = kfd_lock_pdd_by_id(p, args->gpu_id);
> +	if (!pdd)
> +		return -EINVAL;
> 
>  	pdd = kfd_bind_process_to_device(pdd->dev, p);
>  	if (IS_ERR(pdd)) {
> @@ -596,7 +587,6 @@ static int kfd_ioctl_set_memory_policy(struct file
> *filep,
>  		err = -EINVAL;
> 
>  out:
> -err_pdd:
>  	mutex_unlock(&p->mutex);
> 
>  	return err;
> @@ -609,13 +599,9 @@ static int kfd_ioctl_set_trap_handler(struct file
> *filep,
>  	int err = 0;
>  	struct kfd_process_device *pdd;
> 
> -	mutex_lock(&p->mutex);
> -
> -	pdd = kfd_process_device_data_by_id(p, args->gpu_id);
> -	if (!pdd) {
> -		err = -EINVAL;
> -		goto err_pdd;
> -	}
> +	pdd = kfd_lock_pdd_by_id(p, args->gpu_id);
> +	if (!pdd)
> +		return -EINVAL;
> 
>  	pdd = kfd_bind_process_to_device(pdd->dev, p);
>  	if (IS_ERR(pdd)) {
> @@ -626,7 +612,6 @@ static int kfd_ioctl_set_trap_handler(struct file *filep,
>  	kfd_process_set_trap_handler(&pdd->qpd, args->tba_addr, args-
> >tma_addr);
> 
>  out:
> -err_pdd:
>  	mutex_unlock(&p->mutex);
> 
>  	return err;
> @@ -663,13 +648,12 @@ static int kfd_ioctl_get_clock_counters(struct file
> *filep,
>  	struct kfd_ioctl_get_clock_counters_args *args = data;
>  	struct kfd_process_device *pdd;
> 
> -	mutex_lock(&p->mutex);
> -	pdd = kfd_process_device_data_by_id(p, args->gpu_id);
> -	mutex_unlock(&p->mutex);
> -	if (pdd)
> +	pdd = kfd_lock_pdd_by_id(p, args->gpu_id);
> +	if (pdd) {
> +		mutex_unlock(&p->mutex);
>  		/* Reading GPU clock counter from KGD */
>  		args->gpu_clock_counter =
> amdgpu_amdkfd_get_gpu_clock_counter(pdd->dev->adev);
> -	else
> +	} else
>  		/* Node without GPU resource */
>  		args->gpu_clock_counter = 0;


Coding style.  Please convert the else clause to use { } as well.

Alex

> 
> @@ -886,12 +870,9 @@ static int kfd_ioctl_set_scratch_backing_va(struct
> file *filep,
>  	struct kfd_dev *dev;
>  	long err;
> 
> -	mutex_lock(&p->mutex);
> -	pdd = kfd_process_device_data_by_id(p, args->gpu_id);
> -	if (!pdd) {
> -		err = -EINVAL;
> -		goto err_pdd;
> -	}
> +	pdd = kfd_lock_pdd_by_id(p, args->gpu_id);
> +	if (!pdd)
> +		return -EINVAL;
>  	dev = pdd->dev;
> 
>  	pdd = kfd_bind_process_to_device(dev, p); @@ -912,7 +893,6 @@
> static int kfd_ioctl_set_scratch_backing_va(struct file *filep,
>  	return 0;
> 
>  bind_process_to_device_fail:
> -err_pdd:
>  	mutex_unlock(&p->mutex);
>  	return err;
>  }
> @@ -973,12 +953,9 @@ static int kfd_ioctl_acquire_vm(struct file *filep,
> struct kfd_process *p,
>  	if (!drm_file)
>  		return -EINVAL;
> 
> -	mutex_lock(&p->mutex);
> -	pdd = kfd_process_device_data_by_id(p, args->gpu_id);
> -	if (!pdd) {
> -		ret = -EINVAL;
> -		goto err_pdd;
> -	}
> +	pdd = kfd_lock_pdd_by_id(p, args->gpu_id);
> +	if (!pdd)
> +		return -EINVAL;
> 
>  	if (pdd->drm_file) {
>  		ret = pdd->drm_file == drm_file ? 0 : -EBUSY; @@ -995,7
> +972,6 @@ static int kfd_ioctl_acquire_vm(struct file *filep, struct
> kfd_process *p,
>  	return 0;
> 
>  err_unlock:
> -err_pdd:
>  err_drm_file:
>  	mutex_unlock(&p->mutex);
>  	fput(drm_file);
> @@ -1063,12 +1039,9 @@ static int kfd_ioctl_alloc_memory_of_gpu(struct
> file *filep,
>  	}
>  	mutex_unlock(&p->svms.lock);
>  #endif
> -	mutex_lock(&p->mutex);
> -	pdd = kfd_process_device_data_by_id(p, args->gpu_id);
> -	if (!pdd) {
> -		err = -EINVAL;
> -		goto err_pdd;
> -	}
> +	pdd = kfd_lock_pdd_by_id(p, args->gpu_id);
> +	if (!pdd)
> +		return EINVAL;
> 
>  	dev = pdd->dev;
> 
> @@ -1140,7 +1113,6 @@ static int kfd_ioctl_alloc_memory_of_gpu(struct
> file *filep,
>  	amdgpu_amdkfd_gpuvm_free_memory_of_gpu(dev->adev, (struct
> kgd_mem *)mem,
>  					       pdd->drm_priv, NULL);
>  err_unlock:
> -err_pdd:
>  err_large_bar:
>  	mutex_unlock(&p->mutex);
>  	return err;
> @@ -1231,8 +1203,7 @@ static int kfd_ioctl_map_memory_to_gpu(struct
> file *filep,
>  		goto copy_from_user_failed;
>  	}
> 
> -	mutex_lock(&p->mutex);
> -	pdd = kfd_process_device_data_by_id(p, GET_GPU_ID(args-
> >handle));
> +	pdd = kfd_lock_pdd_by_id(p, GET_GPU_ID(args->handle));
>  	if (!pdd) {
>  		err = -EINVAL;
>  		goto get_process_device_data_failed;
> @@ -1304,12 +1275,12 @@ static int kfd_ioctl_map_memory_to_gpu(struct
> file *filep,
> 
>  	return err;
> 
> -get_process_device_data_failed:
>  bind_process_to_device_failed:
>  get_mem_obj_from_handle_failed:
>  map_memory_to_gpu_failed:
>  	mutex_unlock(&p->mutex);
>  copy_from_user_failed:
> +get_process_device_data_failed:
>  sync_memory_failed:
>  	kfree(devices_arr);
> 
> @@ -1347,8 +1318,7 @@ static int
> kfd_ioctl_unmap_memory_from_gpu(struct file *filep,
>  		goto copy_from_user_failed;
>  	}
> 
> -	mutex_lock(&p->mutex);
> -	pdd = kfd_process_device_data_by_id(p, GET_GPU_ID(args-
> >handle));
> +	pdd = kfd_lock_pdd_by_id(p, GET_GPU_ID(args->handle));
>  	if (!pdd) {
>  		err = -EINVAL;
>  		goto bind_process_to_device_failed;
> @@ -1398,10 +1368,10 @@ static int
> kfd_ioctl_unmap_memory_from_gpu(struct file *filep,
> 
>  	return 0;
> 
> -bind_process_to_device_failed:
>  get_mem_obj_from_handle_failed:
>  unmap_memory_from_gpu_failed:
>  	mutex_unlock(&p->mutex);
> +bind_process_to_device_failed:
>  copy_from_user_failed:
>  sync_memory_failed:
>  	kfree(devices_arr);
> @@ -1517,11 +1487,10 @@ static int kfd_ioctl_import_dmabuf(struct file
> *filep,
>  	if (IS_ERR(dmabuf))
>  		return PTR_ERR(dmabuf);
> 
> -	mutex_lock(&p->mutex);
> -	pdd = kfd_process_device_data_by_id(p, args->gpu_id);
> +	pdd = kfd_lock_pdd_by_id(p, args->gpu_id);
>  	if (!pdd) {
>  		r = -EINVAL;
> -		goto err_unlock;
> +		goto err_pdd;
>  	}
> 
>  	pdd = kfd_bind_process_to_device(pdd->dev, p); @@ -1555,6
> +1524,7 @@ static int kfd_ioctl_import_dmabuf(struct file *filep,
>  					       pdd->drm_priv, NULL);
>  err_unlock:
>  	mutex_unlock(&p->mutex);
> +err_pdd:
>  	dma_buf_put(dmabuf);
>  	return r;
>  }
> @@ -1566,13 +1536,11 @@ static int kfd_ioctl_smi_events(struct file *filep,
>  	struct kfd_ioctl_smi_events_args *args = data;
>  	struct kfd_process_device *pdd;
> 
> -	mutex_lock(&p->mutex);
> -
> -	pdd = kfd_process_device_data_by_id(p, args->gpuid);
> -	mutex_unlock(&p->mutex);
> +	pdd = kfd_lock_pdd_by_id(p, args->gpuid);
>  	if (!pdd)
>  		return -EINVAL;
> 
> +	mutex_unlock(&p->mutex);
>  	return kfd_smi_event_open(pdd->dev, &args->anon_fd);  }
> 
> --
> 2.35.1


More information about the amd-gfx mailing list