diff --git a/opencl/test/unit_test/debugger/ocl_with_l0_debugger_tests.cpp b/opencl/test/unit_test/debugger/ocl_with_l0_debugger_tests.cpp index edc516348b..3f192a7e65 100644 --- a/opencl/test/unit_test/debugger/ocl_with_l0_debugger_tests.cpp +++ b/opencl/test/unit_test/debugger/ocl_with_l0_debugger_tests.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022-2023 Intel Corporation + * Copyright (C) 2022-2024 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -38,6 +38,7 @@ struct DebuggerClFixture ASSERT_NE(nullptr, clDevice); executionEnvironment->rootDeviceEnvironments[rootDeviceIndex]->initDebuggerL0(device); + device->getL0Debugger()->initialize(); this->osContext = device->getDefaultEngine().osContext; cl_device_id deviceId = clDevice; diff --git a/opencl/test/unit_test/xe_hpg_core/dg2/test_cmds_programming_dg2.cpp b/opencl/test/unit_test/xe_hpg_core/dg2/test_cmds_programming_dg2.cpp index dcdca9cf3e..d50a8e6fc7 100644 --- a/opencl/test/unit_test/xe_hpg_core/dg2/test_cmds_programming_dg2.cpp +++ b/opencl/test/unit_test/xe_hpg_core/dg2/test_cmds_programming_dg2.cpp @@ -6,6 +6,7 @@ */ #include "shared/source/command_container/encode_surface_state.h" +#include "shared/source/debugger/debugger_l0.h" #include "shared/source/gmm_helper/client_context/gmm_client_context.h" #include "shared/source/gmm_helper/gmm_helper.h" #include "shared/source/helpers/state_base_address.h" @@ -53,6 +54,7 @@ DG2TEST_F(CmdsProgrammingTestsDg2, givenL3ToL1DebugFlagAndDebuggerInitializedWhe DebugManagerStateRestore restore; debugManager.flags.ForceL1Caching.set(1u); pDevice->executionEnvironment->rootDeviceEnvironments[0]->initDebuggerL0(pDevice); + pDevice->getL0Debugger()->initialize(); auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver(); flushTask(commandStreamReceiver); diff --git a/shared/source/debugger/debugger_l0.cpp b/shared/source/debugger/debugger_l0.cpp index 20fbc44344..449e9f319d 100644 --- a/shared/source/debugger/debugger_l0.cpp +++ b/shared/source/debugger/debugger_l0.cpp @@ -32,7 +32,6 @@ DebuggerL0::DebuggerL0(NEO::Device *device) : device(device) { commandQueueCount[i] = 0; uuidL0CommandQueueHandle[i] = 0; } - initialize(); } void DebuggerL0::initialize() { diff --git a/shared/source/debugger/debugger_l0.h b/shared/source/debugger/debugger_l0.h index 4837d6c27d..4d59fca7cd 100644 --- a/shared/source/debugger/debugger_l0.h +++ b/shared/source/debugger/debugger_l0.h @@ -106,6 +106,7 @@ class DebuggerL0 : public NEO::Debugger, NEO::NonCopyableOrMovableClass { MOCKABLE_VIRTUAL bool attachZebinModuleToSegmentAllocations(const StackVec &kernelAlloc, uint32_t &moduleHandle, uint32_t elfHandle); MOCKABLE_VIRTUAL bool removeZebinModule(uint32_t moduleHandle); + void initialize(); void setSingleAddressSpaceSbaTracking(bool value) { singleAddressSpaceSbaTracking = value; @@ -120,8 +121,6 @@ class DebuggerL0 : public NEO::Debugger, NEO::NonCopyableOrMovableClass { protected: static bool initDebuggingInOs(NEO::OSInterface *osInterface); - void initialize(); - NEO::Device *device = nullptr; NEO::GraphicsAllocation *sbaAllocation = nullptr; std::unordered_map perContextSbaAllocations; diff --git a/shared/source/device/device.cpp b/shared/source/device/device.cpp index 12b6dab459..3937b1ce82 100644 --- a/shared/source/device/device.cpp +++ b/shared/source/device/device.cpp @@ -217,6 +217,12 @@ bool Device::createDeviceImpl() { return false; } + preemptionMode = PreemptionHelper::getDefaultPreemptionMode(getHardwareInfo()); + if (!isSubDevice()) { + // initialize common resources once + initializeCommonResources(); + } + // create engines if (!initDeviceWithEngines()) { return false; @@ -227,8 +233,9 @@ bool Device::createDeviceImpl() { return true; } - // initialize common resources once - initializeCommonResources(); + if (getL0Debugger()) { + getL0Debugger()->initialize(); + } // continue proper init for all devices return initDeviceFully(); @@ -237,11 +244,8 @@ bool Device::createDeviceImpl() { bool Device::initDeviceWithEngines() { setAsEngineInstanced(); - auto &hwInfo = getHardwareInfo(); - preemptionMode = PreemptionHelper::getDefaultPreemptionMode(hwInfo); - auto &productHelper = getProductHelper(); - if (getDebugger() && productHelper.disableL3CacheForDebug(hwInfo)) { + if (getDebugger() && productHelper.disableL3CacheForDebug(getHardwareInfo())) { getGmmHelper()->forceAllResourcesUncached(); } diff --git a/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp b/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp index bc9deb57a9..d96d465dd4 100644 --- a/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp +++ b/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp @@ -12,6 +12,7 @@ #include "shared/source/command_stream/scratch_space_controller_base.h" #include "shared/source/command_stream/tag_allocation_layout.h" #include "shared/source/command_stream/wait_status.h" +#include "shared/source/debugger/debugger_l0.h" #include "shared/source/gmm_helper/gmm_helper.h" #include "shared/source/gmm_helper/page_table_mngr.h" #include "shared/source/helpers/api_specific_config.h" @@ -4752,6 +4753,7 @@ HWTEST2_F(CommandStreamReceiverHwTest, using STATE_SIP = typename FamilyType::STATE_SIP; pDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->initDebuggerL0(pDevice); + pDevice->getL0Debugger()->initialize(); auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver(); if (commandStreamReceiver.heaplessStateInitialized) { @@ -4810,6 +4812,7 @@ HWTEST2_F(CommandStreamReceiverHwTest, using STATE_SIP = typename FamilyType::STATE_SIP; pDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->initDebuggerL0(pDevice); + pDevice->getL0Debugger()->initialize(); pDevice->getExecutionEnvironment()->setDebuggingMode(DebuggingMode::offline); auto &compilerProductHelper = pDevice->getCompilerProductHelper(); diff --git a/shared/test/unit_test/debugger/linux/test_l0_debugger_linux.cpp b/shared/test/unit_test/debugger/linux/test_l0_debugger_linux.cpp index ea23bfe9fc..38186d3b15 100644 --- a/shared/test/unit_test/debugger/linux/test_l0_debugger_linux.cpp +++ b/shared/test/unit_test/debugger/linux/test_l0_debugger_linux.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022-2023 Intel Corporation + * Copyright (C) 2022-2024 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -98,10 +98,12 @@ struct SingleAddressSpaceLinuxFixture : public Test { HWTEST_F(SingleAddressSpaceLinuxFixture, givenDebuggingModeOfflineWhenDebuggerIsCreatedThenItHasCorrectSingleAddressSpaceValue) { auto debugger = std::make_unique>(pDevice); + debugger->initialize(); EXPECT_FALSE(debugger->singleAddressSpaceSbaTracking); pDevice->getExecutionEnvironment()->setDebuggingMode(DebuggingMode::offline); debugger = std::make_unique>(pDevice); + debugger->initialize(); EXPECT_TRUE(debugger->singleAddressSpaceSbaTracking); } diff --git a/shared/test/unit_test/debugger/test_l0_debugger.cpp b/shared/test/unit_test/debugger/test_l0_debugger.cpp index 567b908f8a..7f9c77118c 100644 --- a/shared/test/unit_test/debugger/test_l0_debugger.cpp +++ b/shared/test/unit_test/debugger/test_l0_debugger.cpp @@ -168,6 +168,7 @@ HWTEST_F(L0DebuggerTest, GivenDeviceWhenAllocateCalledThenDebuggerIsCreated) { HWTEST_F(L0DebuggerTest, givenDebuggerWithoutMemoryOperationsHandlerWhenNotifyingModuleAllocationsThenNoAllocationIsResident) { auto debugger = std::make_unique>(pDevice); + debugger->initialize(); StackVec allocs; NEO::GraphicsAllocation alloc(0, 1u /*num gmms*/, NEO::AllocationType::internalHostMemory, @@ -194,6 +195,7 @@ HWTEST_F(L0DebuggerTest, givenDebuggerWhenCreatedThenModuleHeapDebugAreaIsCreate auto neoDevice = pDevice; auto debugger = std::make_unique>(neoDevice); + debugger->initialize(); auto debugArea = debugger->getModuleDebugArea(); EXPECT_EQ(1, memoryOperationsHandler->makeResidentCalledCount); @@ -228,6 +230,7 @@ HWTEST_F(L0DebuggerTest, givenDebuggerCreatedWhenSubdevicesExistThenModuleHeapDe memoryOperationsHandler->makeResidentCalledCount = 0; neoDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->memoryOperationsInterface.reset(memoryOperationsHandler); auto debugger = std::make_unique>(neoDevice); + debugger->initialize(); EXPECT_EQ((1 + numSubDevices), memoryOperationsHandler->makeResidentCalledCount); } @@ -250,6 +253,7 @@ HWTEST_F(L0DebuggerTest, givenBindlessSipWhenModuleHeapDebugAreaIsCreatedThenRes memoryOperationsHandler->makeResidentCalledCount = 0; auto neoDevice = pDevice; auto debugger = std::make_unique>(neoDevice); + debugger->initialize(); auto debugArea = debugger->getModuleDebugArea(); DebugAreaHeader *header = reinterpret_cast(debugArea->getUnderlyingBuffer()); @@ -274,6 +278,7 @@ HWTEST_F(L0DebuggerTest, givenUseBindlessDebugSipZeroWhenModuleHeapDebugAreaIsCr memoryOperationsHandler->makeResidentCalledCount = 0; auto neoDevice = pDevice; auto debugger = std::make_unique>(neoDevice); + debugger->initialize(); auto debugArea = debugger->getModuleDebugArea(); DebugAreaHeader *header = reinterpret_cast(debugArea->getUnderlyingBuffer()); @@ -302,6 +307,7 @@ HWTEST_F(PerContextAddressSpaceL0DebuggerTest, givenCanonizedGpuVasWhenProgrammi NEO::debugManager.flags.DebuggerForceSbaTrackingMode.set(0); auto debugger = std::make_unique>(pDevice); + debugger->initialize(); debugger->sbaTrackingGpuVa.address = 0x45670000; auto expectedGpuVa = debugger->sbaTrackingGpuVa.address + offsetof(NEO::SbaTrackedAddresses, generalStateBaseAddress); @@ -391,6 +397,7 @@ HWTEST_F(PerContextAddressSpaceL0DebuggerTest, givenNonZeroGpuVasWhenProgramming NEO::debugManager.flags.DebuggerForceSbaTrackingMode.set(0); auto debugger = std::make_unique>(pDevice); + debugger->initialize(); debugger->singleAddressSpaceSbaTracking = 0; debugger->sbaTrackingGpuVa.address = 0x45670000; auto expectedGpuVa = debugger->sbaTrackingGpuVa.address + offsetof(NEO::SbaTrackedAddresses, generalStateBaseAddress); @@ -491,6 +498,7 @@ HWTEST_F(L0DebuggerMultiSubDeviceTest, givenMultiSubDevicesWhenSbaTrackingBuffer auto neoDevice = devices[0].get(); auto debugger = std::make_unique>(neoDevice); + debugger->initialize(); const auto &engines = neoDevice->getAllEngines(); EXPECT_LE(1u, engines.size()); @@ -572,6 +580,7 @@ using Gen12Plus = IsAtLeastGfxCore; HWTEST2_P(L0DebuggerSimpleParameterizedTest, givenZeroGpuVasWhenProgrammingSbaTrackingThenStreamIsNotUsed, Gen12Plus) { using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM; auto debugger = std::make_unique>(pDevice); + debugger->initialize(); debugger->sbaTrackingGpuVa.address = 0x45670000; @@ -591,6 +600,7 @@ HWTEST2_P(L0DebuggerSimpleParameterizedTest, givenZeroGpuVasWhenProgrammingSbaTr HWTEST2_P(L0DebuggerSimpleParameterizedTest, givenNotChangedSurfaceStateWhenCapturingSBAThenNoTrackingCmdsAreAdded, Gen12Plus) { auto debugger = std::make_unique>(pDevice); + debugger->initialize(); debugger->sbaTrackingGpuVa.address = 0x45670000; @@ -614,6 +624,7 @@ HWTEST2_P(L0DebuggerSimpleParameterizedTest, givenNotChangedSurfaceStateWhenCapt HWTEST2_P(L0DebuggerSimpleParameterizedTest, givenChangedBaseAddressesWhenCapturingSBAThenTrackingCmdsAreAdded, Gen12Plus) { auto debugger = std::make_unique>(pDevice); + debugger->initialize(); debugger->sbaTrackingGpuVa.address = 0x45670000; { diff --git a/shared/test/unit_test/debugger/test_l0_debugger_single_address_space.cpp b/shared/test/unit_test/debugger/test_l0_debugger_single_address_space.cpp index 092798821a..6cf93ad7bf 100644 --- a/shared/test/unit_test/debugger/test_l0_debugger_single_address_space.cpp +++ b/shared/test/unit_test/debugger/test_l0_debugger_single_address_space.cpp @@ -47,6 +47,7 @@ HWTEST_F(SingleAddressSpaceFixture, givenDebugFlagForceSbaTrackingModeSetWhenDeb DebugManagerStateRestore restorer; NEO::debugManager.flags.DebuggerForceSbaTrackingMode.set(1); auto debugger = std::make_unique>(pDevice); + debugger->initialize(); EXPECT_TRUE(debugger->singleAddressSpaceSbaTracking); NEO::debugManager.flags.DebuggerForceSbaTrackingMode.set(0); @@ -56,6 +57,7 @@ HWTEST_F(SingleAddressSpaceFixture, givenDebugFlagForceSbaTrackingModeSetWhenDeb HWTEST_F(SingleAddressSpaceFixture, givenSingleAddressSpaceWhenDebuggerIsCreatedThenSbaTrackingGpuVaIsNotReserved) { auto debugger = std::make_unique>(pDevice); + debugger->initialize(); EXPECT_EQ(0u, debugger->sbaTrackingGpuVa.address); EXPECT_EQ(0u, debugger->sbaTrackingGpuVa.size); @@ -79,6 +81,7 @@ HWTEST_F(SingleAddressSpaceFixture, givenSingleAddressSpaceWhenDebuggerIsCreated HWTEST2_F(SingleAddressSpaceFixture, WhenProgrammingSbaTrackingCommandsForSingleAddressSpaceThenAbortIsCalledAndNoCommandsAreAddedToStream, IsAtMostGen11) { auto debugger = std::make_unique>(pDevice); + debugger->initialize(); using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM; using MI_ARB_CHECK = typename FamilyType::MI_ARB_CHECK; using MI_BATCH_BUFFER_START = typename FamilyType::MI_BATCH_BUFFER_START; @@ -109,6 +112,7 @@ HWTEST2_F(SingleAddressSpaceFixture, WhenProgrammingSbaTrackingCommandsForSingle HWTEST2_P(L0DebuggerBBlevelParameterizedTest, GivenNonZeroSbaAddressesWhenProgrammingSbaTrackingCommandsForSingleAddressSpaceThenCorrectSequenceOfCommandsAreAddedToStream, IsAtLeastGen12lp) { auto debugger = std::make_unique>(pDevice); + debugger->initialize(); using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM; using MI_ARB_CHECK = typename FamilyType::MI_ARB_CHECK; using MI_BATCH_BUFFER_START = typename FamilyType::MI_BATCH_BUFFER_START; @@ -229,6 +233,7 @@ HWTEST2_P(L0DebuggerBBlevelParameterizedTest, GivenNonZeroSbaAddressesWhenProgra HWTEST2_P(L0DebuggerBBlevelParameterizedTest, GivenOneNonZeroSbaAddressesWhenProgrammingSbaTrackingCommandsForSingleAddressSpaceThenONlyPartOfCommandsAreAddedToStream, IsAtLeastGen12lp) { auto debugger = std::make_unique>(pDevice); + debugger->initialize(); using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM; using MI_ARB_CHECK = typename FamilyType::MI_ARB_CHECK; using MI_BATCH_BUFFER_START = typename FamilyType::MI_BATCH_BUFFER_START; @@ -342,6 +347,7 @@ INSTANTIATE_TEST_SUITE_P(BBLevelForSbaTracking, L0DebuggerBBlevelParameterizedTe HWTEST2_F(SingleAddressSpaceFixture, GivenAllZeroSbaAddressesWhenProgrammingSbaTrackingCommandsForSingleAddressSpaceThenNoCommandsAreAddedToStream, IsAtLeastGen12lp) { auto debugger = std::make_unique>(pDevice); + debugger->initialize(); AllocationProperties commandBufferProperties = {pDevice->getRootDeviceIndex(), true, MemoryConstants::pageSize, diff --git a/shared/test/unit_test/device/neo_device_tests.cpp b/shared/test/unit_test/device/neo_device_tests.cpp index 939010f60e..f2c0d9644a 100644 --- a/shared/test/unit_test/device/neo_device_tests.cpp +++ b/shared/test/unit_test/device/neo_device_tests.cpp @@ -993,12 +993,16 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, DeviceTests, whenDeviceCreatesEnginesThenDeviceIsIn TEST(FailDeviceTest, GivenFailedDeviceWhenCreatingDeviceThenNullIsReturned) { auto hwInfo = defaultHwInfo.get(); + DebugManagerStateRestore dbgRestore; + debugManager.flags.ForcePreemptionMode.set(static_cast(NEO::PreemptionMode::Disabled)); auto pDevice = MockDevice::createWithNewExecutionEnvironment(hwInfo); EXPECT_EQ(nullptr, pDevice); } TEST(FailDeviceTest, GivenMidThreadPreemptionAndFailedDeviceWhenCreatingDeviceThenNullIsReturned) { + VariableBackup backupSipInitType(&MockSipData::useMockSip, true); + VariableBackup mockSipCalled(&NEO::MockSipData::called, false); DebugManagerStateRestore dbgRestore; debugManager.flags.ForcePreemptionMode.set(static_cast(PreemptionMode::MidThread)); auto pDevice = MockDevice::createWithNewExecutionEnvironment(defaultHwInfo.get());