diff --git a/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/runtime.cpp b/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/runtime.cpp index d23f889637..4fbf5aa145 100644 --- a/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/runtime.cpp +++ b/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/runtime.cpp @@ -3666,32 +3666,30 @@ hsa_status_t Runtime::VMemoryHandleMap(void* va, size_t size, size_t in_offset, // Create handle by exporting and importing the memory from the owning agent auto &agent_driver = agent->driver(); + ShareableHandle shareable_handle; +#if defined(__linux__) hsa_status_t status = agent_driver.ExportDMABuf(memoryHandleIt->first, size, &dmabuf_fd, &offset); if (status != HSA_STATUS_SUCCESS) return status; assert(offset == 0); - ShareableHandle shareable_handle; status = agent_driver.ImportDMABuf(dmabuf_fd, *agent, shareable_handle); if (status != HSA_STATUS_SUCCESS) return status; - if (dmabuf_fd != -1) { - close(dmabuf_fd); - } + close(dmabuf_fd); // Get address that memory is mapped to - if (shareable_handle.IsValid()) { - ret = GetAmdgpuDeviceArgs(agent, shareable_handle, &drm_fd, &drm_cpu_addr); - if (ret) return HSA_STATUS_ERROR; - } else { - hsa_status_t status = agent_driver.GetShareableHandle(va, memoryHandleIt->first, size, &shareable_handle); - if (status != HSA_STATUS_SUCCESS) { - return status; - } - drm_cpu_addr = reinterpret_cast(va); + ret = GetAmdgpuDeviceArgs(agent, shareable_handle, &drm_fd, &drm_cpu_addr); + if (ret) return HSA_STATUS_ERROR; +#else + hsa_status_t status = agent_driver.GetShareableHandle(va, memoryHandleIt->first, size, &shareable_handle); + if (status != HSA_STATUS_SUCCESS) { + return status; } + drm_cpu_addr = reinterpret_cast(va); +#endif mapped_handle_map_.emplace( std::piecewise_construct, std::forward_as_tuple(va), @@ -3783,6 +3781,7 @@ Runtime::MappedHandleAllowedAgent::MappedHandleAllowedAgent( uint64_t offset = 0; MemoryHandle *memHandle = mappedHandle->mem_handle; +#if defined(__linux__) // Export memory from owner agent. hsa_status_t status = memHandle->agentOwner()->driver().ExportDMABuf( memHandle->thunk_handle, mappedHandle->size, &dmabuf_fd, &offset); @@ -3798,6 +3797,9 @@ Runtime::MappedHandleAllowedAgent::MappedHandleAllowedAgent( close(dmabuf_fd); if (status != HSA_STATUS_SUCCESS) return; +#else + shareable_handle.handle = _mappedHandle->shareable_handle.handle; +#endif } Runtime::MappedHandleAllowedAgent::~MappedHandleAllowedAgent() {