diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_7.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_7.cpp index e6253d0b92..c84ad864e9 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_7.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_7.cpp @@ -2065,7 +2065,7 @@ TEST(CommandList, givenContextGroupEnabledWhenCreatingImmediateCommandListWithIn newOsContext->incRefInternal(); newOsContext->setIsPrimaryEngine(engine.osContext->getIsPrimaryEngine()); - newOsContext->setContextGroup(engine.osContext->isPartOfContextGroup()); + newOsContext->setContextGroupCount(engine.osContext->isPartOfContextGroup() ? 5 : 0); engine.osContext = newOsContext; engine.commandStreamReceiver->setupContext(*newOsContext); diff --git a/level_zero/core/test/unit_tests/sources/cmdqueue/test_cmdqueue_3.cpp b/level_zero/core/test/unit_tests/sources/cmdqueue/test_cmdqueue_3.cpp index 48251a94e9..89928fb7ea 100644 --- a/level_zero/core/test/unit_tests/sources/cmdqueue/test_cmdqueue_3.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdqueue/test_cmdqueue_3.cpp @@ -1384,7 +1384,7 @@ TEST(CommandQueue, givenContextGroupEnabledWhenCreatingCommandQueuesWithInterrup newOsContext->incRefInternal(); newOsContext->setIsPrimaryEngine(engine.osContext->getIsPrimaryEngine()); - newOsContext->setContextGroup(engine.osContext->isPartOfContextGroup()); + newOsContext->setContextGroupCount(engine.osContext->isPartOfContextGroup() ? 5 : 0); engine.osContext = newOsContext; engine.commandStreamReceiver->setupContext(*newOsContext); diff --git a/shared/source/device/device.cpp b/shared/source/device/device.cpp index 236da3b147..3afcce4ef8 100644 --- a/shared/source/device/device.cpp +++ b/shared/source/device/device.cpp @@ -468,7 +468,7 @@ void Device::createSecondaryContexts(const EngineControl &primaryEngine, Seconda this->createSecondaryEngine(primaryEngine.commandStreamReceiver, engineTypeUsage); } - primaryEngine.osContext->setContextGroup(true); + UNRECOVERABLE_IF(primaryEngine.osContext->isPartOfContextGroup() == false); } void Device::allocateDebugSurface(size_t debugSurfaceSize) { @@ -553,7 +553,7 @@ bool Device::createEngine(EngineTypeUsage engineTypeUsage) { EngineDescriptor engineDescriptor(engineTypeUsage, getDeviceBitfield(), preemptionMode, false); auto osContext = executionEnvironment->memoryManager->createAndRegisterOsContext(commandStreamReceiver.get(), engineDescriptor); - osContext->setContextGroup(useContextGroup); + osContext->setContextGroupCount(useContextGroup ? gfxCoreHelper.getContextGroupContextsCount() : 0); osContext->setIsPrimaryEngine(isPrimaryEngine); osContext->setIsDefaultEngine(isDefaultEngine); diff --git a/shared/source/device/root_device.cpp b/shared/source/device/root_device.cpp index a3b9665b8a..0df93e736a 100644 --- a/shared/source/device/root_device.cpp +++ b/shared/source/device/root_device.cpp @@ -107,7 +107,7 @@ bool RootDevice::createRootDeviceEngine(EngineTypeUsage engineTypeUsage, DeviceB auto osContext = getMemoryManager()->createAndRegisterOsContext(rootCommandStreamReceiver.get(), engineDescriptor); - osContext->setContextGroup(useContextGroup); + osContext->setContextGroupCount(gfxCoreHelper.getContextGroupContextsCount()); osContext->setIsPrimaryEngine(isPrimaryEngine); rootCommandStreamReceiver->setupContext(*osContext); diff --git a/shared/source/os_interface/os_context.h b/shared/source/os_interface/os_context.h index 57a69f0c91..a33c8b3596 100644 --- a/shared/source/os_interface/os_context.h +++ b/shared/source/os_interface/os_context.h @@ -85,7 +85,7 @@ class OsContext : public ReferenceTrackedObject { void setPrimaryContext(const OsContext *primary) { primaryContext = primary; - isContextGroup = true; + contextGroupCount = primary->contextGroupCount; } const OsContext *getPrimaryContext() const { return primaryContext; @@ -102,11 +102,11 @@ class OsContext : public ReferenceTrackedObject { bool getIsDefaultEngine() const { return this->isDefaultEngine; } - void setContextGroup(bool value) { - isContextGroup = value; + void setContextGroupCount(uint32_t contextGroupCount) { + this->contextGroupCount = contextGroupCount; } bool isPartOfContextGroup() const { - return isContextGroup; + return contextGroupCount > 0; } virtual bool isDirectSubmissionLightActive() const { return false; } @@ -133,7 +133,7 @@ class OsContext : public ReferenceTrackedObject { uint8_t powerHintValue = 0; static constexpr inline uint8_t powerHintMax = 100u; // by definition: 100% power-saving - bool isContextGroup = false; + uint32_t contextGroupCount = 0; const OsContext *primaryContext = nullptr; bool isPrimaryEngine = false; bool isDefaultEngine = false; diff --git a/shared/test/unit_test/direct_submission/direct_submission_controller_tests.cpp b/shared/test/unit_test/direct_submission/direct_submission_controller_tests.cpp index 87d0feb160..ca71c40004 100644 --- a/shared/test/unit_test/direct_submission/direct_submission_controller_tests.cpp +++ b/shared/test/unit_test/direct_submission/direct_submission_controller_tests.cpp @@ -582,7 +582,7 @@ TEST(CommandStreamReceiverGetContextGroupIdTests, givenContextGroupWithPrimaryCo // Create a primary OsContext and mark it as part of a group auto primaryContext = std::make_unique(0, 42, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::regular}, PreemptionMode::ThreadGroup, deviceBitfield)); - primaryContext->setContextGroup(true); + primaryContext->setContextGroupCount(8); // Create a secondary OsContext and set its primary context auto secondaryContext = std::make_unique(0, 99, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::regular}, PreemptionMode::ThreadGroup, deviceBitfield)); @@ -604,7 +604,7 @@ TEST(CommandStreamReceiverGetContextGroupIdTests, givenContextGroupWithoutPrimar // Create an OsContext that is part of a group but has no primary context auto context = std::make_unique(0, 55, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::regular}, PreemptionMode::ThreadGroup, deviceBitfield)); - context->setContextGroup(true); + context->setContextGroupCount(8); // Do NOT set primary context MockCommandStreamReceiver csr(executionEnvironment, 0, deviceBitfield); @@ -682,7 +682,7 @@ class DirectSubmissionIdleDetectionWithContextGroupTests : public ::testing::Tes std::unique_ptr createAndRegisterCsr(uint32_t contextGroupId, bool busy) { auto csr = std::make_unique(executionEnvironment, 0, DeviceBitfield(1)); auto osContext = std::unique_ptr(OsContext::create(nullptr, 0, static_cast(registeredCsrs.size()), EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::regular}, PreemptionMode::ThreadGroup, DeviceBitfield(1)))); - osContext->setContextGroup(true); + osContext->setContextGroupCount(8); csr->setupContext(*osContext); csr->setContextGroupId(contextGroupId); csr->setBusy(busy); @@ -939,7 +939,7 @@ class DirectSubmissionContextGroupCompositeKeyTests : public ::testing::Test { std::unique_ptr createAndRegisterCsr(uint32_t rootDeviceIndex, uint32_t contextGroupId) { auto csr = std::make_unique(executionEnvironment, rootDeviceIndex, DeviceBitfield(1)); auto osContext = std::unique_ptr(OsContext::create(nullptr, rootDeviceIndex, static_cast(registeredCsrs.size()), EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::regular}, PreemptionMode::ThreadGroup, DeviceBitfield(1)))); - osContext->setContextGroup(true); + osContext->setContextGroupCount(8); csr->setupContext(*osContext); csr->setContextGroupId(contextGroupId); controller->registerDirectSubmission(csr.get()); diff --git a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_debugger_tests.cpp b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_debugger_tests.cpp index 531b2fbbd8..6e083c1300 100644 --- a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_debugger_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_debugger_tests.cpp @@ -174,7 +174,7 @@ HWTEST_F(IoctlHelperXeTestFixture, GivenDebuggingEnabledWhenCreateDrmContextFrom OsContextLinux osContext(*drm, 0, 4u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::EngineType::ENGINE_CCS, EngineUsage::regular})); OsContextLinux osContext2(*drm, 0, 5u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::EngineType::ENGINE_CCS, EngineUsage::regular})); - osContext.setContextGroup(true); + osContext.setContextGroupCount(8); osContext2.setPrimaryContext(&osContext); // secondary context should not create exec_queue with EUDEBUG enable