From a2a5452f0865d519961fd48854b8cdc79e3b4946 Mon Sep 17 00:00:00 2001 From: Philip Yang Date: Thu, 7 Dec 2017 13:43:36 -0500 Subject: [PATCH 2872/4131] drm/amdkfd: return error and error code if map to gpu failed Fix AMDKFD_IOC_MAP_MEMORY_TO_GPU ioctl always return 0 success even map to gpu failed because invalidate bo failed, also skip sync_memory and flush_tlb if map to gpu failed Change-Id: I5d52eb8671859d592f7c7813b747fb6ddd596577 Signed-off-by: Philip Yang --- drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c index f99fc4e..c36d546 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c @@ -1318,14 +1318,19 @@ static int kfd_ioctl_map_memory_to_gpu(struct file *filep, } err = peer->kfd2kgd->map_memory_to_gpu( peer->kgd, (struct kgd_mem *)mem, peer_pdd->vm); - if (err != 0) - pr_err("Failed to map\n"); + if (err != 0) { + pr_err("Failed to map to gpu %d, num_dev=%d\n", + i, num_dev); + goto map_memory_to_gpu_failed; + } } } else { err = dev->kfd2kgd->map_memory_to_gpu( dev->kgd, (struct kgd_mem *)mem, pdd->vm); - if (err != 0) + if (err != 0) { pr_err("Failed to map\n"); + goto map_memory_to_gpu_failed; + } } mutex_unlock(&p->mutex); @@ -1358,10 +1363,13 @@ static int kfd_ioctl_map_memory_to_gpu(struct file *filep, bind_process_to_device_failed: get_mem_obj_from_handle_failed: +map_memory_to_gpu_failed: mutex_unlock(&p->mutex); copy_from_user_failed: sync_memory_failed: - kfree(devices_arr); + if (args->device_ids_array_size > 0 && devices_arr) + kfree(devices_arr); + return err; } -- 2.7.4