55 *
66 */
77
8+ #include " shared/source/os_interface/linux/os_context_linux.h"
89#include " shared/source/os_interface/linux/xe/ioctl_helper_xe.h"
910#include " shared/test/common/helpers/debug_manager_state_restore.h"
1011#include " shared/test/common/helpers/default_hw_info.h"
12+ #include " shared/test/common/helpers/engine_descriptor_helper.h"
13+ #include " shared/test/common/helpers/raii_gfx_core_helper.h"
1114#include " shared/test/common/libult/linux/drm_mock.h"
1215#include " shared/test/common/mocks/linux/debug_mock_drm_xe.h"
1316#include " shared/test/common/mocks/linux/mock_os_time_linux.h"
1417#include " shared/test/common/mocks/mock_execution_environment.h"
18+ #include " shared/test/common/test_macros/hw_test.h"
1519#include " shared/test/common/test_macros/test.h"
1620
1721#include " uapi-eudebug/drm/xe_drm.h"
@@ -147,3 +151,65 @@ TEST(IoctlHelperXeTest, givenFreeDebugMetadataWhenVmCreateHasMultipleExtTypesThe
147151 delete node2;
148152 delete node3;
149153}
154+
155+ TEST (IoctlHelperXeTest, givenIoctlHelperXeWhenCallingGetRunaloneExtPropertyThenCorrectValueReturned) {
156+ auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
157+ executionEnvironment->setDebuggingMode (DebuggingMode::offline);
158+ DrmMockXeDebug drm{*executionEnvironment->rootDeviceEnvironments [0 ]};
159+ auto xeIoctlHelper = std::make_unique<MockIoctlHelperXeDebug>(drm);
160+ EXPECT_EQ (xeIoctlHelper->getRunaloneExtProperty (), DRM_XE_EXEC_QUEUE_SET_PROPERTY_RUNALONE);
161+ }
162+
163+ using IoctlHelperXeTestFixture = ::testing::Test;
164+ HWTEST_F (IoctlHelperXeTestFixture, GivenRunaloneModeRequiredReturnFalseWhenCreateDrmContextThenRunAloneContextIsNotRequested) {
165+ DebugManagerStateRestore restorer;
166+ struct MockGfxCoreHelperHw : NEO::GfxCoreHelperHw<FamilyType> {
167+ bool isRunaloneModeRequired (DebuggingMode debuggingMode) const override {
168+ return false ;
169+ }
170+ };
171+
172+ auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
173+ auto &rootDeviceEnvironment = *executionEnvironment->rootDeviceEnvironments [0 ];
174+ auto raiiFactory = RAIIGfxCoreHelperFactory<MockGfxCoreHelperHw>(rootDeviceEnvironment);
175+ rootDeviceEnvironment.osInterface = std::make_unique<OSInterface>();
176+ rootDeviceEnvironment.osInterface ->setDriverModel (std::make_unique<DrmMockTime>(mockFd, rootDeviceEnvironment));
177+ DrmMockXeDebug drm{*executionEnvironment->rootDeviceEnvironments [0 ]};
178+ auto xeIoctlHelper = std::make_unique<MockIoctlHelperXeDebug>(drm);
179+ auto engineInfo = xeIoctlHelper->createEngineInfo (false );
180+ ASSERT_NE (nullptr , engineInfo);
181+
182+ OsContextLinux osContext (drm, 0 , 0u , EngineDescriptorHelper::getDefaultDescriptor ());
183+ xeIoctlHelper->createDrmContext (drm, osContext, 0 , 0 );
184+
185+ auto ext = drm.receivedContextCreateSetParam ;
186+ EXPECT_NE (ext.property , static_cast <uint32_t >(DRM_XE_EXEC_QUEUE_SET_PROPERTY_RUNALONE));
187+ }
188+
189+ HWTEST_F (IoctlHelperXeTestFixture, GivenRunaloneModeRequiredReturnTrueWhenCreateDrmContextThenRunAloneContextIsRequested) {
190+ DebugManagerStateRestore restorer;
191+ struct MockGfxCoreHelperHw : NEO::GfxCoreHelperHw<FamilyType> {
192+ bool isRunaloneModeRequired (DebuggingMode debuggingMode) const override {
193+ return true ;
194+ }
195+ };
196+
197+ auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
198+ auto &rootDeviceEnvironment = *executionEnvironment->rootDeviceEnvironments [0 ];
199+ auto raiiFactory = RAIIGfxCoreHelperFactory<MockGfxCoreHelperHw>(rootDeviceEnvironment);
200+ rootDeviceEnvironment.osInterface = std::make_unique<OSInterface>();
201+ rootDeviceEnvironment.osInterface ->setDriverModel (std::make_unique<DrmMockTime>(mockFd, rootDeviceEnvironment));
202+ DrmMockXeDebug drm{*executionEnvironment->rootDeviceEnvironments [0 ]};
203+ auto xeIoctlHelper = std::make_unique<MockIoctlHelperXeDebug>(drm);
204+ auto engineInfo = xeIoctlHelper->createEngineInfo (false );
205+ ASSERT_NE (nullptr , engineInfo);
206+
207+ OsContextLinux osContext (drm, 0 , 0u , EngineDescriptorHelper::getDefaultDescriptor ());
208+ xeIoctlHelper->createDrmContext (drm, osContext, 0 , 0 );
209+
210+ auto ext = drm.receivedContextCreateSetParam ;
211+ EXPECT_EQ (ext.base .name , static_cast <uint32_t >(DRM_XE_EXEC_QUEUE_EXTENSION_SET_PROPERTY));
212+ EXPECT_EQ (ext.base .next_extension , 0ULL );
213+ EXPECT_EQ (ext.property , static_cast <uint32_t >(DRM_XE_EXEC_QUEUE_SET_PROPERTY_RUNALONE));
214+ EXPECT_EQ (ext.value , 1ULL );
215+ }
0 commit comments