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@xxxxxxx> --- 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); 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; @@ -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