================================================================================================
| 1026 | |
| 1027 | // ================================================================================================ |
| 1028 | bool Device::IpcCreate(void* dev_ptr, size_t* mem_size, char* handle, size_t* mem_offset) const { |
| 1029 | amd::Memory* amd_mem_obj = amd::MemObjMap::FindMemObj(dev_ptr); |
| 1030 | if (amd_mem_obj == nullptr) { |
| 1031 | DevLogPrintfError("Cannot retrieve amd_mem_obj for dev_ptr: 0x%x", dev_ptr); |
| 1032 | return false; |
| 1033 | } |
| 1034 | |
| 1035 | // Get the original pointer from the amd::Memory object |
| 1036 | void* orig_dev_ptr = nullptr; |
| 1037 | if (amd_mem_obj->getSvmPtr() != nullptr) { |
| 1038 | orig_dev_ptr = amd_mem_obj->getSvmPtr(); |
| 1039 | } else if (amd_mem_obj->getHostMem() != nullptr) { |
| 1040 | orig_dev_ptr = amd_mem_obj->getHostMem(); |
| 1041 | } else { |
| 1042 | ShouldNotReachHere(); |
| 1043 | } |
| 1044 | |
| 1045 | // Check if the dev_ptr is lesser than original dev_ptr |
| 1046 | if (orig_dev_ptr > dev_ptr) { |
| 1047 | // If this happens, then revisit FindMemObj logic |
| 1048 | DevLogPrintfError("Original dev_ptr: 0x%x cannot be greater than dev_ptr: 0x%x", orig_dev_ptr, |
| 1049 | dev_ptr); |
| 1050 | return false; |
| 1051 | } |
| 1052 | |
| 1053 | // Calculate the memory offset from the original base ptr |
| 1054 | *mem_offset = reinterpret_cast<address>(dev_ptr) - reinterpret_cast<address>(orig_dev_ptr) + |
| 1055 | amd_mem_obj->getOffset(); |
| 1056 | |
| 1057 | *mem_size = amd_mem_obj->getSize(); |
| 1058 | |
| 1059 | auto dev_mem = static_cast<device::Memory*>(amd_mem_obj->getDeviceMemory(*this)); |
| 1060 | auto result = dev_mem->ExportHandle(handle); |
| 1061 | |
| 1062 | return result; |
| 1063 | } |
| 1064 | |
| 1065 | // ================================================================================================ |
| 1066 | bool Device::IpcAttach(const char* handle, size_t mem_size, size_t mem_offset, unsigned int flags, |
no test coverage detected