fix: verify CB Event IPC input params

Related-To: NEO-11925

Signed-off-by: Bartosz Dunajski <bartosz.dunajski@intel.com>
This commit is contained in:
Bartosz Dunajski
2024-11-08 12:13:32 +00:00
committed by Compute-Runtime-Automation
parent ead001360b
commit ea8d2803ce
3 changed files with 56 additions and 13 deletions

View File

@@ -53,20 +53,28 @@ zexCounterBasedEventCreate2(ze_context_handle_t hContext, ze_device_handle_t hDe
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
}
const bool ipcFlag = !!(desc->flags & ZEX_COUNTER_BASED_EVENT_FLAG_IPC);
const bool timestampFlag = !!(desc->flags & ZEX_COUNTER_BASED_EVENT_FLAG_KERNEL_TIMESTAMP);
const bool mappedTimestampFlag = !!(desc->flags & ZEX_COUNTER_BASED_EVENT_FLAG_KERNEL_MAPPED_TIMESTAMP);
if (ipcFlag && (timestampFlag || mappedTimestampFlag)) {
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
}
EventDescriptor eventDescriptor = {
nullptr, // eventPoolAllocation
desc->pNext, // extensions
0, // totalEventSize
EventPacketsCount::maxKernelSplit, // maxKernelCount
0, // maxPacketsCount
desc->flags & counterBasedFlags, // counterBasedFlags
0, // index
desc->signalScope, // signalScope
desc->waitScope, // waitScope
!!(desc->flags & ZEX_COUNTER_BASED_EVENT_FLAG_KERNEL_TIMESTAMP), // timestampPool
!!(desc->flags & ZEX_COUNTER_BASED_EVENT_FLAG_KERNEL_MAPPED_TIMESTAMP), // kerneMappedTsPoolFlag
false, // importedIpcPool
!!(desc->flags & ZEX_COUNTER_BASED_EVENT_FLAG_IPC), // ipcPool
nullptr, // eventPoolAllocation
desc->pNext, // extensions
0, // totalEventSize
EventPacketsCount::maxKernelSplit, // maxKernelCount
0, // maxPacketsCount
desc->flags & counterBasedFlags, // counterBasedFlags
0, // index
desc->signalScope, // signalScope
desc->waitScope, // waitScope
timestampFlag, // timestampPool
mappedTimestampFlag, // kerneMappedTsPoolFlag
false, // importedIpcPool
ipcFlag, // ipcPool
};
ze_result_t result = ZE_RESULT_SUCCESS;

View File

@@ -87,6 +87,9 @@ Event *Event::create(const EventDescriptor &eventDescriptor, Device *device, ze_
if (eventDescriptor.counterBasedFlags != 0 || NEO::debugManager.flags.ForceInOrderEvents.get() == 1) {
event->enableCounterBasedMode(true, eventDescriptor.counterBasedFlags);
if (eventDescriptor.ipcPool) {
event->isSharableCouterBased = true;
}
}
// do not reset even if it has been imported, since event pool

View File

@@ -63,6 +63,38 @@ HWTEST2_F(InOrderIpcTests, givenInvalidCbEventWhenOpenIpcCalledThenReturnError,
EXPECT_EQ(ZE_RESULT_ERROR_INVALID_ARGUMENT, zexCounterBasedEventGetIpcHandle(events[0]->toHandle(), &zexIpcData));
}
HWTEST2_F(InOrderIpcTests, givenCbEventWhenCreatingFromApiThenOpenIpcHandle, MatchAny) {
auto immCmdList = createImmCmdList<gfxCoreFamily>();
zex_counter_based_event_desc_t counterBasedDesc = {ZEX_STRUCTURE_COUTER_BASED_EVENT_DESC}; // NOLINT(clang-analyzer-optin.core.EnumCastOutOfRange), NEO-12901
counterBasedDesc.flags = ZEX_COUNTER_BASED_EVENT_FLAG_IMMEDIATE;
ze_event_handle_t ipcEvent = nullptr;
ze_event_handle_t nonIpcEvent = nullptr;
ze_event_handle_t timestampIpcEvent = nullptr;
EXPECT_EQ(ZE_RESULT_SUCCESS, zexCounterBasedEventCreate2(context, device, &counterBasedDesc, &nonIpcEvent));
counterBasedDesc.flags |= ZEX_COUNTER_BASED_EVENT_FLAG_IPC;
EXPECT_EQ(ZE_RESULT_SUCCESS, zexCounterBasedEventCreate2(context, device, &counterBasedDesc, &ipcEvent));
counterBasedDesc.flags = ZEX_COUNTER_BASED_EVENT_FLAG_IMMEDIATE | ZEX_COUNTER_BASED_EVENT_FLAG_IPC | ZEX_COUNTER_BASED_EVENT_FLAG_KERNEL_TIMESTAMP;
EXPECT_EQ(ZE_RESULT_ERROR_INVALID_ARGUMENT, zexCounterBasedEventCreate2(context, device, &counterBasedDesc, &timestampIpcEvent));
counterBasedDesc.flags = ZEX_COUNTER_BASED_EVENT_FLAG_IMMEDIATE | ZEX_COUNTER_BASED_EVENT_FLAG_IPC | ZEX_COUNTER_BASED_EVENT_FLAG_KERNEL_MAPPED_TIMESTAMP;
EXPECT_EQ(ZE_RESULT_ERROR_INVALID_ARGUMENT, zexCounterBasedEventCreate2(context, device, &counterBasedDesc, &timestampIpcEvent));
zex_ipc_counter_based_event_handle_t zexIpcData = {};
immCmdList->appendLaunchKernel(kernel->toHandle(), groupCount, nonIpcEvent, 0, nullptr, launchParams, false);
immCmdList->appendLaunchKernel(kernel->toHandle(), groupCount, ipcEvent, 0, nullptr, launchParams, false);
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zexCounterBasedEventGetIpcHandle(nonIpcEvent, &zexIpcData));
EXPECT_EQ(ZE_RESULT_SUCCESS, zexCounterBasedEventGetIpcHandle(ipcEvent, &zexIpcData));
zeEventDestroy(ipcEvent);
zeEventDestroy(nonIpcEvent);
}
HWTEST2_F(InOrderIpcTests, givenIncorrectInternalHandleWhenGetIsCalledThenReturnError, MatchAny) {
auto immCmdList = createImmCmdList<gfxCoreFamily>();