2424
2525using ::testing::Return;
2626
27+ namespace NEO {
28+ namespace MockSipData {
29+ extern SipKernelType calledType;
30+ extern bool called;
31+ } // namespace MockSipData
32+ } // namespace NEO
33+
2734namespace L0 {
2835namespace ult {
2936
@@ -46,6 +53,46 @@ TEST(L0DeviceTest, GivenDualStorageSharedMemorySupportedWhenCreatingDeviceThenPa
4653 EXPECT_EQ (ZE_COMMAND_QUEUE_MODE_SYNCHRONOUS, static_cast <CommandQueueImp *>(deviceImp->pageFaultCommandList ->cmdQImmediate )->getSynchronousMode ());
4754}
4855
56+ TEST (L0DeviceTest, givenMidThreadPreemptionWhenCreatingDeviceThenSipKernelIsInitialized) {
57+ VariableBackup<bool > mockSipCalled (&NEO::MockSipData::called, false );
58+ VariableBackup<NEO::SipKernelType> mockSipCalledType (&NEO::MockSipData::calledType, NEO::SipKernelType::COUNT);
59+
60+ std::unique_ptr<DriverHandleImp> driverHandle (new DriverHandleImp);
61+ auto hwInfo = *NEO::defaultHwInfo;
62+ hwInfo.capabilityTable .defaultPreemptionMode = NEO::PreemptionMode::MidThread;
63+
64+ auto neoDevice = std::unique_ptr<NEO::Device>(NEO::MockDevice::createWithNewExecutionEnvironment<NEO::MockDevice>(&hwInfo, 0 ));
65+
66+ EXPECT_EQ (NEO::SipKernelType::COUNT, NEO::MockSipData::calledType);
67+ EXPECT_FALSE (NEO::MockSipData::called);
68+
69+ auto device = std::unique_ptr<L0::Device>(Device::create (driverHandle.get (), neoDevice.release (), 1 , false ));
70+ ASSERT_NE (nullptr , device);
71+
72+ EXPECT_EQ (NEO::SipKernelType::Csr, NEO::MockSipData::calledType);
73+ EXPECT_TRUE (NEO::MockSipData::called);
74+ }
75+
76+ TEST (L0DeviceTest, givenDisabledPreemptionWhenCreatingDeviceThenSipKernelIsNotInitialized) {
77+ VariableBackup<bool > mockSipCalled (&NEO::MockSipData::called, false );
78+ VariableBackup<NEO::SipKernelType> mockSipCalledType (&NEO::MockSipData::calledType, NEO::SipKernelType::COUNT);
79+
80+ std::unique_ptr<DriverHandleImp> driverHandle (new DriverHandleImp);
81+ auto hwInfo = *NEO::defaultHwInfo;
82+ hwInfo.capabilityTable .defaultPreemptionMode = NEO::PreemptionMode::Disabled;
83+
84+ auto neoDevice = std::unique_ptr<NEO::Device>(NEO::MockDevice::createWithNewExecutionEnvironment<NEO::MockDevice>(&hwInfo, 0 ));
85+
86+ EXPECT_EQ (NEO::SipKernelType::COUNT, NEO::MockSipData::calledType);
87+ EXPECT_FALSE (NEO::MockSipData::called);
88+
89+ auto device = std::unique_ptr<L0::Device>(Device::create (driverHandle.get (), neoDevice.release (), 1 , false ));
90+ ASSERT_NE (nullptr , device);
91+
92+ EXPECT_EQ (NEO::SipKernelType::COUNT, NEO::MockSipData::calledType);
93+ EXPECT_FALSE (NEO::MockSipData::called);
94+ }
95+
4996struct DeviceTest : public ::testing::Test {
5097 void SetUp () override {
5198 DebugManager.flags .CreateMultipleRootDevices .set (numRootDevices);
0 commit comments