From 3e6f51b715769946e231b8aaf5f32df06e7cef47 Mon Sep 17 00:00:00 2001 From: Philip Yang Date: Fri, 16 May 2025 15:51:15 -0400 Subject: [PATCH] libhsakmt: unmap from GPU error handling If unmap from GPU return failed, for example, unmap user queue buffer while queue is active, we should not free obj->mapped_node_id_array, otherwise, the following unmap user queue buffer after queue is destroyed still return failed. Signed-off-by: Philip Yang Change-Id: I32aeb18871c2e971d01900d92916c54680f5c9fa --- libhsakmt/src/fmm.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/libhsakmt/src/fmm.c b/libhsakmt/src/fmm.c index 874d12496b..14f2714c48 100644 --- a/libhsakmt/src/fmm.c +++ b/libhsakmt/src/fmm.c @@ -3339,15 +3339,16 @@ static int _fmm_unmap_from_gpu(manageable_aperture_t *aperture, void *address, args.n_devices * sizeof(uint32_t)); ret = hsakmt_ioctl(hsakmt_kfd_fd, AMDKFD_IOC_UNMAP_MEMORY_FROM_GPU, &args); - remove_device_ids_from_mapped_array(object, - (uint32_t *)args.device_ids_array_ptr, - args.n_success * sizeof(uint32_t)); - - if (object->mapped_node_id_array) - free(object->mapped_node_id_array); - object->mapped_node_id_array = NULL; - object->mapping_count = 0; + if (!ret) { + remove_device_ids_from_mapped_array(object, + (uint32_t *)args.device_ids_array_ptr, + args.n_success * sizeof(uint32_t)); + if (object->mapped_node_id_array) + free(object->mapped_node_id_array); + object->mapped_node_id_array = NULL; + object->mapping_count = 0; + } out: if (!obj) pthread_mutex_unlock(&aperture->fmm_mutex);