diff --git a/level_zero/core/source/cmdlist/cmdlist_hw.inl b/level_zero/core/source/cmdlist/cmdlist_hw.inl index e3965f37a3..682520bf69 100644 --- a/level_zero/core/source/cmdlist/cmdlist_hw.inl +++ b/level_zero/core/source/cmdlist/cmdlist_hw.inl @@ -10,6 +10,7 @@ #include "shared/source/command_stream/command_stream_receiver.h" #include "shared/source/command_stream/linear_stream.h" #include "shared/source/command_stream/preemption.h" +#include "shared/source/debugger/debugger_l0.h" #include "shared/source/device/device.h" #include "shared/source/helpers/api_specific_config.h" #include "shared/source/helpers/blit_commands_helper.h" diff --git a/level_zero/core/source/cmdqueue/cmdqueue.cpp b/level_zero/core/source/cmdqueue/cmdqueue.cpp index ce1e4e0713..77909d4792 100644 --- a/level_zero/core/source/cmdqueue/cmdqueue.cpp +++ b/level_zero/core/source/cmdqueue/cmdqueue.cpp @@ -11,6 +11,7 @@ #include "shared/source/command_stream/queue_throttle.h" #include "shared/source/command_stream/wait_status.h" #include "shared/source/debug_settings/debug_settings_manager.h" +#include "shared/source/debugger/debugger_l0.h" #include "shared/source/memory_manager/memory_manager.h" #include "level_zero/core/source/cmdlist/cmdlist_hw.h" diff --git a/level_zero/core/source/cmdqueue/cmdqueue_hw.inl b/level_zero/core/source/cmdqueue/cmdqueue_hw.inl index 5878d99ba6..a3cfa74261 100644 --- a/level_zero/core/source/cmdqueue/cmdqueue_hw.inl +++ b/level_zero/core/source/cmdqueue/cmdqueue_hw.inl @@ -18,6 +18,7 @@ #include "shared/source/command_stream/submission_status.h" #include "shared/source/command_stream/thread_arbitration_policy.h" #include "shared/source/command_stream/wait_status.h" +#include "shared/source/debugger/debugger_l0.h" #include "shared/source/device/device.h" #include "shared/source/helpers/hw_helper.h" #include "shared/source/helpers/hw_info.h" diff --git a/level_zero/core/source/context/context_imp_drm_or_wddm/context_imp.cpp b/level_zero/core/source/context/context_imp_drm_or_wddm/context_imp.cpp index 64a769da6b..ee77edd8f5 100644 --- a/level_zero/core/source/context/context_imp_drm_or_wddm/context_imp.cpp +++ b/level_zero/core/source/context/context_imp_drm_or_wddm/context_imp.cpp @@ -7,6 +7,9 @@ #include "level_zero/core/source/context/context_imp.h" +#include "shared/source/memory_manager/memory_manager.h" +#include "shared/source/os_interface/os_interface.h" + #include "level_zero/core/source/device/device.h" #include "level_zero/core/source/driver/driver_handle_imp.h" diff --git a/level_zero/core/source/device/device.h b/level_zero/core/source/device/device.h index bd6bd8a2ff..2bf19c8da7 100644 --- a/level_zero/core/source/device/device.h +++ b/level_zero/core/source/device/device.h @@ -7,7 +7,9 @@ #pragma once -#include "shared/source/debugger/debugger_l0.h" +#include "shared/source/device/device.h" +#include "shared/source/memory_manager/allocation_type.h" +#include "shared/source/os_interface/hw_info_config.h" #include #include @@ -16,7 +18,10 @@ static_assert(NEO::HwInfoConfig::uuidSize == ZE_MAX_DEVICE_UUID_SIZE); struct _ze_device_handle_t {}; namespace NEO { +class CommandStreamReceiver; +class DebuggerL0; class Device; +class HwHelper; class MemoryManager; class SourceLevelDebugger; struct DeviceInfo; @@ -116,13 +121,7 @@ struct Device : _ze_device_handle_t { virtual NEO::PreemptionMode getDevicePreemptionMode() const = 0; virtual const NEO::DeviceInfo &getDeviceInfo() const = 0; NEO::SourceLevelDebugger *getSourceLevelDebugger() { return getNEODevice()->getSourceLevelDebugger(); } - NEO::DebuggerL0 *getL0Debugger() { - auto debugger = getNEODevice()->getDebugger(); - if (debugger) { - return !debugger->isLegacy() ? static_cast(debugger) : nullptr; - } - return nullptr; - } + NEO::DebuggerL0 *getL0Debugger() { return getNEODevice()->getL0Debugger(); } virtual NEO::GraphicsAllocation *getDebugSurface() const = 0; diff --git a/level_zero/core/source/device/device_imp.h b/level_zero/core/source/device/device_imp.h index d913041289..1d532c84fa 100644 --- a/level_zero/core/source/device/device_imp.h +++ b/level_zero/core/source/device/device_imp.h @@ -8,7 +8,9 @@ #pragma once #include "shared/source/helpers/topology_map.h" +#include "shared/source/memory_manager/memadvise_flags.h" #include "shared/source/memory_manager/unified_memory_manager.h" +#include "shared/source/page_fault_manager/cpu_page_fault_manager.h" #include "level_zero/core/source/device/device.h" @@ -17,7 +19,8 @@ namespace NEO { class AllocationsList; -} +class DriverInfo; +} // namespace NEO namespace L0 { struct SysmanDevice; diff --git a/level_zero/core/source/memory/cpu_page_fault_memory_manager.cpp b/level_zero/core/source/memory/cpu_page_fault_memory_manager.cpp index aeca54a648..322887a09d 100644 --- a/level_zero/core/source/memory/cpu_page_fault_memory_manager.cpp +++ b/level_zero/core/source/memory/cpu_page_fault_memory_manager.cpp @@ -1,10 +1,11 @@ /* - * Copyright (C) 2020-2021 Intel Corporation + * Copyright (C) 2020-2022 Intel Corporation * * SPDX-License-Identifier: MIT * */ +#include "shared/source/debug_settings/debug_settings_manager.h" #include "shared/source/page_fault_manager/cpu_page_fault_manager.h" #include "level_zero/core/source/cmdlist/cmdlist.h" diff --git a/level_zero/core/source/module/module_imp.cpp b/level_zero/core/source/module/module_imp.cpp index c1409f391c..485114107c 100644 --- a/level_zero/core/source/module/module_imp.cpp +++ b/level_zero/core/source/module/module_imp.cpp @@ -10,6 +10,7 @@ #include "shared/source/compiler_interface/compiler_warnings/compiler_warnings.h" #include "shared/source/compiler_interface/intermediate_representations.h" #include "shared/source/compiler_interface/linker.h" +#include "shared/source/debugger/debugger_l0.h" #include "shared/source/device/device.h" #include "shared/source/device_binary_format/debug_zebin.h" #include "shared/source/device_binary_format/device_binary_formats.h" diff --git a/level_zero/core/test/aub_tests/debugger/debugger_aub_tests.cpp b/level_zero/core/test/aub_tests/debugger/debugger_aub_tests.cpp index 4b252eca0d..ba108aa300 100644 --- a/level_zero/core/test/aub_tests/debugger/debugger_aub_tests.cpp +++ b/level_zero/core/test/aub_tests/debugger/debugger_aub_tests.cpp @@ -5,6 +5,7 @@ * */ +#include "shared/source/debugger/debugger_l0.h" #include "shared/source/gmm_helper/gmm_helper.h" #include "shared/source/helpers/array_count.h" #include "shared/source/helpers/file_io.h" diff --git a/level_zero/core/test/unit_tests/mocks/mock_kernel.h b/level_zero/core/test/unit_tests/mocks/mock_kernel.h index f0445f0b1f..1db4339be5 100644 --- a/level_zero/core/test/unit_tests/mocks/mock_kernel.h +++ b/level_zero/core/test/unit_tests/mocks/mock_kernel.h @@ -9,6 +9,7 @@ #include "shared/source/device_binary_format/patchtokens_decoder.h" #include "shared/source/kernel/kernel_descriptor.h" #include "shared/source/kernel/kernel_descriptor_from_patchtokens.h" +#include "shared/source/memory_manager/memory_manager.h" #include "shared/test/common/test_macros/mock_method_macros.h" #include "level_zero/core/source/kernel/kernel_hw.h" diff --git a/level_zero/core/test/unit_tests/sources/debugger/windows/test_l0_debugger_windows.cpp b/level_zero/core/test/unit_tests/sources/debugger/windows/test_l0_debugger_windows.cpp index 67dfd5f44f..4ca4c91375 100644 --- a/level_zero/core/test/unit_tests/sources/debugger/windows/test_l0_debugger_windows.cpp +++ b/level_zero/core/test/unit_tests/sources/debugger/windows/test_l0_debugger_windows.cpp @@ -5,6 +5,7 @@ * */ +#include "shared/source/debugger/debugger_l0.h" #include "shared/source/execution_environment/execution_environment.h" #include "shared/source/execution_environment/root_device_environment.h" #include "shared/source/os_interface/os_interface.h" diff --git a/level_zero/tools/source/sysman/firmware_util/firmware_util_imp.cpp b/level_zero/tools/source/sysman/firmware_util/firmware_util_imp.cpp index febc1a624f..d62bff287e 100644 --- a/level_zero/tools/source/sysman/firmware_util/firmware_util_imp.cpp +++ b/level_zero/tools/source/sysman/firmware_util/firmware_util_imp.cpp @@ -7,6 +7,7 @@ #include "level_zero/tools/source/sysman/firmware_util/firmware_util_imp.h" +#include "shared/source/debug_settings/debug_settings_manager.h" #include "shared/source/utilities/directory.h" namespace L0 { diff --git a/level_zero/tools/source/sysman/global_operations/linux/os_global_operations_imp.cpp b/level_zero/tools/source/sysman/global_operations/linux/os_global_operations_imp.cpp index 71a7520047..a0cda44321 100644 --- a/level_zero/tools/source/sysman/global_operations/linux/os_global_operations_imp.cpp +++ b/level_zero/tools/source/sysman/global_operations/linux/os_global_operations_imp.cpp @@ -16,6 +16,7 @@ #include #include +#include #include namespace L0 { diff --git a/level_zero/tools/source/sysman/linux/os_sysman_imp.cpp b/level_zero/tools/source/sysman/linux/os_sysman_imp.cpp index 8d9d48303b..cb63c16354 100644 --- a/level_zero/tools/source/sysman/linux/os_sysman_imp.cpp +++ b/level_zero/tools/source/sysman/linux/os_sysman_imp.cpp @@ -7,6 +7,7 @@ #include "level_zero/tools/source/sysman/linux/os_sysman_imp.h" +#include "shared/source/memory_manager/memory_manager.h" #include "shared/source/os_interface/device_factory.h" #include "level_zero/core/source/device/device_imp.h" diff --git a/level_zero/tools/source/sysman/linux/pmu/pmu_imp.cpp b/level_zero/tools/source/sysman/linux/pmu/pmu_imp.cpp index 1b01833a31..22a9352199 100644 --- a/level_zero/tools/source/sysman/linux/pmu/pmu_imp.cpp +++ b/level_zero/tools/source/sysman/linux/pmu/pmu_imp.cpp @@ -7,6 +7,8 @@ #include "level_zero/tools/source/sysman/linux/pmu/pmu_imp.h" +#include "shared/source/memory_manager/memory_manager.h" + #include "level_zero/core/source/driver/driver_handle.h" namespace L0 { diff --git a/level_zero/tools/source/sysman/memory/linux/os_memory_imp.cpp b/level_zero/tools/source/sysman/memory/linux/os_memory_imp.cpp index a3949be3d5..06adfb0d5e 100644 --- a/level_zero/tools/source/sysman/memory/linux/os_memory_imp.cpp +++ b/level_zero/tools/source/sysman/memory/linux/os_memory_imp.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020-2021 Intel Corporation + * Copyright (C) 2020-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -7,6 +7,8 @@ #include "level_zero/tools/source/sysman/memory/linux/os_memory_imp.h" +#include "shared/source/memory_manager/memory_manager.h" + #include "sysman/linux/os_sysman_imp.h" namespace L0 { diff --git a/level_zero/tools/source/sysman/memory/linux/os_memory_imp_dg1.cpp b/level_zero/tools/source/sysman/memory/linux/os_memory_imp_dg1.cpp index 311c78cb4f..af9a955772 100644 --- a/level_zero/tools/source/sysman/memory/linux/os_memory_imp_dg1.cpp +++ b/level_zero/tools/source/sysman/memory/linux/os_memory_imp_dg1.cpp @@ -5,6 +5,7 @@ * */ +#include "shared/source/memory_manager/memory_manager.h" #include "shared/source/os_interface/linux/memory_info.h" #include "level_zero/core/source/driver/driver_handle_imp.h" diff --git a/level_zero/tools/source/sysman/memory/linux/os_memory_imp_prelim.cpp b/level_zero/tools/source/sysman/memory/linux/os_memory_imp_prelim.cpp index 1bf0684198..1e287af149 100644 --- a/level_zero/tools/source/sysman/memory/linux/os_memory_imp_prelim.cpp +++ b/level_zero/tools/source/sysman/memory/linux/os_memory_imp_prelim.cpp @@ -7,6 +7,7 @@ #include "level_zero/tools/source/sysman/memory/linux/os_memory_imp_prelim.h" +#include "shared/source/memory_manager/memory_manager.h" #include "shared/source/os_interface/linux/system_info.h" #include "level_zero/core/source/driver/driver_handle.h" diff --git a/level_zero/tools/source/sysman/pci/windows/os_pci_imp.cpp b/level_zero/tools/source/sysman/pci/windows/os_pci_imp.cpp index dfb788a333..bd7278a52f 100644 --- a/level_zero/tools/source/sysman/pci/windows/os_pci_imp.cpp +++ b/level_zero/tools/source/sysman/pci/windows/os_pci_imp.cpp @@ -7,6 +7,8 @@ #include "sysman/pci/windows/os_pci_imp.h" +#include "shared/source/memory_manager/memory_manager.h" + #include "level_zero/core/source/driver/driver_handle.h" namespace L0 { diff --git a/level_zero/tools/source/sysman/ras/linux/os_ras_imp_fabric.cpp b/level_zero/tools/source/sysman/ras/linux/os_ras_imp_fabric.cpp index 6876d3bf7a..205bddcd71 100644 --- a/level_zero/tools/source/sysman/ras/linux/os_ras_imp_fabric.cpp +++ b/level_zero/tools/source/sysman/ras/linux/os_ras_imp_fabric.cpp @@ -5,11 +5,14 @@ * */ +#include "shared/source/device/sub_device.h" + #include "level_zero/tools/source/sysman/ras/linux/os_ras_imp_prelim.h" #include "sysman/linux/fs_access.h" #include "sysman/linux/os_sysman_imp.h" +#include #include namespace L0 { diff --git a/level_zero/tools/source/sysman/sysman.cpp b/level_zero/tools/source/sysman/sysman.cpp index 77944cbc70..6a2956eb8d 100644 --- a/level_zero/tools/source/sysman/sysman.cpp +++ b/level_zero/tools/source/sysman/sysman.cpp @@ -12,6 +12,7 @@ #include "level_zero/core/source/driver/driver_handle_imp.h" #include "level_zero/tools/source/sysman/sysman_imp.h" +#include #include namespace L0 { diff --git a/shared/source/device/device.cpp b/shared/source/device/device.cpp index 76666be11a..5fe1602c66 100644 --- a/shared/source/device/device.cpp +++ b/shared/source/device/device.cpp @@ -11,6 +11,7 @@ #include "shared/source/command_stream/experimental_command_buffer.h" #include "shared/source/command_stream/preemption.h" #include "shared/source/debug_settings/debug_settings_manager.h" +#include "shared/source/debugger/debugger_l0.h" #include "shared/source/execution_environment/root_device_environment.h" #include "shared/source/gmm_helper/gmm_helper.h" #include "shared/source/helpers/hw_helper.h" @@ -554,6 +555,14 @@ NEO::SourceLevelDebugger *Device::getSourceLevelDebugger() { return nullptr; } +NEO::DebuggerL0 *Device::getL0Debugger() { + auto debugger = getDebugger(); + if (debugger) { + return !debugger->isLegacy() ? static_cast(debugger) : nullptr; + } + return nullptr; +} + const std::vector &Device::getAllEngines() const { return this->allEngines; } diff --git a/shared/source/device/device.h b/shared/source/device/device.h index bfdd5612fd..76ff5f6c88 100644 --- a/shared/source/device/device.h +++ b/shared/source/device/device.h @@ -22,6 +22,7 @@ #include "shared/source/program/sync_buffer_handler.h" namespace NEO { +class DebuggerL0; class OSTime; class SourceLevelDebugger; class SubDevice; @@ -88,6 +89,7 @@ class Device : public ReferenceTrackedObject { MOCKABLE_VIRTUAL bool isDebuggerActive() const; Debugger *getDebugger() const { return getRootDeviceEnvironment().debugger.get(); } NEO::SourceLevelDebugger *getSourceLevelDebugger(); + DebuggerL0 *getL0Debugger(); const EnginesT &getAllEngines() const; const std::string getDeviceName(const HardwareInfo &hwInfo) const; diff --git a/shared/test/common/mocks/mock_l0_debugger.h b/shared/test/common/mocks/mock_l0_debugger.h index 0d485c0bf8..0cabc12a34 100644 --- a/shared/test/common/mocks/mock_l0_debugger.h +++ b/shared/test/common/mocks/mock_l0_debugger.h @@ -15,6 +15,22 @@ namespace NEO { template struct WhiteBox; +class MockDebuggerL0 : public NEO::DebuggerL0 { + public: + MockDebuggerL0(NEO::Device *device) : DebuggerL0(device) { + isLegacyMode = false; + } + + void captureStateBaseAddress(NEO::LinearStream &cmdStream, SbaAddresses sba) override{}; + size_t getSbaTrackingCommandsSize(size_t trackedAddressCount) override { + return 0; + } + + void programSbaTrackingCommands(NEO::LinearStream &cmdStream, const SbaAddresses &sba) override{}; + size_t getSbaAddressLoadCommandsSize() override { return 0; }; + void programSbaAddressLoad(NEO::LinearStream &cmdStream, uint64_t sbaGpuVa) override{}; +}; + template class MockDebuggerL0Hw : public NEO::DebuggerL0Hw { public: diff --git a/shared/test/unit_test/debugger/test_l0_debugger.cpp b/shared/test/unit_test/debugger/test_l0_debugger.cpp index d0ae2836bb..db0d96a73e 100644 --- a/shared/test/unit_test/debugger/test_l0_debugger.cpp +++ b/shared/test/unit_test/debugger/test_l0_debugger.cpp @@ -19,10 +19,48 @@ #include "shared/test/common/mocks/mock_gmm_helper.h" #include "shared/test/common/mocks/mock_l0_debugger.h" #include "shared/test/common/mocks/mock_memory_operations_handler.h" +#include "shared/test/common/mocks/mock_source_level_debugger.h" #include "shared/test/common/test_macros/hw_test.h" using namespace NEO; +TEST(Debugger, givenL0DebuggerWhenGettingL0DebuggerThenCorrectObjectIsReturned) { + auto executionEnvironment = new NEO::ExecutionEnvironment(); + executionEnvironment->prepareRootDeviceEnvironments(1); + executionEnvironment->setDebuggingEnabled(); + + auto hwInfo = *NEO::defaultHwInfo.get(); + executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(&hwInfo); + executionEnvironment->rootDeviceEnvironments[0]->initGmm(); + executionEnvironment->initializeMemoryManager(); + + std::unique_ptr neoDevice(NEO::MockDevice::create(executionEnvironment, 0u)); + + auto mockDebugger = new MockDebuggerL0(neoDevice.get()); + executionEnvironment->rootDeviceEnvironments[0]->debugger.reset(mockDebugger); + auto debugger = neoDevice->getL0Debugger(); + ASSERT_NE(nullptr, debugger); + EXPECT_EQ(mockDebugger, debugger); +} + +TEST(Debugger, givenSourceLevelDebuggerWhenGettingL0DebuggerThenNullptrIsReturned) { + auto executionEnvironment = new NEO::ExecutionEnvironment(); + executionEnvironment->prepareRootDeviceEnvironments(1); + executionEnvironment->setDebuggingEnabled(); + + auto hwInfo = *NEO::defaultHwInfo.get(); + executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(&hwInfo); + executionEnvironment->rootDeviceEnvironments[0]->initGmm(); + executionEnvironment->initializeMemoryManager(); + + std::unique_ptr neoDevice(NEO::MockDevice::create(executionEnvironment, 0u)); + + auto mockDebugger = new MockSourceLevelDebugger(); + executionEnvironment->rootDeviceEnvironments[0]->debugger.reset(mockDebugger); + auto debugger = neoDevice->getL0Debugger(); + EXPECT_EQ(nullptr, debugger); +} + TEST(Debugger, givenL0DebuggerOFFWhenGettingStateSaveAreaHeaderThenValidSipTypeIsReturned) { auto executionEnvironment = new NEO::ExecutionEnvironment(); executionEnvironment->prepareRootDeviceEnvironments(1); diff --git a/shared/test/unit_test/device/neo_device_tests.cpp b/shared/test/unit_test/device/neo_device_tests.cpp index 5975270cee..31c2869a59 100644 --- a/shared/test/unit_test/device/neo_device_tests.cpp +++ b/shared/test/unit_test/device/neo_device_tests.cpp @@ -38,6 +38,14 @@ TEST(DeviceBlitterTest, givenBlitterOperationsDisabledWhenCreatingBlitterEngineT EXPECT_THROW(factory.rootDevices[0]->createEngine(0, {aub_stream::EngineType::ENGINE_BCS, EngineUsage::LowPriority}), std::runtime_error); } +TEST(Device, givenNoDebuggerWhenGettingDebuggerThenNullptrIsReturned) { + auto device = std::unique_ptr(MockDevice::createWithNewExecutionEnvironment(defaultHwInfo.get())); + + EXPECT_EQ(nullptr, device->getDebugger()); + EXPECT_EQ(nullptr, device->getL0Debugger()); + EXPECT_EQ(nullptr, device->getSourceLevelDebugger()); +} + using DeviceTest = Test; TEST_F(DeviceTest, whenInitializeRayTracingIsCalledAndRtBackedBufferIsNullptrThenMemoryBackedBufferIsCreated) {