mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-08 14:02:58 +08:00
Correctly return number of IPC handles in zexMemGetIpcHandles
Signed-off-by: Jaime Arteaga <jaime.a.arteaga.molina@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
e1ba6d825a
commit
235e167565
@@ -436,12 +436,17 @@ ze_result_t ContextImp::getIpcMemHandles(const void *ptr,
|
||||
if (allocData) {
|
||||
auto alloc = allocData->gpuAllocations.getDefaultGraphicsAllocation();
|
||||
uint32_t numHandles = alloc->getNumHandles();
|
||||
if (pIpcHandles == nullptr) {
|
||||
UNRECOVERABLE_IF(numIpcHandles == nullptr);
|
||||
|
||||
if (*numIpcHandles == 0 || *numIpcHandles > numHandles) {
|
||||
*numIpcHandles = numHandles;
|
||||
}
|
||||
|
||||
if (pIpcHandles == nullptr) {
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
for (uint32_t i = 0; i < numHandles; i++) {
|
||||
for (uint32_t i = 0; i < *numIpcHandles; i++) {
|
||||
int handle = static_cast<int>(allocData->gpuAllocations.getDefaultGraphicsAllocation()->peekInternalHandle(this->driverHandle->getMemoryManager(), i));
|
||||
memcpy_s(reinterpret_cast<void *>(pIpcHandles[i].data),
|
||||
sizeof(ze_ipc_mem_handle_t),
|
||||
|
||||
@@ -74,6 +74,34 @@ TEST_F(MemoryExportImportImplicitScalingTest,
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
}
|
||||
|
||||
TEST_F(MemoryExportImportImplicitScalingTest,
|
||||
givenCallToGetIpcHandleWithDeviceAllocationThenNumIpcHandlesIsUpdatedAlways) {
|
||||
size_t size = 10;
|
||||
size_t alignment = 1u;
|
||||
void *ptr = nullptr;
|
||||
|
||||
ze_device_mem_alloc_desc_t deviceDesc = {};
|
||||
ze_result_t result = context->allocDeviceMem(device->toHandle(),
|
||||
&deviceDesc,
|
||||
size, alignment, &ptr);
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
EXPECT_NE(nullptr, ptr);
|
||||
|
||||
uint32_t numIpcHandles = 0;
|
||||
result = context->getIpcMemHandles(ptr, &numIpcHandles, nullptr);
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
EXPECT_EQ(numIpcHandles, 2u);
|
||||
|
||||
numIpcHandles *= 4;
|
||||
std::vector<ze_ipc_mem_handle_t> ipcHandles(numIpcHandles);
|
||||
result = context->getIpcMemHandles(ptr, &numIpcHandles, ipcHandles.data());
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
EXPECT_EQ(numIpcHandles, 2u);
|
||||
|
||||
result = context->freeMem(ptr);
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
}
|
||||
|
||||
TEST_F(MemoryExportImportImplicitScalingTest,
|
||||
whenCallingOpenIpcHandlesWithIpcHandleThenDeviceAllocationIsReturned) {
|
||||
size_t size = 10;
|
||||
|
||||
Reference in New Issue
Block a user