MCPcopy Create free account
hub / github.com/ROCm/clr / IpcAttach

Method IpcAttach

rocclr/device/device.cpp:1066–1097  ·  view source on GitHub ↗

================================================================================================

Source from the content-addressed store, hash-verified

1064
1065// ================================================================================================
1066bool 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// ================================================================================================
1100void Device::IpcDetach(amd::Memory* amd_mem_obj) const {

Callers 2

hipIpcOpenMemHandleFunction · 0.80
hipMemPoolImportPointerFunction · 0.80

Calls 4

getSvmPtrMethod · 0.80
createMethod · 0.45
releaseMethod · 0.45
retainMethod · 0.45

Tested by

no test coverage detected