diff --git a/shared/source/built_ins/sip.cpp b/shared/source/built_ins/sip.cpp index 17192601ef..8e61490783 100644 --- a/shared/source/built_ins/sip.cpp +++ b/shared/source/built_ins/sip.cpp @@ -88,6 +88,9 @@ size_t SipKernel::getStateSaveAreaSize(Device *device) const { auto &hwInfo = device->getHardwareInfo(); auto &gfxCoreHelper = device->getGfxCoreHelper(); auto maxDbgSurfaceSize = gfxCoreHelper.getSipKernelMaxDbgSurfaceSize(hwInfo); + if (debugManager.flags.OverrideSipKernelMaxDbgSurfaceSize.get() != -1) { + maxDbgSurfaceSize = static_cast(debugManager.flags.OverrideSipKernelMaxDbgSurfaceSize.get()); + } const auto &stateSaveAreaHeader = getStateSaveAreaHeader(); if (stateSaveAreaHeader.empty()) { return maxDbgSurfaceSize; diff --git a/shared/source/debug_settings/debug_variables_base.inl b/shared/source/debug_settings/debug_variables_base.inl index 1fefaa1189..f4ece124dd 100644 --- a/shared/source/debug_settings/debug_variables_base.inl +++ b/shared/source/debug_settings/debug_variables_base.inl @@ -155,6 +155,7 @@ DECLARE_DEBUG_VARIABLE(int32_t, DebuggerForceSbaTrackingMode, -1, "-1: default, DECLARE_DEBUG_VARIABLE(bool, DisableSupportForL0Debugger, 0, "0: default setting for product, 1: disable l0 debugger") DECLARE_DEBUG_VARIABLE(int32_t, DebugApiUsed, 0, "0: default L0 Debug API not used, 1: L0 Debug API used") DECLARE_DEBUG_VARIABLE(int32_t, OverrideCsrAllocationSize, -1, "-1: default, >0: use value for size of CSR allocation") +DECLARE_DEBUG_VARIABLE(int32_t, OverrideSipKernelMaxDbgSurfaceSize, -1, "-1: default, >0: use value as max debug surface size for sip kernel") DECLARE_DEBUG_VARIABLE(int32_t, ComputeOverdispatchDisable, -1, "Set Compute Overdispatch Disable field, -1: do not set.") DECLARE_DEBUG_VARIABLE(int32_t, CFEWeightedDispatchModeDisable, -1, "Set Weighted Dispatch Mode Disable field in CFE_STATE on XEHP, -1: do not set.") DECLARE_DEBUG_VARIABLE(int32_t, CFESingleSliceDispatchCCSMode, -1, "Set Single Slice Dispatch CCS Mode in CFE_STATE on XEHP, -1 - do not set") diff --git a/shared/test/common/common_main.cpp b/shared/test/common/common_main.cpp index 74e8fc85ea..d5139ac1cc 100644 --- a/shared/test/common/common_main.cpp +++ b/shared/test/common/common_main.cpp @@ -449,6 +449,7 @@ int main(int argc, char **argv) { MockSipData::useMockSip = true; } sipInitialized = true; + debugManager.flags.OverrideSipKernelMaxDbgSurfaceSize.set(1); } Device::createPerformanceCountersFunc = [](Device *) -> std::unique_ptr { return {}; }; diff --git a/shared/test/common/test_files/igdrcl.config b/shared/test/common/test_files/igdrcl.config index 548e210523..db172e6038 100644 --- a/shared/test/common/test_files/igdrcl.config +++ b/shared/test/common/test_files/igdrcl.config @@ -47,6 +47,7 @@ DumpSipHeaderFile = unk InjectInternalBuildOptions = unk InjectApiBuildOptions = unk OverrideCsrAllocationSize = -1 +OverrideSipKernelMaxDbgSurfaceSize = -1 AbortHostSyncOnNonHostVisibleEvent = 0 IgnoreProductSpecificIoctlHelper = 0 ForceL1Caching = -1 diff --git a/shared/test/unit_test/built_ins/sip_tests.cpp b/shared/test/unit_test/built_ins/sip_tests.cpp index 054f145cfb..cc36f62d6c 100644 --- a/shared/test/unit_test/built_ins/sip_tests.cpp +++ b/shared/test/unit_test/built_ins/sip_tests.cpp @@ -427,6 +427,8 @@ TEST_F(HexadecimalHeaderSipTest, whenInitHexadecimalArraySipKernelIsCalledTwiceT using StateSaveAreaSipTest = Test; TEST_F(StateSaveAreaSipTest, givenEmptyStateSaveAreaHeaderWhenGetStateSaveAreaSizeCalledThenMaxDbgSurfaceSizeIsReturned) { + DebugManagerStateRestore restore; + debugManager.flags.OverrideSipKernelMaxDbgSurfaceSize.set(-1); MockSipData::useMockSip = true; MockSipData::mockSipKernel->mockStateSaveAreaHeader.clear(); @@ -436,6 +438,8 @@ TEST_F(StateSaveAreaSipTest, givenEmptyStateSaveAreaHeaderWhenGetStateSaveAreaSi } TEST_F(StateSaveAreaSipTest, givenCorruptedStateSaveAreaHeaderWhenGetStateSaveAreaSizeCalledThenMaxDbgSurfaceSizeIsReturned) { + DebugManagerStateRestore restore; + debugManager.flags.OverrideSipKernelMaxDbgSurfaceSize.set(-1); MockSipData::useMockSip = true; MockSipData::mockSipKernel->mockStateSaveAreaHeader = {'g', 'a', 'r', 'b', 'a', 'g', 'e'}; auto hwInfo = *NEO::defaultHwInfo.get(); @@ -443,6 +447,21 @@ TEST_F(StateSaveAreaSipTest, givenCorruptedStateSaveAreaHeaderWhenGetStateSaveAr EXPECT_EQ(gfxCoreHelper.getSipKernelMaxDbgSurfaceSize(hwInfo), SipKernel::getSipKernel(*pDevice, nullptr).getStateSaveAreaSize(pDevice)); } +TEST_F(StateSaveAreaSipTest, givenOverrideSipKernelMaxDebugSurfaceSizeFlagSetWhenGettingStateSaveAreaSizeForInvalidInputThenValueOfDebugFlagIsReturned) { + DebugManagerStateRestore restore; + auto expectedValue = MemoryConstants::pageSize2M; + debugManager.flags.OverrideSipKernelMaxDbgSurfaceSize.set(static_cast(expectedValue)); + MockSipData::useMockSip = true; + MockSipData::mockSipKernel->mockStateSaveAreaHeader = {'g', 'a', 'r', 'b', 'a', 'g', 'e'}; + auto hwInfo = *NEO::defaultHwInfo.get(); + auto &gfxCoreHelper = this->pDevice->getGfxCoreHelper(); + EXPECT_NE(gfxCoreHelper.getSipKernelMaxDbgSurfaceSize(hwInfo), expectedValue); + EXPECT_EQ(expectedValue, SipKernel::getSipKernel(*pDevice, nullptr).getStateSaveAreaSize(pDevice)); + + MockSipData::mockSipKernel->mockStateSaveAreaHeader.clear(); + EXPECT_EQ(expectedValue, SipKernel::getSipKernel(*pDevice, nullptr).getStateSaveAreaSize(pDevice)); +} + TEST_F(StateSaveAreaSipTest, givenCorrectStateSaveAreaHeaderWhenGetStateSaveAreaSizeCalledThenCorrectDbgSurfaceSizeIsReturned) { MockSipData::useMockSip = true; auto hwInfo = pDevice->getHardwareInfo(); diff --git a/shared/test/unit_test/command_stream/aub_file_stream_tests.cpp b/shared/test/unit_test/command_stream/aub_file_stream_tests.cpp index 527af27dc1..0ae729535d 100644 --- a/shared/test/unit_test/command_stream/aub_file_stream_tests.cpp +++ b/shared/test/unit_test/command_stream/aub_file_stream_tests.cpp @@ -734,6 +734,9 @@ HWTEST_F(AubFileStreamTests, givenAubCommandStreamReceiverWhenInitializeEngineIs } HWTEST_F(AubFileStreamTests, givenAubCommandStreamReceiverWithAubManagerWhenInitFileIsCalledThenMemTraceCommentWithDriverVersionIsPutIntoAubStream) { + DebugManagerStateRestore stateRestore; + + debugManager.flags.OverrideSipKernelMaxDbgSurfaceSize.set(-1); auto mockAubManager = std::make_unique(); MockExecutionEnvironment executionEnvironment(defaultHwInfo.get()); @@ -1001,6 +1004,7 @@ HWTEST_F(AubFileStreamTests, givenAndAubCommandStreamReceiverWhenCreateFullFileP HWTEST_F(AubFileStreamTests, givenAubCommandStreamReceiverWithAubManagerWhenInitFileIsCalledThenCommentWithNonDefaultFlagsAreAdded) { DebugManagerStateRestore stateRestore; + debugManager.flags.OverrideSipKernelMaxDbgSurfaceSize.set(-1); debugManager.flags.MakeAllBuffersResident.set(1); debugManager.flags.ZE_AFFINITY_MASK.set("non-default"); diff --git a/shared/test/unit_test/execution_environment/execution_environment_tests.cpp b/shared/test/unit_test/execution_environment/execution_environment_tests.cpp index d5c3ac4e59..1d3d458805 100644 --- a/shared/test/unit_test/execution_environment/execution_environment_tests.cpp +++ b/shared/test/unit_test/execution_environment/execution_environment_tests.cpp @@ -362,6 +362,9 @@ TEST(ExecutionEnvironment, givenExperimentalUSMAllocationReuseCleanerSetAndNotEn } TEST(ExecutionEnvironment, givenNeoCalEnabledWhenCreateExecutionEnvironmentThenSetDebugVariables) { + DebugManagerStateRestore restorer; + debugManager.flags.OverrideSipKernelMaxDbgSurfaceSize.set(-1); + const std::unordered_map config = { {"UseKmdMigration", 0}, {"SplitBcsSize", 256}}; @@ -377,7 +380,6 @@ TEST(ExecutionEnvironment, givenNeoCalEnabledWhenCreateExecutionEnvironmentThenS #undef DECLARE_DEBUG_SCOPED_V #undef DECLARE_DEBUG_VARIABLE - DebugManagerStateRestore restorer; debugManager.flags.NEO_CAL_ENABLED.set(1); ExecutionEnvironment exeEnv;