mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-19 06:24:51 +08:00
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:
committed by
Compute-Runtime-Automation
parent
ead001360b
commit
ea8d2803ce
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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, ×tampIpcEvent));
|
||||
|
||||
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, ×tampIpcEvent));
|
||||
|
||||
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>();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user