mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-18 22:08:53 +08:00
feature: assign external interrupt id to Event
Related-To: NEO-8179 Signed-off-by: Bartosz Dunajski <bartosz.dunajski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
4067b899cc
commit
cd563c2761
@@ -288,6 +288,8 @@ struct Event : _ze_event_handle_t {
|
||||
return this->signalAllEventPackets ? getMaxPacketsCount() : getPacketsInUse();
|
||||
}
|
||||
|
||||
void setExternalInterruptId(uint32_t interruptId) { externalInterruptId = interruptId; }
|
||||
|
||||
protected:
|
||||
Event(int index, Device *device) : device(device), index(index) {}
|
||||
|
||||
@@ -335,6 +337,8 @@ struct Event : _ze_event_handle_t {
|
||||
uint32_t maxPacketCount = 0;
|
||||
uint32_t totalEventSize = 0;
|
||||
uint32_t counterBasedFlags = 0;
|
||||
uint32_t externalInterruptId = 0;
|
||||
|
||||
CounterBasedMode counterBasedMode = CounterBasedMode::initiallyDisabled;
|
||||
|
||||
ze_event_scope_flags_t signalScope = 0u;
|
||||
|
||||
@@ -30,8 +30,8 @@ Event *Event::create(const EventDescriptor &eventDescriptor, const ze_event_desc
|
||||
auto csr = neoDevice->getDefaultEngine().commandStreamReceiver;
|
||||
auto &hwInfo = neoDevice->getHardwareInfo();
|
||||
|
||||
auto event = new EventImp<TagSizeT>(desc->index, device, csr->isTbxMode());
|
||||
UNRECOVERABLE_IF(event == nullptr);
|
||||
auto event = std::make_unique<EventImp<TagSizeT>>(desc->index, device, csr->isTbxMode());
|
||||
UNRECOVERABLE_IF(!event.get());
|
||||
|
||||
event->eventPoolAllocation = eventDescriptor.eventPoolAllocation;
|
||||
|
||||
@@ -103,6 +103,11 @@ Event *Event::create(const EventDescriptor &eventDescriptor, const ze_event_desc
|
||||
|
||||
interruptMode = (eventSyncModeDesc->syncModeFlags & ZE_INTEL_EVENT_SYNC_MODE_EXP_FLAG_SIGNAL_INTERRUPT);
|
||||
kmdWaitMode = (eventSyncModeDesc->syncModeFlags & ZE_INTEL_EVENT_SYNC_MODE_EXP_FLAG_LOW_POWER_WAIT);
|
||||
|
||||
if (kmdWaitMode) {
|
||||
event->setExternalInterruptId(eventSyncModeDesc->externalInterruptId);
|
||||
UNRECOVERABLE_IF(eventSyncModeDesc->externalInterruptId > 0 && eventDescriptor.eventPoolAllocation);
|
||||
}
|
||||
}
|
||||
|
||||
interruptMode |= (NEO::debugManager.flags.WaitForUserFenceOnEventHostSynchronize.get() == 1);
|
||||
@@ -116,7 +121,7 @@ Event *Event::create(const EventDescriptor &eventDescriptor, const ze_event_desc
|
||||
event->enableInterruptMode();
|
||||
}
|
||||
|
||||
return event;
|
||||
return event.release();
|
||||
}
|
||||
|
||||
template <typename TagSizeT>
|
||||
|
||||
@@ -32,6 +32,7 @@ struct InOrderCmdListFixture : public ::Test<ModuleFixture> {
|
||||
using EventImp<uint32_t>::csrs;
|
||||
using EventImp<uint32_t>::signalScope;
|
||||
using EventImp<uint32_t>::unsetCmdQueue;
|
||||
using EventImp<uint32_t>::externalInterruptId;
|
||||
|
||||
void makeCounterBasedInitiallyDisabled() {
|
||||
counterBasedMode = CounterBasedMode::initiallyDisabled;
|
||||
@@ -59,7 +60,7 @@ struct InOrderCmdListFixture : public ::Test<ModuleFixture> {
|
||||
::Test<ModuleFixture>::TearDown();
|
||||
}
|
||||
|
||||
DestroyableZeUniquePtr<FixtureMockEvent> createStandaloneCbEvent() {
|
||||
DestroyableZeUniquePtr<FixtureMockEvent> createStandaloneCbEvent(const ze_base_desc_t *pNext) {
|
||||
constexpr uint32_t counterBasedFlags = (ZE_EVENT_POOL_COUNTER_BASED_EXP_FLAG_IMMEDIATE | ZE_EVENT_POOL_COUNTER_BASED_EXP_FLAG_NON_IMMEDIATE);
|
||||
|
||||
constexpr EventDescriptor eventDescriptor = {
|
||||
@@ -82,6 +83,7 @@ struct InOrderCmdListFixture : public ::Test<ModuleFixture> {
|
||||
auto inOrderExecInfo = NEO::InOrderExecInfo::createFromExternalAllocation(*device->getNEODevice(), castToUint64(deviceAddress), hostAddress, 1);
|
||||
|
||||
ze_event_desc_t eventDesc = {};
|
||||
eventDesc.pNext = pNext;
|
||||
auto event = static_cast<FixtureMockEvent *>(Event::create<uint64_t>(eventDescriptor, &eventDesc, device));
|
||||
event->updateInOrderExecState(inOrderExecInfo, 1, 0);
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@ HWTEST2_F(InOrderCmdListTests, givenInvalidPnextStructWhenCreatingEventThenIgnor
|
||||
HWTEST2_F(InOrderCmdListTests, givenEventSyncModeDescPassedWhenCreatingEventThenEnableNewModes, IsAtLeastSkl) {
|
||||
ze_event_pool_desc_t eventPoolDesc = {};
|
||||
eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_HOST_VISIBLE;
|
||||
eventPoolDesc.count = 4;
|
||||
eventPoolDesc.count = 6;
|
||||
|
||||
auto eventPool = std::unique_ptr<L0::EventPool>(EventPool::create(driverHandle.get(), context, 0, nullptr, &eventPoolDesc, returnValue));
|
||||
|
||||
@@ -116,6 +116,16 @@ HWTEST2_F(InOrderCmdListTests, givenEventSyncModeDescPassedWhenCreatingEventThen
|
||||
auto event3 = DestroyableZeUniquePtr<FixtureMockEvent>(static_cast<FixtureMockEvent *>(Event::create<typename FamilyType::TimestampPacketType>(eventPool.get(), &eventDesc, device)));
|
||||
EXPECT_TRUE(event3->isInterruptModeEnabled());
|
||||
EXPECT_TRUE(event3->isKmdWaitModeEnabled());
|
||||
|
||||
eventDesc.index = 4;
|
||||
syncModeDesc.syncModeFlags = ZE_INTEL_EVENT_SYNC_MODE_EXP_FLAG_SIGNAL_INTERRUPT;
|
||||
syncModeDesc.externalInterruptId = 123;
|
||||
auto event4 = DestroyableZeUniquePtr<FixtureMockEvent>(static_cast<FixtureMockEvent *>(Event::create<typename FamilyType::TimestampPacketType>(eventPool.get(), &eventDesc, device)));
|
||||
EXPECT_EQ(0u, event4->externalInterruptId);
|
||||
|
||||
eventDesc.index = 5;
|
||||
syncModeDesc.syncModeFlags = ZE_INTEL_EVENT_SYNC_MODE_EXP_FLAG_LOW_POWER_WAIT;
|
||||
EXPECT_ANY_THROW(Event::create<typename FamilyType::TimestampPacketType>(eventPool.get(), &eventDesc, device));
|
||||
}
|
||||
|
||||
HWTEST2_F(InOrderCmdListTests, givenQueueFlagWhenCreatingCmdListThenEnableRelaxedOrdering, IsAtLeastXeHpCore) {
|
||||
@@ -3292,7 +3302,7 @@ HWTEST2_F(InOrderCmdListTests, givenStandaloneCbEventWhenDispatchingThenProgramC
|
||||
using MI_SEMAPHORE_WAIT = typename FamilyType::MI_SEMAPHORE_WAIT;
|
||||
|
||||
auto immCmdList = createImmCmdList<gfxCoreFamily>();
|
||||
auto event = createStandaloneCbEvent();
|
||||
auto event = createStandaloneCbEvent(nullptr);
|
||||
|
||||
auto cmdStream = immCmdList->getCmdContainer().getCommandStream();
|
||||
auto offset = cmdStream->getUsed();
|
||||
@@ -3840,6 +3850,22 @@ HWTEST2_F(InOrderCmdListTests, givenStandaloneEventWhenCallingSynchronizeThenRet
|
||||
zeEventDestroy(handle);
|
||||
}
|
||||
|
||||
HWTEST2_F(InOrderCmdListTests, givenStandaloneCbEventWhenPassingExternalInterruptIdThenAssign, IsAtLeastSkl) {
|
||||
ze_intel_event_sync_mode_exp_desc_t syncModeDesc = {ZE_INTEL_STRUCTURE_TYPE_EVENT_SYNC_MODE_EXP_DESC};
|
||||
syncModeDesc.externalInterruptId = 123;
|
||||
|
||||
ze_event_desc_t eventDesc = {};
|
||||
eventDesc.pNext = &syncModeDesc;
|
||||
|
||||
syncModeDesc.syncModeFlags = ZE_INTEL_EVENT_SYNC_MODE_EXP_FLAG_SIGNAL_INTERRUPT;
|
||||
auto event1 = createStandaloneCbEvent(reinterpret_cast<const ze_base_desc_t *>(&syncModeDesc));
|
||||
EXPECT_EQ(0u, event1->externalInterruptId);
|
||||
|
||||
syncModeDesc.syncModeFlags = ZE_INTEL_EVENT_SYNC_MODE_EXP_FLAG_LOW_POWER_WAIT;
|
||||
auto event2 = createStandaloneCbEvent(reinterpret_cast<const ze_base_desc_t *>(&syncModeDesc));
|
||||
EXPECT_EQ(syncModeDesc.externalInterruptId, event2->externalInterruptId);
|
||||
}
|
||||
|
||||
HWTEST2_F(InOrderCmdListTests, givenStandaloneEventWhenCallingAppendThenSuccess, IsAtLeastXeHpCore) {
|
||||
uint64_t counterValue = 2;
|
||||
uint64_t *hostAddress = &counterValue;
|
||||
|
||||
Reference in New Issue
Block a user