================================================================================================
| 1064 | |
| 1065 | // ================================================================================================ |
| 1066 | bool Device::IpcAttach(const char* handle, size_t mem_size, size_t mem_offset, unsigned int flags, |
| 1067 | void** dev_ptr) const { |
| 1068 | amd::Memory* amd_mem_obj = nullptr; |
| 1069 | |
| 1070 | // Create an amd Memory object for the handle |
| 1071 | amd_mem_obj = new (context()) amd::IpcBuffer(context(), flags, mem_offset, mem_size, handle); |
| 1072 | if (amd_mem_obj == nullptr) { |
| 1073 | LogError("failed to create a mem object!"); |
| 1074 | return false; |
| 1075 | } |
| 1076 | |
| 1077 | if (!amd_mem_obj->create(nullptr)) { |
| 1078 | LogError("failed to create a svm hidden buffer!"); |
| 1079 | amd_mem_obj->release(); |
| 1080 | return false; |
| 1081 | } |
| 1082 | |
| 1083 | auto mem_obj_exist = amd::MemObjMap::FindMemObj(amd_mem_obj->getSvmPtr()); |
| 1084 | if (mem_obj_exist == nullptr) { |
| 1085 | // Add the original mem_ptr to the MemObjMap with newly created amd_mem_obj |
| 1086 | amd::MemObjMap::AddMemObj(amd_mem_obj->getSvmPtr(), amd_mem_obj); |
| 1087 | } else { |
| 1088 | amd_mem_obj->release(); |
| 1089 | amd_mem_obj = mem_obj_exist; |
| 1090 | // Memory already exists, just retain the old one. |
| 1091 | amd_mem_obj->retain(); |
| 1092 | } |
| 1093 | |
| 1094 | *dev_ptr = amd_mem_obj->getSvmPtr(); |
| 1095 | |
| 1096 | return true; |
| 1097 | } |
| 1098 | |
| 1099 | // ================================================================================================ |
| 1100 | void Device::IpcDetach(amd::Memory* amd_mem_obj) const { |
no test coverage detected