hsa_status_t LoaderContext::FindRegion(hsa_region_segment_t segment, hsa_region_t region, void *data) { assert(data); hsa_status_t hsa_status = HSA_STATUS_SUCCESS; bool host = false; hsa_status = hsa_region_get_info( region, (hsa_region_info_t)HSA_AMD_REGION_INFO_HOST_ACCESSIBLE, &host); if (HSA_STATUS_SUCCESS != hsa_status) { return hsa_status; } if (host) { hsa_region_segment_t current_segment; hsa_status = hsa_region_get_info(region, HSA_REGION_INFO_SEGMENT, ¤t_segment); if (HSA_STATUS_SUCCESS != hsa_status) { return hsa_status; } if (segment == current_segment) { *((hsa_region_t*)data) = region; } } return HSA_STATUS_SUCCESS; }
/* * Determines if a memory region can be used for kernarg * allocations. */ static hsa_status_t get_kernarg_memory_region(hsa_region_t region, void* data) { hsa_region_segment_t segment; hsa_region_get_info(region, HSA_REGION_INFO_SEGMENT, &segment); if (HSA_REGION_SEGMENT_GLOBAL != segment) { return HSA_STATUS_SUCCESS; } hsa_region_global_flag_t flags; hsa_region_get_info(region, HSA_REGION_INFO_GLOBAL_FLAGS, &flags); if (flags & HSA_REGION_GLOBAL_FLAG_KERNARG) { hsa_region_t* ret = (hsa_region_t*) data; *ret = region; return HSA_STATUS_INFO_BREAK; } return HSA_STATUS_SUCCESS; }