diff --git a/level_zero/tools/test/unit_tests/sources/debug/linux/xe/debug_session_fixtures_linux_xe.cpp b/level_zero/tools/test/unit_tests/sources/debug/linux/xe/debug_session_fixtures_linux_xe.cpp index 78e28f5bc6..d7a26bfab9 100644 --- a/level_zero/tools/test/unit_tests/sources/debug/linux/xe/debug_session_fixtures_linux_xe.cpp +++ b/level_zero/tools/test/unit_tests/sources/debug/linux/xe/debug_session_fixtures_linux_xe.cpp @@ -23,7 +23,7 @@ void DebugApiLinuxXeFixture::setUp(NEO::HardwareInfo *hwInfo) { DeviceFixture::setUp(); } - mockDrm = new DrmMockXeDebug(*neoDevice->executionEnvironment->rootDeviceEnvironments[0]); + mockDrm = DrmMockXeDebug::create(*neoDevice->executionEnvironment->rootDeviceEnvironments[0]).release(); mockDrm->allowDebugAttach = true; mockDrm->queryEngineInfo(); diff --git a/opencl/test/unit_test/os_interface/linux/cl_drm_memory_manager_tests.cpp b/opencl/test/unit_test/os_interface/linux/cl_drm_memory_manager_tests.cpp index 1be8a39346..7f259f4338 100644 --- a/opencl/test/unit_test/os_interface/linux/cl_drm_memory_manager_tests.cpp +++ b/opencl/test/unit_test/os_interface/linux/cl_drm_memory_manager_tests.cpp @@ -52,7 +52,7 @@ struct ClDrmMemoryManagerTest : public DrmMemoryManagerTest { MemoryManagementFixture::setUp(); executionEnvironment = MockClDevice::prepareExecutionEnvironment(defaultHwInfo.get(), numRootDevices - 1); - DrmMemoryManagerFixture::setUp(new DrmMockCustom(*executionEnvironment->rootDeviceEnvironments[0]), false); + DrmMemoryManagerFixture::setUp(DrmMockCustom::create(*executionEnvironment->rootDeviceEnvironments[0]).release(), false); pClDevice = new MockClDevice{device}; // NOLINT(clang-analyzer-cplusplus.NewDeleteLeaks) device->incRefInternal(); } diff --git a/shared/test/common/mocks/linux/debug_mock_drm_xe.h b/shared/test/common/mocks/linux/debug_mock_drm_xe.h index 1a9f806ff1..a88bca3917 100644 --- a/shared/test/common/mocks/linux/debug_mock_drm_xe.h +++ b/shared/test/common/mocks/linux/debug_mock_drm_xe.h @@ -40,12 +40,22 @@ inline constexpr int testValueMapOff = 0x7788; inline constexpr int testValuePrime = 0x4321; inline constexpr uint32_t testValueGemCreate = 0x8273; -class DrmMockXeDebug : public DrmMockCustom { - public: +struct DrmMockXeDebug : public DrmMockCustom { using Drm::engineInfo; - DrmMockXeDebug(RootDeviceEnvironment &rootDeviceEnvironment) : DrmMockCustom(rootDeviceEnvironment) { - this->ioctlHelper = std::make_unique(*this); - auto xeQueryEngines = reinterpret_cast(queryEngines); + + static auto create(RootDeviceEnvironment &rootDeviceEnvironment) { + auto drm = std::unique_ptr(new DrmMockXeDebug{rootDeviceEnvironment}); + + drm->reset(); + auto &gfxCoreHelper = rootDeviceEnvironment.getHelper(); + drm->ioctlExpected.contextCreate = static_cast(gfxCoreHelper.getGpgpuEngineInstances(rootDeviceEnvironment).size()); + drm->ioctlExpected.contextDestroy = drm->ioctlExpected.contextCreate.load(); + drm->ioctlHelper = std::make_unique(*drm); + drm->isVmBindAvailable(); + drm->reset(); + + drm->ioctlHelper = std::make_unique(*drm); + auto xeQueryEngines = reinterpret_cast(drm->queryEngines); xeQueryEngines->num_engines = 11; xeQueryEngines->engines[0] = {{DRM_XE_ENGINE_CLASS_RENDER, 0, 0}, {}}; xeQueryEngines->engines[1] = {{DRM_XE_ENGINE_CLASS_COPY, 1, 0}, {}}; @@ -58,7 +68,9 @@ class DrmMockXeDebug : public DrmMockCustom { xeQueryEngines->engines[8] = {{DRM_XE_ENGINE_CLASS_COMPUTE, 8, 1}, {}}; xeQueryEngines->engines[9] = {{DRM_XE_ENGINE_CLASS_VIDEO_DECODE, 9, 1}, {}}; xeQueryEngines->engines[10] = {{DRM_XE_ENGINE_CLASS_VIDEO_ENHANCE, 10, 0}, {}}; - }; + + return drm; + } int getErrno() override { if (baseErrno) { @@ -195,4 +207,9 @@ class DrmMockXeDebug : public DrmMockCustom { // Debugger ioctls int debuggerOpenRetval = 10; // debugFd uint32_t debuggerOpenVersion = 0; + + protected: + // Don't call directly, use the create() function + DrmMockXeDebug(RootDeviceEnvironment &rootDeviceEnvironment) + : DrmMockCustom(std::make_unique(mockFd, mockPciPath), rootDeviceEnvironment) {} }; diff --git a/shared/test/common/mocks/linux/mock_drm_memory_manager.cpp b/shared/test/common/mocks/linux/mock_drm_memory_manager.cpp index 6cead9a5b7..6c50e55046 100644 --- a/shared/test/common/mocks/linux/mock_drm_memory_manager.cpp +++ b/shared/test/common/mocks/linux/mock_drm_memory_manager.cpp @@ -52,9 +52,9 @@ TestedDrmMemoryManager::TestedDrmMemoryManager(bool enableLocalMemory, BufferObject *TestedDrmMemoryManager::findAndReferenceSharedBufferObject(int boHandle, uint32_t rootDeviceIndex) { if (failOnfindAndReferenceSharedBufferObject) { - DrmMockCustom drmMock(*executionEnvironment->rootDeviceEnvironments[rootDeviceIndex]); - auto patIndex = drmMock.getPatIndex(nullptr, AllocationType::buffer, CacheRegion::defaultRegion, CachePolicy::writeBack, false, false); - return new (std::nothrow) BufferObject(rootDeviceIndex, &drmMock, patIndex, boHandle, 4096u, 2u); + auto drmMock = DrmMockCustom::create(*executionEnvironment->rootDeviceEnvironments[rootDeviceIndex]); + auto patIndex = drmMock->getPatIndex(nullptr, AllocationType::buffer, CacheRegion::defaultRegion, CachePolicy::writeBack, false, false); + return new (std::nothrow) BufferObject(rootDeviceIndex, drmMock.release(), patIndex, boHandle, 4096u, 2u); } return MemoryManagerCreate::findAndReferenceSharedBufferObject(boHandle, rootDeviceIndex); } diff --git a/shared/test/common/os_interface/linux/device_command_stream_fixture.cpp b/shared/test/common/os_interface/linux/device_command_stream_fixture.cpp index 3c393d5b1f..e0dab1592c 100644 --- a/shared/test/common/os_interface/linux/device_command_stream_fixture.cpp +++ b/shared/test/common/os_interface/linux/device_command_stream_fixture.cpp @@ -226,18 +226,28 @@ int DrmMockCustom::ioctl(DrmIoctl request, void *arg) { return ioctlRes.load(); } -DrmMockCustom::DrmMockCustom(RootDeviceEnvironment &rootDeviceEnvironment) - : Drm(std::make_unique(mockFd, mockPciPath), rootDeviceEnvironment) { - reset(); - auto &gfxCoreHelper = rootDeviceEnvironment.getHelper(); - ioctlExpected.contextCreate = static_cast(gfxCoreHelper.getGpgpuEngineInstances(rootDeviceEnvironment).size()); - ioctlExpected.contextDestroy = ioctlExpected.contextCreate.load(); - setupIoctlHelper(rootDeviceEnvironment.getHardwareInfo()->platform.eProductFamily); - createVirtualMemoryAddressSpace(NEO::GfxCoreHelper::getSubDevicesCount(rootDeviceEnvironment.getHardwareInfo())); - isVmBindAvailable(); // NOLINT(clang-analyzer-optin.cplusplus.VirtualCall) - reset(); +std::unique_ptr DrmMockCustom::create(RootDeviceEnvironment &rootDeviceEnvironment) { + return DrmMockCustom::create(std::make_unique(mockFd, mockPciPath), rootDeviceEnvironment); } +std::unique_ptr DrmMockCustom::create(std::unique_ptr &&hwDeviceId, RootDeviceEnvironment &rootDeviceEnvironment) { + auto drm{new DrmMockCustom{std::move(hwDeviceId), rootDeviceEnvironment}}; + + drm->reset(); + auto &gfxCoreHelper = rootDeviceEnvironment.getHelper(); + drm->ioctlExpected.contextCreate = static_cast(gfxCoreHelper.getGpgpuEngineInstances(rootDeviceEnvironment).size()); + drm->ioctlExpected.contextDestroy = drm->ioctlExpected.contextCreate.load(); + drm->setupIoctlHelper(rootDeviceEnvironment.getHardwareInfo()->platform.eProductFamily); + drm->createVirtualMemoryAddressSpace(NEO::GfxCoreHelper::getSubDevicesCount(rootDeviceEnvironment.getHardwareInfo())); + drm->isVmBindAvailable(); + drm->reset(); + + return std::unique_ptr{drm}; +} + +DrmMockCustom::DrmMockCustom(std::unique_ptr &&hwDeviceId, RootDeviceEnvironment &rootDeviceEnvironment) + : Drm(std::move(hwDeviceId), rootDeviceEnvironment) {} + int DrmMockCustom::waitUserFence(uint32_t ctxId, uint64_t address, uint64_t value, ValueWidth dataWidth, int64_t timeout, uint16_t flags, bool userInterrupt, uint32_t externalInterruptId, NEO::GraphicsAllocation *allocForInterruptWait) { waitUserFenceCall.called++; waitUserFenceCall.ctxId = ctxId; diff --git a/shared/test/common/os_interface/linux/device_command_stream_fixture.h b/shared/test/common/os_interface/linux/device_command_stream_fixture.h index 9c3943e06f..9ded615ca4 100644 --- a/shared/test/common/os_interface/linux/device_command_stream_fixture.h +++ b/shared/test/common/os_interface/linux/device_command_stream_fixture.h @@ -96,10 +96,12 @@ class DrmMockTime : public DrmMockSuccess { } }; -class DrmMockCustom : public Drm { - public: +struct DrmMockCustom : public Drm { static constexpr NEO::DriverModelType driverModelType = NEO::DriverModelType::drm; + static std::unique_ptr create(RootDeviceEnvironment &rootDeviceEnvironment); + static std::unique_ptr create(std::unique_ptr &&hwDeviceId, RootDeviceEnvironment &rootDeviceEnvironment); + using Drm::bindAvailable; using Drm::cacheInfo; using Drm::checkToDisableScratchPage; @@ -150,8 +152,6 @@ class DrmMockCustom : public Drm { uint32_t called = 0u; }; - DrmMockCustom(RootDeviceEnvironment &rootDeviceEnvironment); - int waitUserFence(uint32_t ctxId, uint64_t address, uint64_t value, ValueWidth dataWidth, int64_t timeout, uint16_t flags, bool userInterrupt, uint32_t externalInterruptId, NEO::GraphicsAllocation *allocForInterruptWait) override; bool getSetPairAvailable() override; @@ -280,4 +280,8 @@ class DrmMockCustom : public Drm { bool returnIoctlExtraErrorValue = false; bool callBaseQueryGttSize = false; + + protected: + // Don't call directly, use the create() function + DrmMockCustom(std::unique_ptr &&hwDeviceId, RootDeviceEnvironment &rootDeviceEnvironment); }; diff --git a/shared/test/common/os_interface/linux/device_command_stream_fixture_prelim.h b/shared/test/common/os_interface/linux/device_command_stream_fixture_prelim.h index c99e07317b..60be221543 100644 --- a/shared/test/common/os_interface/linux/device_command_stream_fixture_prelim.h +++ b/shared/test/common/os_interface/linux/device_command_stream_fixture_prelim.h @@ -7,17 +7,29 @@ #pragma once +#include "shared/source/helpers/gfx_core_helper.h" #include "shared/test/common/os_interface/linux/device_command_stream_fixture.h" #include "shared/test/common/os_interface/linux/device_command_stream_fixture_context.h" -class DrmMockCustomPrelim : public DrmMockCustom { - public: +struct DrmMockCustomPrelim : public DrmMockCustom { using Drm::cacheInfo; using Drm::ioctlHelper; using Drm::memoryInfo; - DrmMockCustomPrelim(RootDeviceEnvironment &rootDeviceEnvironment) : DrmMockCustom(rootDeviceEnvironment) { - this->ioctlHelper = std::make_unique(*this); + static auto create(RootDeviceEnvironment &rootDeviceEnvironment) { + auto drm = std::unique_ptr(new DrmMockCustomPrelim{rootDeviceEnvironment}); + drm->reset(); + auto &gfxCoreHelper = rootDeviceEnvironment.getHelper(); + drm->ioctlExpected.contextCreate = static_cast(gfxCoreHelper.getGpgpuEngineInstances(rootDeviceEnvironment).size()); + drm->ioctlExpected.contextDestroy = drm->ioctlExpected.contextCreate.load(); + + drm->ioctlHelper = std::make_unique(*drm); + + drm->createVirtualMemoryAddressSpace(NEO::GfxCoreHelper::getSubDevicesCount(rootDeviceEnvironment.getHardwareInfo())); + drm->isVmBindAvailable(); + drm->reset(); + + return drm; } int ioctlExtra(DrmIoctl request, void *arg) override { @@ -33,4 +45,9 @@ class DrmMockCustomPrelim : public DrmMockCustom { } DrmMockCustomPrelimContext context{}; + + protected: + // Don't call directly, use the create() function + DrmMockCustomPrelim(RootDeviceEnvironment &rootDeviceEnvironment) + : DrmMockCustom(std::make_unique(mockFd, mockPciPath), rootDeviceEnvironment) {} }; diff --git a/shared/test/common/os_interface/linux/drm_buffer_object_fixture.h b/shared/test/common/os_interface/linux/drm_buffer_object_fixture.h index 57eafbc26c..44b22337ff 100644 --- a/shared/test/common/os_interface/linux/drm_buffer_object_fixture.h +++ b/shared/test/common/os_interface/linux/drm_buffer_object_fixture.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022-2023 Intel Corporation + * Copyright (C) 2022-2024 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -76,7 +76,7 @@ class DrmBufferObjectFixture { const uint32_t rootDeviceIndex = 0u; void setUp() { - this->mock = std::make_unique(*executionEnvironment.rootDeviceEnvironments[0]); + this->mock = DrmClass::create(*executionEnvironment.rootDeviceEnvironments[0]); ASSERT_NE(nullptr, this->mock); executionEnvironment.rootDeviceEnvironments[0]->memoryOperationsInterface = DrmMemoryOperationsHandler::create(*mock.get(), 0u, false); osContext.reset(new OsContextLinux(*this->mock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor())); diff --git a/shared/test/common/os_interface/linux/drm_command_stream_fixture.h b/shared/test/common/os_interface/linux/drm_command_stream_fixture.h index d26e20b26b..eb955f858e 100644 --- a/shared/test/common/os_interface/linux/drm_command_stream_fixture.h +++ b/shared/test/common/os_interface/linux/drm_command_stream_fixture.h @@ -126,7 +126,7 @@ class DrmCommandStreamEnhancedTemplate : public ::testing::Test { // make sure this is disabled, we don't want to test this now debugManager.flags.EnableForcePin.set(false); - mock = new DrmType(*executionEnvironment->rootDeviceEnvironments[rootDeviceIndex]); + mock = DrmType::create(*executionEnvironment->rootDeviceEnvironments[rootDeviceIndex]).release(); executionEnvironment->rootDeviceEnvironments[rootDeviceIndex]->osInterface = std::make_unique(); executionEnvironment->rootDeviceEnvironments[rootDeviceIndex]->osInterface->setDriverModel(std::unique_ptr(mock)); executionEnvironment->rootDeviceEnvironments[rootDeviceIndex]->memoryOperationsInterface = DrmMemoryOperationsHandler::create(*mock, rootDeviceIndex, false); @@ -207,7 +207,7 @@ class DrmCommandStreamEnhancedWithFailingExecTemplate : public ::testing::Test { // make sure this is disabled, we don't want to test this now debugManager.flags.EnableForcePin.set(false); - mock = new T(*executionEnvironment->rootDeviceEnvironments[rootDeviceIndex]); + mock = T::create(*executionEnvironment->rootDeviceEnvironments[rootDeviceIndex]).release(); executionEnvironment->rootDeviceEnvironments[rootDeviceIndex]->osInterface = std::make_unique(); executionEnvironment->rootDeviceEnvironments[rootDeviceIndex]->osInterface->setDriverModel(std::unique_ptr(mock)); executionEnvironment->rootDeviceEnvironments[rootDeviceIndex]->memoryOperationsInterface = DrmMemoryOperationsHandler::create(*mock, rootDeviceIndex, false); diff --git a/shared/test/common/os_interface/linux/drm_memory_manager_fixture.cpp b/shared/test/common/os_interface/linux/drm_memory_manager_fixture.cpp index 571db6d9d2..1b05f2cf57 100644 --- a/shared/test/common/os_interface/linux/drm_memory_manager_fixture.cpp +++ b/shared/test/common/os_interface/linux/drm_memory_manager_fixture.cpp @@ -35,7 +35,7 @@ void DrmMemoryManagerFixture::setUp() { MemoryManagementFixture::setUp(); executionEnvironment = MockDevice::prepareExecutionEnvironment(defaultHwInfo.get(), numRootDevices - 1); - setUp(new DrmMockCustom(*executionEnvironment->rootDeviceEnvironments[0]), false); + setUp(DrmMockCustom::create(*executionEnvironment->rootDeviceEnvironments[0]).release(), false); } // NOLINT(clang-analyzer-cplusplus.NewDeleteLeaks) void DrmMemoryManagerFixture::setUp(DrmMockCustom *mock, bool localMemoryEnabled) { @@ -51,7 +51,7 @@ void DrmMemoryManagerFixture::setUp(DrmMockCustom *mock, bool localMemoryEnabled auto rootDeviceEnvironment = executionEnvironment->rootDeviceEnvironments[i].get(); rootDeviceEnvironment->setHwInfoAndInitHelpers(defaultHwInfo.get()); rootDeviceEnvironment->osInterface = std::make_unique(); - rootDeviceEnvironment->osInterface->setDriverModel(std::unique_ptr(new DrmMockCustom(*rootDeviceEnvironment))); + rootDeviceEnvironment->osInterface->setDriverModel(DrmMockCustom::create(*rootDeviceEnvironment)); rootDeviceEnvironment->memoryOperationsInterface = DrmMemoryOperationsHandler::create(*rootDeviceEnvironment->osInterface->getDriverModel()->as(), i, false); MockRootDeviceEnvironment::resetBuiltins(rootDeviceEnvironment, new MockBuiltins); rootDeviceEnvironment->initGmm(); @@ -113,7 +113,7 @@ void DrmMemoryManagerWithLocalMemoryFixture::setUp() { MemoryManagementFixture::setUp(); executionEnvironment = MockDevice::prepareExecutionEnvironment(defaultHwInfo.get(), numRootDevices - 1); - auto drmMock = new DrmMockCustom{*executionEnvironment->rootDeviceEnvironments[1]}; + auto drmMock = DrmMockCustom::create(*executionEnvironment->rootDeviceEnvironments[1]).release(); drmMock->memoryInfo.reset(new MockMemoryInfo{*drmMock}); DrmMemoryManagerFixture::setUp(drmMock, true); drmMock->reset(); @@ -138,7 +138,7 @@ void DrmMemoryManagerFixtureWithoutQuietIoctlExpectation::setUp(bool enableLocal for (auto &rootDeviceEnvironment : executionEnvironment->rootDeviceEnvironments) { rootDeviceEnvironment->setHwInfoAndInitHelpers(defaultHwInfo.get()); rootDeviceEnvironment->osInterface = std::make_unique(); - rootDeviceEnvironment->osInterface->setDriverModel(std::unique_ptr(new DrmMockCustom(*rootDeviceEnvironment))); + rootDeviceEnvironment->osInterface->setDriverModel(DrmMockCustom::create(*rootDeviceEnvironment)); rootDeviceEnvironment->memoryOperationsInterface = DrmMemoryOperationsHandler::create(*rootDeviceEnvironment->osInterface->getDriverModel()->as(), i, false); rootDeviceEnvironment->initGmm(); i++; diff --git a/shared/test/common/os_interface/linux/drm_memory_manager_prelim_fixtures.h b/shared/test/common/os_interface/linux/drm_memory_manager_prelim_fixtures.h index db72553a6a..38a372752f 100644 --- a/shared/test/common/os_interface/linux/drm_memory_manager_prelim_fixtures.h +++ b/shared/test/common/os_interface/linux/drm_memory_manager_prelim_fixtures.h @@ -102,7 +102,7 @@ class DrmMemoryManagerLocalMemoryWithCustomPrelimMockTest : public ::testing::Te executionEnvironment->prepareRootDeviceEnvironments(1); executionEnvironment->rootDeviceEnvironments[0]->setHwInfoAndInitHelpers(defaultHwInfo.get()); - mock = new DrmMockCustomPrelim(*executionEnvironment->rootDeviceEnvironments[0]); + mock = DrmMockCustomPrelim::create(*executionEnvironment->rootDeviceEnvironments[0]).release(); mock->memoryInfo.reset(new MockMemoryInfo{*mock}); executionEnvironment->rootDeviceEnvironments[0]->osInterface = std::make_unique(); executionEnvironment->rootDeviceEnvironments[0]->osInterface->setDriverModel(std::unique_ptr(mock)); @@ -127,7 +127,7 @@ class DrmMemoryManagerFixturePrelim : public DrmMemoryManagerFixture { MemoryManagementFixture::setUp(); executionEnvironment = MockDevice::prepareExecutionEnvironment(defaultHwInfo.get(), numRootDevices - 1); - mock = new DrmMockCustomPrelim(*executionEnvironment->rootDeviceEnvironments[0]); + mock = DrmMockCustomPrelim::create(*executionEnvironment->rootDeviceEnvironments[0]).release(); mock->memoryInfo.reset(new MemoryInfo(regionInfo, *mock)); DrmMemoryManagerFixture::setUp(mock, true); diff --git a/shared/test/unit_test/os_interface/linux/drm_buffer_object_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_buffer_object_tests.cpp index 6617052f99..03aed56278 100644 --- a/shared/test/unit_test/os_interface/linux/drm_buffer_object_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_buffer_object_tests.cpp @@ -230,7 +230,7 @@ TEST_F(DrmBufferObjectTest, whenPrintExecutionBufferIsSetToTrueThenMessageFoundI TEST(DrmBufferObjectSimpleTest, givenInvalidBoWhenValidateHostptrIsCalledThenErrorIsReturned) { std::unique_ptr buff(new uint32_t[256]); MockExecutionEnvironment executionEnvironment; - std::unique_ptr mock(new DrmMockCustom(*executionEnvironment.rootDeviceEnvironments[0])); + auto mock = DrmMockCustom::create(*executionEnvironment.rootDeviceEnvironments[0]); executionEnvironment.rootDeviceEnvironments[0]->memoryOperationsInterface = DrmMemoryOperationsHandler::create(*mock.get(), 0u, false); OsContextLinux osContext(*mock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); ASSERT_NE(nullptr, mock.get()); @@ -255,7 +255,7 @@ TEST(DrmBufferObjectSimpleTest, givenInvalidBoWhenValidateHostptrIsCalledThenErr TEST(DrmBufferObjectSimpleTest, givenInvalidBoWhenPinIsCalledThenErrorIsReturned) { std::unique_ptr buff(new uint32_t[256]); MockExecutionEnvironment executionEnvironment; - std::unique_ptr mock(new DrmMockCustom(*executionEnvironment.rootDeviceEnvironments[0])); + auto mock = DrmMockCustom::create(*executionEnvironment.rootDeviceEnvironments[0]); executionEnvironment.rootDeviceEnvironments[0]->memoryOperationsInterface = DrmMemoryOperationsHandler::create(*mock.get(), 0u, false); OsContextLinux osContext(*mock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); ASSERT_NE(nullptr, mock.get()); @@ -279,7 +279,7 @@ TEST(DrmBufferObjectSimpleTest, givenInvalidBoWhenPinIsCalledThenErrorIsReturned TEST(DrmBufferObjectSimpleTest, givenBufferObjectWhenConstructedWithASizeThenTheSizeIsInitialized) { MockExecutionEnvironment executionEnvironment; - std::unique_ptr drmMock(new DrmMockCustom(*executionEnvironment.rootDeviceEnvironments[0])); + auto drmMock = DrmMockCustom::create(*executionEnvironment.rootDeviceEnvironments[0]); std::unique_ptr bo(new BufferObject(0u, drmMock.get(), 3, 1, 0x1000, 1)); EXPECT_EQ(0x1000u, bo->peekSize()); @@ -289,7 +289,7 @@ TEST(DrmBufferObjectSimpleTest, givenArrayOfBosWhenPinnedThenAllBosArePinned) { const auto rootDeviceIndex = 0u; std::unique_ptr buff(new uint32_t[256]); MockExecutionEnvironment executionEnvironment; - std::unique_ptr mock(new DrmMockCustom(*executionEnvironment.rootDeviceEnvironments[0])); + auto mock = DrmMockCustom::create(*executionEnvironment.rootDeviceEnvironments[0]); ASSERT_NE(nullptr, mock.get()); OsContextLinux osContext(*mock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); @@ -324,7 +324,7 @@ TEST(DrmBufferObjectSimpleTest, givenArrayOfBosWhenValidatedThenAllBosArePinned) const auto rootDeviceIndex = 0u; std::unique_ptr buff(new uint32_t[256]); MockExecutionEnvironment executionEnvironment; - std::unique_ptr mock(new DrmMockCustom(*executionEnvironment.rootDeviceEnvironments[0])); + auto mock = DrmMockCustom::create(*executionEnvironment.rootDeviceEnvironments[0]); ASSERT_NE(nullptr, mock.get()); OsContextLinux osContext(*mock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); diff --git a/shared/test/unit_test/os_interface/linux/drm_command_stream_mm_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_command_stream_mm_tests.cpp index e28c99300a..6a33bbe804 100644 --- a/shared/test/unit_test/os_interface/linux/drm_command_stream_mm_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_command_stream_mm_tests.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2023 Intel Corporation + * Copyright (C) 2018-2024 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -42,7 +42,7 @@ HWTEST_F(DrmCommandStreamMMTest, GivenForcePinThenMemoryManagerCreatesPinBb) { debugManager.flags.EnableForcePin.set(true); MockExecutionEnvironment executionEnvironment; - auto drm = new DrmMockCustom(*executionEnvironment.rootDeviceEnvironments[0]); + auto drm = DrmMockCustom::create(*executionEnvironment.rootDeviceEnvironments[0]).release(); executionEnvironment.rootDeviceEnvironments[0]->osInterface = std::make_unique(); executionEnvironment.rootDeviceEnvironments[0]->osInterface->setDriverModel(std::unique_ptr(drm)); @@ -62,7 +62,7 @@ HWTEST_F(DrmCommandStreamMMTest, givenForcePinDisabledWhenMemoryManagerIsCreated debugManager.flags.EnableForcePin.set(false); MockExecutionEnvironment executionEnvironment; - auto drm = new DrmMockCustom(*executionEnvironment.rootDeviceEnvironments[0]); + auto drm = DrmMockCustom::create(*executionEnvironment.rootDeviceEnvironments[0]).release(); executionEnvironment.rootDeviceEnvironments[0]->setHwInfoAndInitHelpers(defaultHwInfo.get()); executionEnvironment.rootDeviceEnvironments[0]->osInterface = std::make_unique(); @@ -85,7 +85,7 @@ HWTEST_F(DrmCommandStreamMMTest, givenExecutionEnvironmentWithMoreThanOneRootDev executionEnvironment.rootDeviceEnvironments[rootDeviceIndex]->setHwInfoAndInitHelpers(defaultHwInfo.get()); executionEnvironment.rootDeviceEnvironments[rootDeviceIndex]->osInterface = std::make_unique(); executionEnvironment.rootDeviceEnvironments[rootDeviceIndex]->initGmm(); - auto drm = new DrmMockCustom(*executionEnvironment.rootDeviceEnvironments[0]); + auto drm = DrmMockCustom::create(*executionEnvironment.rootDeviceEnvironments[0]).release(); executionEnvironment.rootDeviceEnvironments[rootDeviceIndex]->osInterface->setDriverModel(std::unique_ptr(drm)); executionEnvironment.rootDeviceEnvironments[rootDeviceIndex]->memoryOperationsInterface = DrmMemoryOperationsHandler::create(*drm, 0u, false); } diff --git a/shared/test/unit_test/os_interface/linux/drm_command_stream_tests_1.cpp b/shared/test/unit_test/os_interface/linux/drm_command_stream_tests_1.cpp index 6b1c70a2a5..8f1368c914 100644 --- a/shared/test/unit_test/os_interface/linux/drm_command_stream_tests_1.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_command_stream_tests_1.cpp @@ -1001,7 +1001,7 @@ HWTEST_TEMPLATED_F(DrmCommandStreamTest, givenDrmCommandStreamReceiverWhenCreate executionEnvironment.rootDeviceEnvironments[1]->setHwInfoAndInitHelpers(defaultHwInfo.get()); executionEnvironment.rootDeviceEnvironments[1]->initGmm(); executionEnvironment.rootDeviceEnvironments[1]->osInterface = std::make_unique(); - executionEnvironment.rootDeviceEnvironments[1]->osInterface->setDriverModel(std::unique_ptr(new DrmMockCustom(*executionEnvironment.rootDeviceEnvironments[0]))); + executionEnvironment.rootDeviceEnvironments[1]->osInterface->setDriverModel(DrmMockCustom::create(*executionEnvironment.rootDeviceEnvironments[0])); auto csr = std::make_unique>(executionEnvironment, 1, 1, GemCloseWorkerMode::gemCloseWorkerActive); auto pageTableManager = csr->createPageTableManager(); EXPECT_EQ(csr->pageTableManager.get(), pageTableManager); diff --git a/shared/test/unit_test/os_interface/linux/drm_command_stream_xehp_and_later_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_command_stream_xehp_and_later_tests.cpp index c9ccf6750c..9904bccfb0 100644 --- a/shared/test/unit_test/os_interface/linux/drm_command_stream_xehp_and_later_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_command_stream_xehp_and_later_tests.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022-2023 Intel Corporation + * Copyright (C) 2022-2024 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -40,7 +40,7 @@ struct DrmCommandStreamMultiTileMemExecFixture { executionEnvironment->incRefInternal(); executionEnvironment->initGmm(); - mock = new DrmMockCustom(*executionEnvironment->rootDeviceEnvironments[0]); + mock = DrmMockCustom::create(*executionEnvironment->rootDeviceEnvironments[0]).release(); executionEnvironment->rootDeviceEnvironments[0]->osInterface = std::make_unique(); executionEnvironment->rootDeviceEnvironments[0]->osInterface->setDriverModel(std::unique_ptr(mock)); executionEnvironment->rootDeviceEnvironments[0]->memoryOperationsInterface = DrmMemoryOperationsHandler::create(*mock, 0, false); diff --git a/shared/test/unit_test/os_interface/linux/drm_memory_manager_localmem_upstream_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_memory_manager_localmem_upstream_tests.cpp index d3032ad82f..611dd9180a 100644 --- a/shared/test/unit_test/os_interface/linux/drm_memory_manager_localmem_upstream_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_memory_manager_localmem_upstream_tests.cpp @@ -43,7 +43,7 @@ class DrmMemoryManagerFixtureImpl : public DrmMemoryManagerFixture { MemoryManagementFixture::setUp(); executionEnvironment = MockDevice::prepareExecutionEnvironment(defaultHwInfo.get(), numRootDevices - 1); - mockExp = new DrmMockCustom(*executionEnvironment->rootDeviceEnvironments[0]); + mockExp = DrmMockCustom::create(*executionEnvironment->rootDeviceEnvironments[0]).release(); DrmMemoryManagerFixture::setUp(mockExp, true); } @@ -92,7 +92,7 @@ class DrmMemoryManagerLocalMemoryWithCustomMockTest : public ::testing::Test { executionEnvironment = new ExecutionEnvironment; executionEnvironment->prepareRootDeviceEnvironments(1); executionEnvironment->rootDeviceEnvironments[0]->setHwInfoAndInitHelpers(defaultHwInfo.get()); - mock = new DrmMockCustom(*executionEnvironment->rootDeviceEnvironments[0]); + mock = DrmMockCustom::create(*executionEnvironment->rootDeviceEnvironments[0]).release(); executionEnvironment->rootDeviceEnvironments[0]->osInterface = std::make_unique(); executionEnvironment->rootDeviceEnvironments[0]->osInterface->setDriverModel(std::unique_ptr(mock)); diff --git a/shared/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp index 428b6c3425..67d268f4b1 100644 --- a/shared/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp @@ -1308,9 +1308,8 @@ TEST(DrmMemoryManagerTest2, givenDrmMemoryManagerWhengetSystemSharedMemoryIsCall auto executionEnvironment = std::make_unique(); executionEnvironment->prepareRootDeviceEnvironments(4u); for (auto i = 0u; i < 4u; i++) { - auto mock = new DrmMockCustom(*executionEnvironment->rootDeviceEnvironments[0]); executionEnvironment->rootDeviceEnvironments[i]->osInterface = std::make_unique(); - executionEnvironment->rootDeviceEnvironments[i]->osInterface->setDriverModel(std::unique_ptr(mock)); + executionEnvironment->rootDeviceEnvironments[i]->osInterface->setDriverModel(DrmMockCustom::create(*executionEnvironment->rootDeviceEnvironments[0])); executionEnvironment->rootDeviceEnvironments[i]->setHwInfoAndInitHelpers(defaultHwInfo.get()); executionEnvironment->rootDeviceEnvironments[i]->initGmm(); } @@ -1345,9 +1344,8 @@ TEST(DrmMemoryManagerTest2, WhenGetMinimumSystemSharedMemoryThenCorrectValueIsRe executionEnvironment->prepareRootDeviceEnvironments(4u); for (auto i = 0u; i < 4u; i++) { executionEnvironment->rootDeviceEnvironments[i]->setHwInfoAndInitHelpers(defaultHwInfo.get()); - auto mock = new DrmMockCustom(*executionEnvironment->rootDeviceEnvironments[0]); executionEnvironment->rootDeviceEnvironments[i]->osInterface = std::make_unique(); - executionEnvironment->rootDeviceEnvironments[i]->osInterface->setDriverModel(std::unique_ptr(mock)); + executionEnvironment->rootDeviceEnvironments[i]->osInterface->setDriverModel(DrmMockCustom::create(*executionEnvironment->rootDeviceEnvironments[0])); executionEnvironment->rootDeviceEnvironments[i]->initGmm(); } @@ -2465,8 +2463,8 @@ TEST_F(DrmMemoryManagerTest, givenDrmMemoryManagerWhenUnlockResourceIsCalledOnAl DrmMemoryManagerToTestUnlockResource drmMemoryManager(*executionEnvironment, true, MemoryConstants::pageSize); - DrmMockCustom drmMock(*executionEnvironment->rootDeviceEnvironments[1]); - auto bo = new BufferObject(rootDeviceIndex, &drmMock, 3, 1, 0, 1); + auto drmMock = DrmMockCustom::create(*executionEnvironment->rootDeviceEnvironments[1]); + auto bo = new BufferObject(rootDeviceIndex, drmMock.get(), 3, 1, 0, 1); auto drmAllocation = new DrmAllocation(rootDeviceIndex, 1u /*num gmms*/, AllocationType::unknown, bo, nullptr, 0u, static_cast(0u), MemoryPool::localMemory); drmMemoryManager.unlockResourceImpl(*drmAllocation); @@ -2489,8 +2487,8 @@ TEST_F(DrmMemoryManagerTest, givenDrmMemoryManagerWhenSetDomainCpuIsCalledButFai this->ioctlResExt = {mock->ioctlCnt.total, -1}; mock->ioctlResExt = &ioctlResExt; - DrmMockCustom drmMock(*executionEnvironment->rootDeviceEnvironments[0]); - BufferObject bo(0u, &drmMock, 3, 1, 0, 1); + auto drmMock = DrmMockCustom::create(*executionEnvironment->rootDeviceEnvironments[0]); + BufferObject bo(0u, drmMock.get(), 3, 1, 0, 1); DrmAllocation drmAllocation(rootDeviceIndex, 1u /*num gmms*/, AllocationType::unknown, &bo, nullptr, 0u, static_cast(0u), MemoryPool::memoryNull); EXPECT_NE(nullptr, drmAllocation.getBO()); @@ -2502,8 +2500,8 @@ TEST_F(DrmMemoryManagerTest, givenDrmMemoryManagerWhenSetDomainCpuIsCalledButFai TEST_F(DrmMemoryManagerTest, givenDrmMemoryManagerWhenSetDomainCpuIsCalledOnAllocationThenReturnSetWriteDomain) { mock->ioctlExpected.gemSetDomain = 1; - DrmMockCustom drmMock(*executionEnvironment->rootDeviceEnvironments[0]); - BufferObject bo(rootDeviceIndex, &drmMock, 3, 1, 0, 1); + auto drmMock = DrmMockCustom::create(*executionEnvironment->rootDeviceEnvironments[0]); + BufferObject bo(rootDeviceIndex, drmMock.get(), 3, 1, 0, 1); DrmAllocation drmAllocation(rootDeviceIndex, 1u /*num gmms*/, AllocationType::unknown, &bo, nullptr, 0u, static_cast(0u), MemoryPool::memoryNull); EXPECT_NE(nullptr, drmAllocation.getBO()); @@ -3698,9 +3696,8 @@ TEST(DrmMemoryManagerWithExplicitExpectationsTest2, whenObtainFdFromHandleIsCall executionEnvironment->prepareRootDeviceEnvironments(4u); for (auto i = 0u; i < 4u; i++) { executionEnvironment->rootDeviceEnvironments[i]->setHwInfoAndInitHelpers(defaultHwInfo.get()); - auto mock = new DrmMockCustom(*executionEnvironment->rootDeviceEnvironments[0]); executionEnvironment->rootDeviceEnvironments[i]->osInterface = std::make_unique(); - executionEnvironment->rootDeviceEnvironments[i]->osInterface->setDriverModel(std::unique_ptr(mock)); + executionEnvironment->rootDeviceEnvironments[i]->osInterface->setDriverModel(DrmMockCustom::create(*executionEnvironment->rootDeviceEnvironments[0])); executionEnvironment->rootDeviceEnvironments[i]->initGmm(); } auto memoryManager = std::make_unique(false, false, false, *executionEnvironment); @@ -3722,9 +3719,8 @@ TEST(DrmMemoryManagerWithExplicitExpectationsTest2, whenFailingToObtainFdFromHan executionEnvironment->prepareRootDeviceEnvironments(4u); for (auto i = 0u; i < 4u; i++) { executionEnvironment->rootDeviceEnvironments[i]->setHwInfoAndInitHelpers(defaultHwInfo.get()); - auto mock = new DrmMockCustom(*executionEnvironment->rootDeviceEnvironments[0]); executionEnvironment->rootDeviceEnvironments[i]->osInterface = std::make_unique(); - executionEnvironment->rootDeviceEnvironments[i]->osInterface->setDriverModel(std::unique_ptr(mock)); + executionEnvironment->rootDeviceEnvironments[i]->osInterface->setDriverModel(DrmMockCustom::create(*executionEnvironment->rootDeviceEnvironments[0])); executionEnvironment->rootDeviceEnvironments[i]->initGmm(); } auto memoryManager = std::make_unique(false, false, false, *executionEnvironment); diff --git a/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_prelim.cpp b/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_prelim.cpp index e85af6ee75..1b7dfb7731 100644 --- a/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_prelim.cpp +++ b/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_prelim.cpp @@ -898,7 +898,7 @@ TEST_F(IoctlPrelimHelperTests, givenInvalidDrmWhenGettingGpuTimeThenFails) { TEST_F(IoctlPrelimHelperTests, whenGettingTimeThenTimeIsCorrect) { MockExecutionEnvironment executionEnvironment{}; - auto drm = std::make_unique(*executionEnvironment.rootDeviceEnvironments[0]); + auto drm = DrmMockCustom::create(*executionEnvironment.rootDeviceEnvironments[0]); ASSERT_NE(nullptr, drm); MockIoctlHelperPrelim ioctlHelper{*drm}; @@ -930,7 +930,7 @@ TEST_F(IoctlPrelimHelperTests, givenInitializeGetGpuTimeFunctionNotCalledWhenSet auto &rootDeviceEnvironment = *executionEnvironment.rootDeviceEnvironments[0]; rootDeviceEnvironment.osInterface = std::make_unique(); rootDeviceEnvironment.osInterface->setDriverModel(std::make_unique(mockFd, rootDeviceEnvironment)); - auto drm = std::make_unique(rootDeviceEnvironment); + auto drm = DrmMockCustom::create(rootDeviceEnvironment); IoctlHelperPrelim20 ioctlHelper{*drm}; drm->ioctlRes = -1; diff --git a/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_upstream.cpp b/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_upstream.cpp index 19101a760a..27d8d786e9 100644 --- a/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_upstream.cpp +++ b/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_upstream.cpp @@ -797,7 +797,7 @@ TEST(IoctlHelperTestsUpstream, givenInvalidDrmWhenGettingGpuTimeThenFails) { TEST(IoctlHelperTestsUpstream, whenGettingTimeThenTimeIsCorrect) { MockExecutionEnvironment executionEnvironment{}; - auto drm = std::make_unique(*executionEnvironment.rootDeviceEnvironments[0]); + auto drm = DrmMockCustom::create(*executionEnvironment.rootDeviceEnvironments[0]); ASSERT_NE(nullptr, drm); MockIoctlHelperUpstream ioctlHelper{*drm}; @@ -829,7 +829,7 @@ TEST(IoctlHelperTestsUpstream, givenInitializeGetGpuTimeFunctionNotCalledWhenSet auto &rootDeviceEnvironment = *executionEnvironment.rootDeviceEnvironments[0]; rootDeviceEnvironment.osInterface = std::make_unique(); rootDeviceEnvironment.osInterface->setDriverModel(std::make_unique(mockFd, rootDeviceEnvironment)); - auto drm = std::make_unique(rootDeviceEnvironment); + auto drm = DrmMockCustom::create(rootDeviceEnvironment); IoctlHelperUpstream ioctlHelper{*drm}; drm->ioctlRes = -1; diff --git a/shared/test/unit_test/os_interface/linux/os_context_linux_tests.cpp b/shared/test/unit_test/os_interface/linux/os_context_linux_tests.cpp index 6ed362c911..2ea7fbc09b 100644 --- a/shared/test/unit_test/os_interface/linux/os_context_linux_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/os_context_linux_tests.cpp @@ -22,7 +22,7 @@ using namespace NEO; TEST(OSContextLinux, givenReinitializeContextWhenContextIsInitThenContextIsStillIinitializedAfter) { MockExecutionEnvironment executionEnvironment; - std::unique_ptr mock(new DrmMockCustom(*executionEnvironment.rootDeviceEnvironments[0])); + auto mock = DrmMockCustom::create(*executionEnvironment.rootDeviceEnvironments[0]); executionEnvironment.rootDeviceEnvironments[0]->memoryOperationsInterface = DrmMemoryOperationsHandler::create(*mock.get(), 0u, false); OsContextLinux osContext(*mock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); EXPECT_NO_THROW(osContext.reInitializeContext()); @@ -42,7 +42,7 @@ TEST(OSContextLinux, givenInitializeContextWhenContextCreateIoctlFailsThenContex TEST(OSContextLinux, givenOsContextLinuxWhenQueryingForOfflineDumpContextIdThenCorrectValueIsReturned) { MockExecutionEnvironment executionEnvironment; - std::unique_ptr mock(new DrmMockCustom(*executionEnvironment.rootDeviceEnvironments[0])); + auto mock = DrmMockCustom::create(*executionEnvironment.rootDeviceEnvironments[0]); executionEnvironment.rootDeviceEnvironments[0]->memoryOperationsInterface = DrmMemoryOperationsHandler::create(*mock.get(), 0u, false); MockOsContextLinux osContext(*mock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); diff --git a/shared/test/unit_test/os_interface/linux/os_time_test.cpp b/shared/test/unit_test/os_interface/linux/os_time_test.cpp index 284f80ff07..9860e1b7a9 100644 --- a/shared/test/unit_test/os_interface/linux/os_time_test.cpp +++ b/shared/test/unit_test/os_interface/linux/os_time_test.cpp @@ -200,7 +200,7 @@ TEST_F(DrmTimeTest, GivenInvalidFuncTimeWhenGettingGpuCpuTimeCpuThenFails) { TEST_F(DrmTimeTest, givenGpuTimestampResolutionQueryWhenIoctlFailsThenDefaultResolutionIsReturned) { auto defaultResolution = defaultHwInfo->capabilityTable.defaultProfilingTimerResolution; - auto drm = new DrmMockCustom(*executionEnvironment.rootDeviceEnvironments[0]); + auto drm = DrmMockCustom::create(*executionEnvironment.rootDeviceEnvironments[0]).release(); osTime->updateDrm(drm); drm->getParamRetValue = 0; @@ -213,7 +213,7 @@ TEST_F(DrmTimeTest, givenGpuTimestampResolutionQueryWhenIoctlFailsThenDefaultRes TEST_F(DrmTimeTest, givenGetDynamicDeviceTimerClockWhenIoctlFailsThenDefaultClockIsReturned) { auto defaultResolution = defaultHwInfo->capabilityTable.defaultProfilingTimerResolution; - auto drm = new DrmMockCustom(*executionEnvironment.rootDeviceEnvironments[0]); + auto drm = DrmMockCustom::create(*executionEnvironment.rootDeviceEnvironments[0]).release(); osTime->updateDrm(drm); drm->getParamRetValue = 0; @@ -225,7 +225,7 @@ TEST_F(DrmTimeTest, givenGetDynamicDeviceTimerClockWhenIoctlFailsThenDefaultCloc } TEST_F(DrmTimeTest, givenGetDynamicDeviceTimerClockWhenIoctlSucceedsThenNonDefaultClockIsReturned) { - auto drm = new DrmMockCustom(*executionEnvironment.rootDeviceEnvironments[0]); + auto drm = DrmMockCustom::create(*executionEnvironment.rootDeviceEnvironments[0]).release(); osTime->updateDrm(drm); uint64_t frequency = 1500; @@ -236,7 +236,7 @@ TEST_F(DrmTimeTest, givenGetDynamicDeviceTimerClockWhenIoctlSucceedsThenNonDefau } TEST_F(DrmTimeTest, givenGpuTimestampResolutionQueryWhenIoctlSuccedsThenCorrectResolutionIsReturned) { - auto drm = new DrmMockCustom(*executionEnvironment.rootDeviceEnvironments[0]); + auto drm = DrmMockCustom::create(*executionEnvironment.rootDeviceEnvironments[0]).release(); osTime->updateDrm(drm); // 19200000 is frequency yelding 52.083ns resolution diff --git a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_debugger_tests.cpp b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_debugger_tests.cpp index 7c3a219fa8..c0721ecec9 100644 --- a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_debugger_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_debugger_tests.cpp @@ -32,14 +32,14 @@ TEST(IoctlHelperXeTest, whenCallingDebuggerOpenIoctlThenProperValueIsReturned) { int ret; DebugManagerStateRestore restorer; auto executionEnvironment = std::make_unique(); - DrmMockXeDebug drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto mockXeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto mockXeIoctlHelper = drm->ioctlHelper.get(); - drm.reset(); + drm->reset(); drm_xe_eudebug_connect test = {}; ret = mockXeIoctlHelper->ioctl(DrmIoctl::debuggerOpen, &test); - EXPECT_EQ(ret, drm.debuggerOpenRetval); + EXPECT_EQ(ret, drm->debuggerOpenRetval); } TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallingGetIoctForDebuggerThenCorrectValueReturned) { @@ -60,8 +60,8 @@ TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallingGetIoctForDebuggerThenCorre TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallingaddDebugMetadataThenDataIsAdded) { auto executionEnvironment = std::make_unique(); - DrmMockXeDebug drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->ioctlHelper.get()); uint64_t temp = 0; xeIoctlHelper->addDebugMetadata(DrmResourceClass::moduleHeapDebugArea, &temp, 8000u); ASSERT_EQ(1u, xeIoctlHelper->debugMetadata.size()); @@ -76,8 +76,8 @@ TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallingaddDebugMetadataThenDataIsA TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallingVmCreateThenDebugMetadadaIsAttached) { auto executionEnvironment = std::make_unique(); executionEnvironment->setDebuggingMode(DebuggingMode::offline); - DrmMockXeDebug drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->ioctlHelper.get()); uint64_t temp = 0; xeIoctlHelper->addDebugMetadata(DrmResourceClass::moduleHeapDebugArea, &temp, 8000u); xeIoctlHelper->addDebugMetadata(DrmResourceClass::contextSaveArea, &temp, 8000u); @@ -88,31 +88,31 @@ TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallingVmCreateThenDebugMetadadaIs GemVmControl test = {}; xeIoctlHelper->ioctl(DrmIoctl::gemVmCreate, &test); - ASSERT_EQ(4u, drm.vmCreateMetadata.size()); - ASSERT_EQ(drm.vmCreateMetadata[0].type, static_cast(DRM_XE_VM_DEBUG_METADATA_MODULE_AREA)); - ASSERT_EQ(drm.vmCreateMetadata[0].offset, reinterpret_cast(&temp)); - ASSERT_EQ(drm.vmCreateMetadata[0].len, 8000ul); + ASSERT_EQ(4u, drm->vmCreateMetadata.size()); + ASSERT_EQ(drm->vmCreateMetadata[0].type, static_cast(DRM_XE_VM_DEBUG_METADATA_MODULE_AREA)); + ASSERT_EQ(drm->vmCreateMetadata[0].offset, reinterpret_cast(&temp)); + ASSERT_EQ(drm->vmCreateMetadata[0].len, 8000ul); - ASSERT_EQ(drm.vmCreateMetadata[1].type, static_cast(DRM_XE_VM_DEBUG_METADATA_SIP_AREA)); - ASSERT_EQ(drm.vmCreateMetadata[1].offset, reinterpret_cast(&temp)); - ASSERT_EQ(drm.vmCreateMetadata[1].len, 8000ul); + ASSERT_EQ(drm->vmCreateMetadata[1].type, static_cast(DRM_XE_VM_DEBUG_METADATA_SIP_AREA)); + ASSERT_EQ(drm->vmCreateMetadata[1].offset, reinterpret_cast(&temp)); + ASSERT_EQ(drm->vmCreateMetadata[1].len, 8000ul); - ASSERT_EQ(drm.vmCreateMetadata[2].type, static_cast(DRM_XE_VM_DEBUG_METADATA_SBA_AREA)); - ASSERT_EQ(drm.vmCreateMetadata[2].offset, reinterpret_cast(&temp)); - ASSERT_EQ(drm.vmCreateMetadata[2].len, 8000ul); + ASSERT_EQ(drm->vmCreateMetadata[2].type, static_cast(DRM_XE_VM_DEBUG_METADATA_SBA_AREA)); + ASSERT_EQ(drm->vmCreateMetadata[2].offset, reinterpret_cast(&temp)); + ASSERT_EQ(drm->vmCreateMetadata[2].len, 8000ul); - ASSERT_EQ(drm.vmCreateMetadata[3].type, static_cast(DRM_XE_VM_DEBUG_METADATA_COOKIE)); - ASSERT_EQ(drm.vmCreateMetadata[3].offset, 123ul); - ASSERT_EQ(drm.vmCreateMetadata[3].len, 0ul); - ASSERT_EQ(drm.vmCreateMetadata[3].base.next_extension, 0ul); + ASSERT_EQ(drm->vmCreateMetadata[3].type, static_cast(DRM_XE_VM_DEBUG_METADATA_COOKIE)); + ASSERT_EQ(drm->vmCreateMetadata[3].offset, 123ul); + ASSERT_EQ(drm->vmCreateMetadata[3].len, 0ul); + ASSERT_EQ(drm->vmCreateMetadata[3].base.next_extension, 0ul); } TEST(IoctlHelperXeTest, givenFreeDebugMetadataWhenVmCreateHasMultipleExtTypesThenOnlyDebugMetadataIsDeleted) { auto executionEnvironment = std::make_unique(); executionEnvironment->setDebuggingMode(DebuggingMode::offline); - DrmMockXeDebug drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->ioctlHelper.get()); drm_xe_ext_vm_set_debug_metadata *node1 = new drm_xe_ext_vm_set_debug_metadata(); drm_xe_ext_vm_set_debug_metadata *node2 = new drm_xe_ext_vm_set_debug_metadata(); @@ -174,8 +174,8 @@ TEST(IoctlHelperXeTest, givenFreeDebugMetadataWhenVmCreateHasMultipleExtTypesThe TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallingGetRunaloneExtPropertyThenCorrectValueReturned) { auto executionEnvironment = std::make_unique(); executionEnvironment->setDebuggingMode(DebuggingMode::offline); - DrmMockXeDebug drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->ioctlHelper.get()); EXPECT_EQ(xeIoctlHelper->getRunaloneExtProperty(), DRM_XE_EXEC_QUEUE_SET_PROPERTY_EUDEBUG); } @@ -193,19 +193,18 @@ HWTEST_F(IoctlHelperXeTestFixture, GivenRunaloneModeRequiredReturnFalseWhenCreat auto raiiFactory = RAIIGfxCoreHelperFactory(rootDeviceEnvironment); rootDeviceEnvironment.osInterface = std::make_unique(); rootDeviceEnvironment.osInterface->setDriverModel(std::make_unique(mockFd, rootDeviceEnvironment)); - DrmMockXeDebug drm{*executionEnvironment->rootDeviceEnvironments[0]}; - drm.ioctlHelper = std::make_unique(drm); - auto xeIoctlHelper = static_cast(drm.getIoctlHelper()); + auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->ioctlHelper.get()); auto engineInfo = xeIoctlHelper->createEngineInfo(false); ASSERT_NE(nullptr, engineInfo); - drm.engineInfo = std::move(engineInfo); + drm->engineInfo = std::move(engineInfo); - OsContextLinux osContext(drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::EngineType::ENGINE_CCS, EngineUsage::regular})); + OsContextLinux osContext(*drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::EngineType::ENGINE_CCS, EngineUsage::regular})); uint16_t deviceIndex = 1; - xeIoctlHelper->createDrmContext(drm, osContext, 0, deviceIndex, false); + xeIoctlHelper->createDrmContext(*drm, osContext, 0, deviceIndex, false); - auto ext = drm.receivedContextCreateSetParam; + auto ext = drm->receivedContextCreateSetParam; EXPECT_NE(ext.property, static_cast(DRM_XE_EXEC_QUEUE_SET_PROPERTY_EUDEBUG)); } @@ -215,28 +214,27 @@ HWTEST_F(IoctlHelperXeTestFixture, givenDeviceIndexWhenCreatingContextThenSetCor rootDeviceEnvironment.osInterface = std::make_unique(); rootDeviceEnvironment.osInterface->setDriverModel(std::make_unique(mockFd, rootDeviceEnvironment)); - DrmMockXeDebug drm{*executionEnvironment->rootDeviceEnvironments[0]}; - drm.ioctlHelper = std::make_unique(drm); - auto xeIoctlHelper = static_cast(drm.getIoctlHelper()); + auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->ioctlHelper.get()); xeIoctlHelper->initialize(); auto engineInfo = xeIoctlHelper->createEngineInfo(false); ASSERT_NE(nullptr, engineInfo); - drm.engineInfo = std::move(engineInfo); + drm->engineInfo = std::move(engineInfo); auto engineDescriptor = EngineDescriptorHelper::getDefaultDescriptor({aub_stream::EngineType::ENGINE_CCS, EngineUsage::regular}); engineDescriptor.isEngineInstanced = true; - OsContextLinux osContext(drm, 0, 0u, engineDescriptor); + OsContextLinux osContext(*drm, 0, 0u, engineDescriptor); uint16_t tileId = 1u; uint16_t expectedGtId = xeIoctlHelper->tileIdToGtId[tileId]; - xeIoctlHelper->createDrmContext(drm, osContext, 0, tileId, false); + xeIoctlHelper->createDrmContext(*drm, osContext, 0, tileId, false); - EXPECT_EQ(1u, drm.execQueueCreateParams.num_placements); - ASSERT_EQ(1u, drm.execQueueEngineInstances.size()); + EXPECT_EQ(1u, drm->execQueueCreateParams.num_placements); + ASSERT_EQ(1u, drm->execQueueEngineInstances.size()); - EXPECT_EQ(expectedGtId, drm.execQueueEngineInstances[0].gt_id); + EXPECT_EQ(expectedGtId, drm->execQueueEngineInstances[0].gt_id); } HWTEST_F(IoctlHelperXeTestFixture, GivenRunaloneModeRequiredReturnTrueWhenCreateDrmContextThenRunAloneContextIsRequested) { @@ -252,18 +250,17 @@ HWTEST_F(IoctlHelperXeTestFixture, GivenRunaloneModeRequiredReturnTrueWhenCreate auto raiiFactory = RAIIGfxCoreHelperFactory(rootDeviceEnvironment); rootDeviceEnvironment.osInterface = std::make_unique(); rootDeviceEnvironment.osInterface->setDriverModel(std::make_unique(mockFd, rootDeviceEnvironment)); - DrmMockXeDebug drm{*executionEnvironment->rootDeviceEnvironments[0]}; - drm.ioctlHelper = std::make_unique(drm); - auto xeIoctlHelper = static_cast(drm.getIoctlHelper()); + auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->ioctlHelper.get()); auto engineInfo = xeIoctlHelper->createEngineInfo(false); ASSERT_NE(nullptr, engineInfo); - drm.engineInfo = std::move(engineInfo); + drm->engineInfo = std::move(engineInfo); - OsContextLinux osContext(drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::EngineType::ENGINE_CCS, EngineUsage::regular})); - xeIoctlHelper->createDrmContext(drm, osContext, 0, 1, false); + OsContextLinux osContext(*drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::EngineType::ENGINE_CCS, EngineUsage::regular})); + xeIoctlHelper->createDrmContext(*drm, osContext, 0, 1, false); - auto ext = drm.receivedContextCreateSetParam; + auto ext = drm->receivedContextCreateSetParam; EXPECT_EQ(ext.base.name, static_cast(DRM_XE_EXEC_QUEUE_EXTENSION_SET_PROPERTY)); EXPECT_EQ(ext.base.next_extension, 0ULL); EXPECT_EQ(ext.property, static_cast(DRM_XE_EXEC_QUEUE_SET_PROPERTY_EUDEBUG)); @@ -283,25 +280,24 @@ HWTEST_F(IoctlHelperXeTestFixture, GivenContextCreatedForCopyEngineWhenCreateDrm auto raiiFactory = RAIIGfxCoreHelperFactory(rootDeviceEnvironment); rootDeviceEnvironment.osInterface = std::make_unique(); rootDeviceEnvironment.osInterface->setDriverModel(std::make_unique(mockFd, rootDeviceEnvironment)); - DrmMockXeDebug drm{*executionEnvironment->rootDeviceEnvironments[0]}; - drm.ioctlHelper = std::make_unique(drm); - auto xeIoctlHelper = static_cast(drm.getIoctlHelper()); + auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->ioctlHelper.get()); auto engineInfo = xeIoctlHelper->createEngineInfo(false); ASSERT_NE(nullptr, engineInfo); - drm.engineInfo = std::move(engineInfo); + drm->engineInfo = std::move(engineInfo); - OsContextLinux osContext(drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::EngineType::ENGINE_BCS1, EngineUsage::regular})); - xeIoctlHelper->createDrmContext(drm, osContext, 0, 0, false); + OsContextLinux osContext(*drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::EngineType::ENGINE_BCS1, EngineUsage::regular})); + xeIoctlHelper->createDrmContext(*drm, osContext, 0, 0, false); - auto ext = drm.receivedContextCreateSetParam; + auto ext = drm->receivedContextCreateSetParam; EXPECT_NE(ext.property, static_cast(DRM_XE_EXEC_QUEUE_SET_PROPERTY_EUDEBUG)); } TEST(IoctlHelperXeTest, GivenXeDriverThenDebugAttachReturnsTrue) { auto executionEnvironment = std::make_unique(); - DrmMockXeDebug drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->ioctlHelper.get()); EXPECT_TRUE(xeIoctlHelper->isDebugAttachAvailable()); } @@ -312,8 +308,8 @@ TEST(IoctlHelperXeTest, givenXeEnableEuDebugThenReturnCorrectValue) { VariableBackup mockFreadBufferBackup(&IoFunctions::mockFreadBuffer, buffer.get()); auto executionEnvironment = std::make_unique(); - DrmMockXeDebug drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->ioctlHelper.get()); buffer[0] = '1'; int enableEuDebug = xeIoctlHelper->getEuDebugSysFsEnable(); @@ -330,8 +326,8 @@ TEST(IoctlHelperXeTest, givenXeEnableEuDebugWithInvalidPathThenReturnCorrectValu VariableBackup mockFreadBufferBackup(&IoFunctions::mockFreadBuffer, buffer.get()); auto executionEnvironment = std::make_unique(); - DrmMockXeDebug drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->ioctlHelper.get()); buffer[0] = '1'; VariableBackup mockFopenReturnBackup(&IoFunctions::mockFopenReturned, nullptr); @@ -342,65 +338,67 @@ TEST(IoctlHelperXeTest, givenXeEnableEuDebugWithInvalidPathThenReturnCorrectValu TEST(IoctlHelperXeTest, givenXeRegisterResourceThenCorrectIoctlCalled) { auto executionEnvironment = std::make_unique(); - DrmMockXeDebug drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->ioctlHelper.get()); constexpr size_t bufferSize = 20; uint8_t buffer[bufferSize]; + auto id = xeIoctlHelper->registerResource(DrmResourceClass::elf, buffer, bufferSize); - EXPECT_EQ(drm.metadataID, id); - EXPECT_EQ(drm.metadataAddr, buffer); - EXPECT_EQ(drm.metadataSize, bufferSize); - EXPECT_EQ(drm.metadataType, static_cast(DRM_XE_DEBUG_METADATA_ELF_BINARY)); + EXPECT_EQ(drm->metadataID, id); + EXPECT_EQ(drm->metadataAddr, buffer); + EXPECT_EQ(drm->metadataSize, bufferSize); + EXPECT_EQ(drm->metadataType, static_cast(DRM_XE_DEBUG_METADATA_ELF_BINARY)); - drm.metadataID = 0; - drm.metadataAddr = nullptr; - drm.metadataSize = 0; + drm->metadataID = 0; + drm->metadataAddr = nullptr; + drm->metadataSize = 0; id = xeIoctlHelper->registerResource(DrmResourceClass::l0ZebinModule, buffer, bufferSize); - EXPECT_EQ(drm.metadataID, id); - EXPECT_EQ(drm.metadataAddr, buffer); - EXPECT_EQ(drm.metadataSize, bufferSize); - EXPECT_EQ(drm.metadataType, static_cast(DRM_XE_DEBUG_METADATA_PROGRAM_MODULE)); + EXPECT_EQ(drm->metadataID, id); + EXPECT_EQ(drm->metadataAddr, buffer); + EXPECT_EQ(drm->metadataSize, bufferSize); + EXPECT_EQ(drm->metadataType, static_cast(DRM_XE_DEBUG_METADATA_PROGRAM_MODULE)); - drm.metadataID = 0; - drm.metadataAddr = nullptr; - drm.metadataSize = 0; + drm->metadataID = 0; + drm->metadataAddr = nullptr; + drm->metadataSize = 0; id = xeIoctlHelper->registerResource(DrmResourceClass::contextSaveArea, buffer, bufferSize); - EXPECT_EQ(drm.metadataID, id); - EXPECT_EQ(drm.metadataAddr, buffer); - EXPECT_EQ(drm.metadataSize, bufferSize); - EXPECT_EQ(drm.metadataType, static_cast(WORK_IN_PROGRESS_DRM_XE_DEBUG_METADATA_SIP_AREA)); + EXPECT_EQ(drm->metadataID, id); + EXPECT_EQ(drm->metadataAddr, buffer); + EXPECT_EQ(drm->metadataSize, bufferSize); + EXPECT_EQ(drm->metadataType, static_cast(WORK_IN_PROGRESS_DRM_XE_DEBUG_METADATA_SIP_AREA)); - drm.metadataID = 0; - drm.metadataAddr = nullptr; - drm.metadataSize = 0; + drm->metadataID = 0; + drm->metadataAddr = nullptr; + drm->metadataSize = 0; id = xeIoctlHelper->registerResource(DrmResourceClass::sbaTrackingBuffer, buffer, bufferSize); - EXPECT_EQ(drm.metadataID, id); - EXPECT_EQ(drm.metadataAddr, buffer); - EXPECT_EQ(drm.metadataSize, bufferSize); - EXPECT_EQ(drm.metadataType, static_cast(WORK_IN_PROGRESS_DRM_XE_DEBUG_METADATA_SBA_AREA)); + EXPECT_EQ(drm->metadataID, id); + EXPECT_EQ(drm->metadataAddr, buffer); + EXPECT_EQ(drm->metadataSize, bufferSize); + EXPECT_EQ(drm->metadataType, static_cast(WORK_IN_PROGRESS_DRM_XE_DEBUG_METADATA_SBA_AREA)); - drm.metadataID = 0; - drm.metadataAddr = nullptr; - drm.metadataSize = 0; + drm->metadataID = 0; + drm->metadataAddr = nullptr; + drm->metadataSize = 0; id = xeIoctlHelper->registerResource(DrmResourceClass::moduleHeapDebugArea, buffer, bufferSize); - EXPECT_EQ(drm.metadataID, id); - EXPECT_EQ(drm.metadataAddr, buffer); - EXPECT_EQ(drm.metadataSize, bufferSize); - EXPECT_EQ(drm.metadataType, static_cast(WORK_IN_PROGRESS_DRM_XE_DEBUG_METADATA_MODULE_AREA)); + EXPECT_EQ(drm->metadataID, id); + EXPECT_EQ(drm->metadataAddr, buffer); + EXPECT_EQ(drm->metadataSize, bufferSize); + EXPECT_EQ(drm->metadataType, static_cast(WORK_IN_PROGRESS_DRM_XE_DEBUG_METADATA_MODULE_AREA)); } TEST(IoctlHelperXeTest, givenXeunregisterResourceThenCorrectIoctlCalled) { auto executionEnvironment = std::make_unique(); - DrmMockXeDebug drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->ioctlHelper.get()); xeIoctlHelper->unregisterResource(0x1234); - EXPECT_EQ(drm.metadataID, 0x1234u); + EXPECT_EQ(drm->metadataID, 0x1234u); } TEST(IoctlHelperXeTest, whenGettingVmBindExtFromHandlesThenProperStructsAreReturned) { auto executionEnvironment = std::make_unique(); - DrmMockXeDebug drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->ioctlHelper.get()); + StackVec bindExtHandles; bindExtHandles.push_back(1u); bindExtHandles.push_back(2u); diff --git a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_perf_tests.cpp b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_perf_tests.cpp index 3f6b549f05..01b9d546fd 100644 --- a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_perf_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_perf_tests.cpp @@ -15,8 +15,8 @@ using namespace NEO; TEST(IoctlHelperXeTest, whenCallingGetEuStallPropertiesThenFailueIsReturned) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = std::make_unique(*drm); EXPECT_NE(nullptr, xeIoctlHelper); std::array properties = {}; EXPECT_FALSE(xeIoctlHelper.get()->getEuStallProperties(properties, 0x101, 0x102, 0x103, 1, 20u)); @@ -24,8 +24,8 @@ TEST(IoctlHelperXeTest, whenCallingGetEuStallPropertiesThenFailueIsReturned) { TEST(IoctlHelperXeTest, whenCallingPerfOpenEuStallStreamThenFailueIsReturned) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = std::make_unique(*drm); EXPECT_NE(nullptr, xeIoctlHelper); int32_t invalidFd = -1; std::array properties = {}; @@ -34,8 +34,8 @@ TEST(IoctlHelperXeTest, whenCallingPerfOpenEuStallStreamThenFailueIsReturned) { TEST(IoctlHelperXeTest, whenCallingPerfDisableEuStallStreamThenFailueIsReturned) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = std::make_unique(*drm); EXPECT_NE(nullptr, xeIoctlHelper); int32_t invalidFd = -1; EXPECT_FALSE(xeIoctlHelper.get()->perfDisableEuStallStream(&invalidFd)); @@ -43,56 +43,56 @@ TEST(IoctlHelperXeTest, whenCallingPerfDisableEuStallStreamThenFailueIsReturned) TEST(IoctlHelperXeTest, whenCallingGetIoctlRequestValuePerfOpenThenZeroisReturned) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = std::make_unique(*drm); EXPECT_NE(nullptr, xeIoctlHelper); EXPECT_EQ(0u, xeIoctlHelper.get()->getIoctlRequestValuePerf(DrmIoctl::perfOpen)); } TEST(IoctlHelperXeTest, whenCallingGetIoctlRequestValuePerfEnableThenZeroisReturned) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = std::make_unique(*drm); EXPECT_NE(nullptr, xeIoctlHelper); EXPECT_EQ(0u, xeIoctlHelper.get()->getIoctlRequestValuePerf(DrmIoctl::perfEnable)); } TEST(IoctlHelperXeTest, whenCallingGetIoctlRequestValuePerfDisableThenZeroisReturned) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = std::make_unique(*drm); EXPECT_NE(nullptr, xeIoctlHelper); EXPECT_EQ(0u, xeIoctlHelper.get()->getIoctlRequestValuePerf(DrmIoctl::perfDisable)); } TEST(IoctlHelperXeTest, whenCallingPerfOpenIoctlWithInvalidValuesThenZeroisReturned) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = std::make_unique(*drm); EXPECT_NE(nullptr, xeIoctlHelper); EXPECT_EQ(0, xeIoctlHelper.get()->perfOpenIoctl(DrmIoctl::perfOpen, nullptr)); } TEST(IoctlHelperXeTest, whenCallingGetIoctlRequestValueWithInvalidValueThenErrorReturned) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = std::make_unique(*drm); EXPECT_NE(nullptr, xeIoctlHelper); EXPECT_EQ(0u, xeIoctlHelper.get()->getIoctlRequestValuePerf(DrmIoctl::version)); } TEST(IoctlHelperXeTest, whenCallingPerfOpenIoctlThenProperValueIsReturned) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = std::make_unique(*drm); EXPECT_NE(nullptr, xeIoctlHelper); EXPECT_EQ(0, xeIoctlHelper.get()->ioctl(DrmIoctl::perfOpen, nullptr)); } TEST(IoctlHelperXeTest, whenCallingPerfDisableIoctlThenProperValueIsReturned) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = std::make_unique(*drm); EXPECT_NE(nullptr, xeIoctlHelper); int32_t invalidFd = -1; EXPECT_EQ(0, xeIoctlHelper.get()->ioctl(invalidFd, DrmIoctl::perfDisable, nullptr)); diff --git a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp index b1c4c9b450..7eb5b84b28 100644 --- a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp @@ -50,8 +50,8 @@ TEST(IoctlHelperXeTest, whenChangingBufferBindingThenWaitIsNeededAlways) { TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallingGemCreateExtWithRegionsThenDummyValueIsReturned) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); ASSERT_NE(nullptr, xeIoctlHelper); std::vector regionInfo(2); @@ -67,13 +67,13 @@ TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallingGemCreateExtWithRegionsThen EXPECT_TRUE(xeIoctlHelper->bindInfo.empty()); EXPECT_NE(0, xeIoctlHelper->createGemExt(memRegions, 0u, handle, 0, {}, -1, false, numOfChunks, std::nullopt, std::nullopt, false)); EXPECT_FALSE(xeIoctlHelper->bindInfo.empty()); - EXPECT_EQ(DRM_XE_GEM_CPU_CACHING_WC, drm.createParamsCpuCaching); + EXPECT_EQ(DRM_XE_GEM_CPU_CACHING_WC, drm->createParamsCpuCaching); } TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallingGemCreateExtWithRegionsAndVmIdThenDummyValueIsReturned) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); ASSERT_NE(nullptr, xeIoctlHelper); std::vector regionInfo(2); @@ -90,36 +90,36 @@ TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallingGemCreateExtWithRegionsAndV EXPECT_TRUE(xeIoctlHelper->bindInfo.empty()); EXPECT_NE(0, xeIoctlHelper->createGemExt(memRegions, 0u, handle, 0, test.vmId, -1, false, numOfChunks, std::nullopt, std::nullopt, false)); EXPECT_FALSE(xeIoctlHelper->bindInfo.empty()); - EXPECT_EQ(DRM_XE_GEM_CPU_CACHING_WC, drm.createParamsCpuCaching); + EXPECT_EQ(DRM_XE_GEM_CPU_CACHING_WC, drm->createParamsCpuCaching); } TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateAndNoLocalMemoryThenProperValuesSet) { DebugManagerStateRestore restorer; debugManager.flags.EnableLocalMemory.set(0); auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); - auto xeIoctlHelper = std::make_unique(drm); xeIoctlHelper->initialize(); - drm.memoryInfo.reset(xeIoctlHelper->createMemoryInfo().release()); + drm->memoryInfo.reset(xeIoctlHelper->createMemoryInfo().release()); ASSERT_NE(nullptr, xeIoctlHelper); uint64_t size = 1234; uint32_t memoryBanks = 3u; - EXPECT_EQ(0, drm.ioctlCnt.gemCreate); + EXPECT_EQ(0, drm->ioctlCnt.gemCreate); EXPECT_TRUE(xeIoctlHelper->bindInfo.empty()); uint32_t handle = xeIoctlHelper->createGem(size, memoryBanks, false); - EXPECT_EQ(1, drm.ioctlCnt.gemCreate); + EXPECT_EQ(1, drm->ioctlCnt.gemCreate); EXPECT_FALSE(xeIoctlHelper->bindInfo.empty()); - EXPECT_EQ(size, drm.createParamsSize); - EXPECT_EQ(0u, drm.createParamsFlags); - EXPECT_EQ(DRM_XE_GEM_CPU_CACHING_WC, drm.createParamsCpuCaching); - EXPECT_EQ(1u, drm.createParamsPlacement); + EXPECT_EQ(size, drm->createParamsSize); + EXPECT_EQ(0u, drm->createParamsFlags); + EXPECT_EQ(DRM_XE_GEM_CPU_CACHING_WC, drm->createParamsCpuCaching); + EXPECT_EQ(1u, drm->createParamsPlacement); // dummy mock handle - EXPECT_EQ(handle, drm.createParamsHandle); + EXPECT_EQ(handle, drm->createParamsHandle); EXPECT_EQ(handle, testValueGemCreate); } @@ -127,29 +127,29 @@ TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateWhenMemoryBanksZeroTh DebugManagerStateRestore restorer; debugManager.flags.EnableLocalMemory.set(0); auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); - auto xeIoctlHelper = std::make_unique(drm); xeIoctlHelper->initialize(); - drm.memoryInfo.reset(xeIoctlHelper->createMemoryInfo().release()); + drm->memoryInfo.reset(xeIoctlHelper->createMemoryInfo().release()); ASSERT_NE(nullptr, xeIoctlHelper); uint64_t size = 1234; uint32_t memoryBanks = 0u; - EXPECT_EQ(0, drm.ioctlCnt.gemCreate); + EXPECT_EQ(0, drm->ioctlCnt.gemCreate); EXPECT_TRUE(xeIoctlHelper->bindInfo.empty()); uint32_t handle = xeIoctlHelper->createGem(size, memoryBanks, false); - EXPECT_EQ(1, drm.ioctlCnt.gemCreate); + EXPECT_EQ(1, drm->ioctlCnt.gemCreate); EXPECT_FALSE(xeIoctlHelper->bindInfo.empty()); - EXPECT_EQ(size, drm.createParamsSize); - EXPECT_EQ(DRM_XE_GEM_CPU_CACHING_WC, drm.createParamsCpuCaching); - EXPECT_EQ(0u, drm.createParamsFlags); - EXPECT_EQ(1u, drm.createParamsPlacement); + EXPECT_EQ(size, drm->createParamsSize); + EXPECT_EQ(DRM_XE_GEM_CPU_CACHING_WC, drm->createParamsCpuCaching); + EXPECT_EQ(0u, drm->createParamsFlags); + EXPECT_EQ(1u, drm->createParamsPlacement); // dummy mock handle - EXPECT_EQ(handle, drm.createParamsHandle); + EXPECT_EQ(handle, drm->createParamsHandle); EXPECT_EQ(handle, testValueGemCreate); } @@ -157,55 +157,56 @@ TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateAndLocalMemoryThenPro DebugManagerStateRestore restorer; debugManager.flags.EnableLocalMemory.set(1); auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); - auto xeIoctlHelper = std::make_unique(drm); xeIoctlHelper->initialize(); - drm.memoryInfo.reset(xeIoctlHelper->createMemoryInfo().release()); + drm->memoryInfo.reset(xeIoctlHelper->createMemoryInfo().release()); ASSERT_NE(nullptr, xeIoctlHelper); uint64_t size = 1234; uint32_t memoryBanks = 3u; - EXPECT_EQ(0, drm.ioctlCnt.gemCreate); + EXPECT_EQ(0, drm->ioctlCnt.gemCreate); EXPECT_TRUE(xeIoctlHelper->bindInfo.empty()); uint32_t handle = xeIoctlHelper->createGem(size, memoryBanks, false); - EXPECT_EQ(1, drm.ioctlCnt.gemCreate); + EXPECT_EQ(1, drm->ioctlCnt.gemCreate); EXPECT_FALSE(xeIoctlHelper->bindInfo.empty()); - EXPECT_EQ(size, drm.createParamsSize); - EXPECT_EQ(DRM_XE_GEM_CPU_CACHING_WC, drm.createParamsCpuCaching); - EXPECT_EQ(0u, drm.createParamsFlags); - EXPECT_EQ(6u, drm.createParamsPlacement); + EXPECT_EQ(size, drm->createParamsSize); + EXPECT_EQ(DRM_XE_GEM_CPU_CACHING_WC, drm->createParamsCpuCaching); + EXPECT_EQ(0u, drm->createParamsFlags); + EXPECT_EQ(6u, drm->createParamsPlacement); // dummy mock handle - EXPECT_EQ(handle, drm.createParamsHandle); + EXPECT_EQ(handle, drm->createParamsHandle); EXPECT_EQ(handle, testValueGemCreate); } TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallSetGemTilingThenAlwaysTrue) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); + drm->ioctlCalled = false; ASSERT_NE(nullptr, xeIoctlHelper); GemSetTiling setTiling{}; uint32_t ret = xeIoctlHelper->setGemTiling(&setTiling); EXPECT_TRUE(ret); - EXPECT_FALSE(drm.ioctlCalled); + EXPECT_FALSE(drm->ioctlCalled); } TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGetGemTilingThenAlwaysTrue) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); + drm->ioctlCalled = false; ASSERT_NE(nullptr, xeIoctlHelper); GemGetTiling getTiling{}; uint32_t ret = xeIoctlHelper->getGemTiling(&getTiling); EXPECT_TRUE(ret); - EXPECT_FALSE(drm.ioctlCalled); + EXPECT_FALSE(drm->ioctlCalled); } TEST(IoctlHelperXeTest, givenIoctlHelperXeisVmBindPatIndexExtSupportedReturnsFalse) { @@ -518,8 +519,8 @@ TEST(IoctlHelperXeTest, verifyPublicFunctions) { TEST(IoctlHelperXeTest, whenGettingFileNamesForFrequencyThenProperStringIsReturned) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto ioctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto ioctlHelper = std::make_unique(*drm); ioctlHelper->initialize(); EXPECT_STREQ("/device/tile0/gt0/freq0/max_freq", ioctlHelper->getFileForMaxGpuFrequency().c_str()); EXPECT_STREQ("/device/tile0/gt0/freq0/max_freq", ioctlHelper->getFileForMaxGpuFrequencyOfSubDevice(0).c_str()); @@ -530,17 +531,17 @@ TEST(IoctlHelperXeTest, whenCallingIoctlThenProperValueIsReturned) { int ret; DebugManagerStateRestore restorer; auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto mockXeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto mockXeIoctlHelper = static_cast(drm->getIoctlHelper()); mockXeIoctlHelper->initialize(); - drm.reset(); + drm->reset(); { - drm.testMode(1, -1); + drm->testMode(1, -1); ret = mockXeIoctlHelper->initialize(); EXPECT_EQ(0, ret); } - drm.testMode(0); + drm->testMode(0); { GemUserPtr test = {}; test.userPtr = 2; @@ -633,7 +634,7 @@ TEST(IoctlHelperXeTest, whenCallingIoctlThenProperValueIsReturned) { EXPECT_EQ(-1, ret); } { - auto hwInfo = drm.getRootDeviceEnvironment().getHardwareInfo(); + auto hwInfo = drm->getRootDeviceEnvironment().getHardwareInfo(); GemContextParam test = {}; ret = mockXeIoctlHelper->ioctl(DrmIoctl::gemContextGetparam, &test); @@ -681,23 +682,23 @@ TEST(IoctlHelperXeTest, whenCallingIoctlThenProperValueIsReturned) { EXPECT_EQ(static_cast(dstvalue), DrmMockXe::mockTimestampFrequency); } EXPECT_THROW(mockXeIoctlHelper->ioctl(DrmIoctl::gemContextCreateExt, NULL), std::runtime_error); - drm.reset(); + drm->reset(); } TEST(IoctlHelperXeTest, givenGeomDssWhenGetTopologyDataAndMapThenResultsAreCorrect) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); auto &hwInfo = *executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo(); - auto xeIoctlHelper = std::make_unique(drm); xeIoctlHelper->initialize(); uint16_t tileId = 0; for (auto gtId = 0u; gtId < 4u; gtId++) { - drm.addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0b11'1111, 0, 0, 0, 0, 0, 0, 0}); - drm.addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_COMPUTE, 8, {0, 0, 0, 0, 0, 0, 0, 0}); - drm.addMockedQueryTopologyData(gtId, DRM_XE_TOPO_EU_PER_DSS, 8, {0b1111'1111, 0b1111'1111, 0, 0, 0, 0, 0, 0}); + drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0b11'1111, 0, 0, 0, 0, 0, 0, 0}); + drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_COMPUTE, 8, {0, 0, 0, 0, 0, 0, 0, 0}); + drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_EU_PER_DSS, 8, {0b1111'1111, 0b1111'1111, 0, 0, 0, 0, 0, 0}); } DrmQueryTopologyData topologyData{}; TopologyMap topologyMap{}; @@ -736,19 +737,19 @@ TEST(IoctlHelperXeTest, givenGeomDssWhenGetTopologyDataAndMapThenResultsAreCorre TEST(IoctlHelperXeTest, givenUnknownTopologyTypeWhenGetTopologyDataAndMapThenNotRecognizedTopologyIsIgnored) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); auto &hwInfo = *executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo(); - auto xeIoctlHelper = std::make_unique(drm); xeIoctlHelper->initialize(); constexpr int16_t unknownTopology = -1; uint16_t tileId = 0; for (auto gtId = 0u; gtId < 4u; gtId++) { - drm.addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0b11'1111, 0, 0, 0, 0, 0, 0, 0}); - drm.addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_COMPUTE, 8, {0, 0, 0, 0, 0, 0, 0, 0}); - drm.addMockedQueryTopologyData(gtId, DRM_XE_TOPO_EU_PER_DSS, 8, {0b1111'1111, 0b1111'1111, 0, 0, 0, 0, 0, 0}); - drm.addMockedQueryTopologyData(gtId, unknownTopology, 8, {0b1111'1111, 0b1111'1111, 0, 0, 0, 0, 0, 0}); + drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0b11'1111, 0, 0, 0, 0, 0, 0, 0}); + drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_COMPUTE, 8, {0, 0, 0, 0, 0, 0, 0, 0}); + drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_EU_PER_DSS, 8, {0b1111'1111, 0b1111'1111, 0, 0, 0, 0, 0, 0}); + drm->addMockedQueryTopologyData(gtId, unknownTopology, 8, {0b1111'1111, 0b1111'1111, 0, 0, 0, 0, 0, 0}); } DrmQueryTopologyData topologyData{}; TopologyMap topologyMap{}; @@ -787,16 +788,16 @@ TEST(IoctlHelperXeTest, givenUnknownTopologyTypeWhenGetTopologyDataAndMapThenNot TEST(IoctlHelperXeTest, givenComputeDssWhenGetTopologyDataAndMapThenResultsAreCorrect) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); auto &hwInfo = *executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo(); - auto xeIoctlHelper = std::make_unique(drm); xeIoctlHelper->initialize(); uint16_t tileId = 0; for (auto gtId = 0u; gtId < 4u; gtId++) { - drm.addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0, 0, 0, 0, 0, 0, 0, 0}); - drm.addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_COMPUTE, 8, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}); - drm.addMockedQueryTopologyData(gtId, DRM_XE_TOPO_EU_PER_DSS, 8, {0b1111'1111, 0, 0, 0, 0, 0, 0, 0}); + drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0, 0, 0, 0, 0, 0, 0, 0}); + drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_COMPUTE, 8, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}); + drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_EU_PER_DSS, 8, {0b1111'1111, 0, 0, 0, 0, 0, 0, 0}); } DrmQueryTopologyData topologyData{}; @@ -841,9 +842,9 @@ TEST(IoctlHelperXeTest, givenComputeDssWhenGetTopologyDataAndMapThenResultsAreCo TEST(IoctlHelperXeTest, givenOnlyMediaTypeWhenGetTopologyDataAndMapThenSubsliceIndicesNotSet) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - drm.queryGtList.resize(13); // 1 qword for num gts, 12 per gt - auto xeQueryGtList = reinterpret_cast(drm.queryGtList.begin()); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + drm->queryGtList.resize(13); // 1 qword for num gts, 12 per gt + auto xeQueryGtList = reinterpret_cast(drm->queryGtList.begin()); xeQueryGtList->num_gt = 1; xeQueryGtList->gt_list[0] = { DRM_XE_QUERY_GT_TYPE_MEDIA, // type @@ -856,13 +857,13 @@ TEST(IoctlHelperXeTest, givenOnlyMediaTypeWhenGetTopologyDataAndMapThenSubsliceI }; auto &hwInfo = *executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo(); - auto xeIoctlHelper = std::make_unique(drm); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); xeIoctlHelper->initialize(); uint16_t tileId = 0; - drm.addMockedQueryTopologyData(tileId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0, 0, 0, 0, 0, 0, 0, 0}); - drm.addMockedQueryTopologyData(tileId, DRM_XE_TOPO_DSS_COMPUTE, 8, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}); - drm.addMockedQueryTopologyData(tileId, DRM_XE_TOPO_EU_PER_DSS, 8, {0b1111'1111, 0, 0, 0, 0, 0, 0, 0}); + drm->addMockedQueryTopologyData(tileId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0, 0, 0, 0, 0, 0, 0, 0}); + drm->addMockedQueryTopologyData(tileId, DRM_XE_TOPO_DSS_COMPUTE, 8, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}); + drm->addMockedQueryTopologyData(tileId, DRM_XE_TOPO_EU_PER_DSS, 8, {0b1111'1111, 0, 0, 0, 0, 0, 0, 0}); DrmQueryTopologyData topologyData{}; TopologyMap topologyMap{}; @@ -889,9 +890,9 @@ TEST(IoctlHelperXeTest, givenOnlyMediaTypeWhenGetTopologyDataAndMapThenSubsliceI TEST(IoctlHelperXeTest, givenMainAndMediaTypesWhenGetTopologyDataAndMapThenResultsAreCorrect) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - drm.queryGtList.resize(49); - auto xeQueryGtList = reinterpret_cast(drm.queryGtList.begin()); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + drm->queryGtList.resize(49); + auto xeQueryGtList = reinterpret_cast(drm->queryGtList.begin()); xeQueryGtList->num_gt = 4; xeQueryGtList->gt_list[0] = { DRM_XE_QUERY_GT_TYPE_MAIN, // type @@ -931,12 +932,12 @@ TEST(IoctlHelperXeTest, givenMainAndMediaTypesWhenGetTopologyDataAndMapThenResul }; auto &hwInfo = *executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo(); - auto xeIoctlHelper = std::make_unique(drm); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); xeIoctlHelper->initialize(); for (auto tileId = 0; tileId < 4; tileId++) { - drm.addMockedQueryTopologyData(tileId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}); - drm.addMockedQueryTopologyData(tileId, DRM_XE_TOPO_DSS_COMPUTE, 8, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}); - drm.addMockedQueryTopologyData(tileId, DRM_XE_TOPO_EU_PER_DSS, 8, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}); + drm->addMockedQueryTopologyData(tileId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}); + drm->addMockedQueryTopologyData(tileId, DRM_XE_TOPO_DSS_COMPUTE, 8, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}); + drm->addMockedQueryTopologyData(tileId, DRM_XE_TOPO_EU_PER_DSS, 8, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}); } DrmQueryTopologyData topologyData{}; @@ -965,15 +966,15 @@ TEST(IoctlHelperXeTest, givenMainAndMediaTypesWhenGetTopologyDataAndMapThenResul TEST(IoctlHelperXeTest, given2TileAndComputeDssWhenGetTopologyDataAndMapThenResultsAreCorrect) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); auto &hwInfo = *executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo(); - auto xeIoctlHelper = std::make_unique(drm); xeIoctlHelper->initialize(); for (auto gtId = 0u; gtId < 4u; gtId++) { - drm.addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0, 0, 0, 0, 0, 0, 0, 0}); - drm.addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_COMPUTE, 8, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}); - drm.addMockedQueryTopologyData(gtId, DRM_XE_TOPO_EU_PER_DSS, 4, {0b1111'1111, 0, 0, 0}); + drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0, 0, 0, 0, 0, 0, 0, 0}); + drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_COMPUTE, 8, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}); + drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_EU_PER_DSS, 4, {0b1111'1111, 0, 0, 0}); } DrmQueryTopologyData topologyData{}; @@ -1020,20 +1021,20 @@ TEST(IoctlHelperXeTest, given2TileAndComputeDssWhenGetTopologyDataAndMapThenResu TEST(IoctlHelperXeTest, given2TileWithDisabledDssOn1TileAndComputeDssWhenGetTopologyDataAndMapThenResultsAreCorrect) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); auto &hwInfo = *executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo(); - auto xeIoctlHelper = std::make_unique(drm); xeIoctlHelper->initialize(); for (auto gtId = 0u; gtId < 4u; gtId++) { - drm.addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0, 0, 0, 0, 0, 0, 0, 0}); + drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0, 0, 0, 0, 0, 0, 0, 0}); // half dss disabled on tile 0 if (gtId == 0) { - drm.addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_COMPUTE, 8, {0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0}); + drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_COMPUTE, 8, {0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0}); } else { - drm.addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_COMPUTE, 8, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}); + drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_COMPUTE, 8, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}); } - drm.addMockedQueryTopologyData(gtId, DRM_XE_TOPO_EU_PER_DSS, 4, {0b1111'1111, 0, 0, 0}); + drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_EU_PER_DSS, 4, {0b1111'1111, 0, 0, 0}); } DrmQueryTopologyData topologyData{}; @@ -1087,18 +1088,18 @@ TEST(IoctlHelperXeTest, given2TileWithDisabledDssOn1TileAndComputeDssWhenGetTopo TEST(IoctlHelperXeTest, given2TileWithDisabledEvenDssAndComputeDssWhenGetTopologyDataAndMapThenResultsAreCorrect) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); auto &hwInfo = *executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo(); - auto xeIoctlHelper = std::make_unique(drm); xeIoctlHelper->initialize(); // even dss disabled constexpr uint8_t data = 0b1010'1010; for (auto gtId = 0u; gtId < 4u; gtId++) { - drm.addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0, 0, 0, 0, 0, 0, 0, 0}); - drm.addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_COMPUTE, 8, {data, data, data, data, data, data, data, data}); - drm.addMockedQueryTopologyData(gtId, DRM_XE_TOPO_EU_PER_DSS, 4, {0b1111'1111, 0, 0, 0}); + drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0, 0, 0, 0, 0, 0, 0, 0}); + drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_COMPUTE, 8, {data, data, data, data, data, data, data, data}); + drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_EU_PER_DSS, 4, {0b1111'1111, 0, 0, 0}); } DrmQueryTopologyData topologyData{}; @@ -1148,18 +1149,18 @@ TEST(IoctlHelperXeTest, given2TileWithDisabledEvenDssAndComputeDssWhenGetTopolog TEST(IoctlHelperXeTest, givenMissingSupportedTopologiesWhenGetTopologyDataAndMapThenReturnFalse) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); auto &hwInfo = *executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo(); - auto xeIoctlHelper = std::make_unique(drm); xeIoctlHelper->initialize(); uint16_t tileId = 0; uint16_t incorrectFlagType = 128u; - drm.addMockedQueryTopologyData(tileId, incorrectFlagType, 8, {0b11'1111, 0, 0, 0, 0, 0, 0, 0}); - drm.addMockedQueryTopologyData(tileId, incorrectFlagType, 8, {0, 0, 0, 0, 0, 0, 0, 0}); - drm.addMockedQueryTopologyData(tileId, incorrectFlagType, 8, {0b1111'1111, 0b1111'1111, 0, 0, 0, 0, 0, 0}); - drm.addMockedQueryTopologyData(tileId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0, 0, 0, 0, 0, 0, 0, 0}); + drm->addMockedQueryTopologyData(tileId, incorrectFlagType, 8, {0b11'1111, 0, 0, 0, 0, 0, 0, 0}); + drm->addMockedQueryTopologyData(tileId, incorrectFlagType, 8, {0, 0, 0, 0, 0, 0, 0, 0}); + drm->addMockedQueryTopologyData(tileId, incorrectFlagType, 8, {0b1111'1111, 0b1111'1111, 0, 0, 0, 0, 0, 0}); + drm->addMockedQueryTopologyData(tileId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0, 0, 0, 0, 0, 0, 0, 0}); DrmQueryTopologyData topologyData{}; TopologyMap topologyMap{}; @@ -1167,15 +1168,15 @@ TEST(IoctlHelperXeTest, givenMissingSupportedTopologiesWhenGetTopologyDataAndMap auto result = xeIoctlHelper->getTopologyDataAndMap(hwInfo, topologyData, topologyMap); EXPECT_FALSE(result); - drm.addMockedQueryTopologyData(tileId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0, 0, 0, 0, 0, 0, 0, 0}); + drm->addMockedQueryTopologyData(tileId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0, 0, 0, 0, 0, 0, 0, 0}); result = xeIoctlHelper->getTopologyDataAndMap(hwInfo, topologyData, topologyMap); EXPECT_FALSE(result); - drm.addMockedQueryTopologyData(tileId, DRM_XE_TOPO_DSS_COMPUTE, 8, {0b1111'1111, 0b1111'1111, 0, 0, 0, 0, 0, 0}); + drm->addMockedQueryTopologyData(tileId, DRM_XE_TOPO_DSS_COMPUTE, 8, {0b1111'1111, 0b1111'1111, 0, 0, 0, 0, 0, 0}); result = xeIoctlHelper->getTopologyDataAndMap(hwInfo, topologyData, topologyMap); EXPECT_FALSE(result); - drm.queryTopology.clear(); - drm.addMockedQueryTopologyData(tileId, DRM_XE_TOPO_EU_PER_DSS, 4, {0b1111'1111, 0, 0, 0}); + drm->queryTopology.clear(); + drm->addMockedQueryTopologyData(tileId, DRM_XE_TOPO_EU_PER_DSS, 4, {0b1111'1111, 0, 0, 0}); result = xeIoctlHelper->getTopologyDataAndMap(hwInfo, topologyData, topologyMap); EXPECT_FALSE(result); } @@ -1183,8 +1184,8 @@ TEST(IoctlHelperXeTest, givenMissingSupportedTopologiesWhenGetTopologyDataAndMap TEST(IoctlHelperXeTest, whenCreatingEngineInfoThenProperEnginesAreDiscovered) { DebugManagerStateRestore restorer; auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); xeIoctlHelper->initialize(); auto baseCopyEngine = aub_stream::EngineType::ENGINE_BCS; @@ -1306,8 +1307,8 @@ TEST(IoctlHelperXeTest, whenCreatingMemoryInfoThenProperMemoryBanksAreDiscovered DebugManagerStateRestore restorer; debugManager.flags.EnableLocalMemory.set(1); auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); xeIoctlHelper->initialize(); auto memoryInfo = xeIoctlHelper->createMemoryInfo(); EXPECT_NE(nullptr, memoryInfo); @@ -1355,7 +1356,7 @@ TEST(IoctlHelperXeTest, givenXeDrmMemoryManagerWhenGetLocalMemorySizeIsCalledThe hwInfo->gtSystemInfo.MultiTileArchInfo.IsValid = true; hwInfo->gtSystemInfo.MultiTileArchInfo.TileCount = tileCount; rootDeviceEnv.osInterface.reset(new OSInterface{}); - rootDeviceEnv.osInterface->setDriverModel(std::make_unique(rootDeviceEnv)); + rootDeviceEnv.osInterface->setDriverModel(DrmMockXe::create(rootDeviceEnv)); auto *drm{rootDeviceEnv.osInterface->getDriverModel()->as()}; @@ -1385,11 +1386,11 @@ TEST(IoctlHelperXeTest, givenXeDrmMemoryManagerWhenGetLocalMemorySizeIsCalledThe TEST(IoctlHelperXeTest, givenIoctlFailureWhenCreatingMemoryInfoThenNoMemoryBanksAreDiscovered) { DebugManagerStateRestore restorer; auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); xeIoctlHelper->initialize(); - drm.testMode(1, -1); + drm->testMode(1, -1); auto memoryInfo = xeIoctlHelper->createMemoryInfo(); EXPECT_EQ(nullptr, memoryInfo); } @@ -1397,11 +1398,11 @@ TEST(IoctlHelperXeTest, givenIoctlFailureWhenCreatingMemoryInfoThenNoMemoryBanks TEST(IoctlHelperXeTest, givenNoMemoryRegionsWhenCreatingMemoryInfoThenMemoryInfoIsNotCreated) { DebugManagerStateRestore restorer; auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); xeIoctlHelper->initialize(); - auto xeQueryMemUsage = reinterpret_cast(drm.queryMemUsage); + auto xeQueryMemUsage = reinterpret_cast(drm->queryMemUsage); xeQueryMemUsage->num_mem_regions = 0u; auto memoryInfo = xeIoctlHelper->createMemoryInfo(); EXPECT_EQ(nullptr, memoryInfo); @@ -1410,11 +1411,11 @@ TEST(IoctlHelperXeTest, givenNoMemoryRegionsWhenCreatingMemoryInfoThenMemoryInfo TEST(IoctlHelperXeTest, givenIoctlFailureWhenCreatingEngineInfoThenNoEnginesAreDiscovered) { DebugManagerStateRestore restorer; auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); xeIoctlHelper->initialize(); - drm.testMode(1, -1); + drm->testMode(1, -1); auto engineInfo = xeIoctlHelper->createEngineInfo(true); EXPECT_EQ(nullptr, engineInfo); } @@ -1423,8 +1424,8 @@ TEST(IoctlHelperXeTest, givenEnabledFtrMultiTileArchWhenCreatingEngineInfoThenMu DebugManagerStateRestore restorer; auto executionEnvironment = std::make_unique(); auto &rootDeviceEnvironment = *executionEnvironment->rootDeviceEnvironments[0]; - DrmMockXe drm{rootDeviceEnvironment}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(rootDeviceEnvironment); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); xeIoctlHelper->initialize(); auto hwInfo = rootDeviceEnvironment.getMutableHardwareInfo(); @@ -1444,8 +1445,8 @@ TEST(IoctlHelperXeTest, givenDisabledFtrMultiTileArchWhenCreatingEngineInfoThenM DebugManagerStateRestore restorer; auto executionEnvironment = std::make_unique(); auto &rootDeviceEnvironment = *executionEnvironment->rootDeviceEnvironments[0]; - DrmMockXe drm{rootDeviceEnvironment}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(rootDeviceEnvironment); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); xeIoctlHelper->initialize(); auto hwInfo = rootDeviceEnvironment.getMutableHardwareInfo(); @@ -1470,8 +1471,8 @@ TEST_P(IoctlHelperXeFenceWaitTest, whenCallingVmBindThenWaitUserFenceIsCalled) { if (debuggingEnabled) { executionEnvironment->setDebuggingMode(DebuggingMode::online); } - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); uint64_t fenceAddress = 0x4321; uint64_t fenceValue = 0x789; @@ -1488,26 +1489,26 @@ TEST_P(IoctlHelperXeFenceWaitTest, whenCallingVmBindThenWaitUserFenceIsCalled) { vmBindParams.handle = mockBindInfo.handle; xeIoctlHelper->setVmBindUserFence(vmBindParams, vmBindExtUserFence); - drm.vmBindInputs.clear(); - drm.syncInputs.clear(); - drm.waitUserFenceInputs.clear(); + drm->vmBindInputs.clear(); + drm->syncInputs.clear(); + drm->waitUserFenceInputs.clear(); EXPECT_EQ(0u, vmBindParams.flags); vmBindParams.flags = 0x12345; // set non-zero to check if flags are passed auto expectedFlags = vmBindParams.flags; EXPECT_EQ(0, xeIoctlHelper->vmBind(vmBindParams)); - EXPECT_EQ(1u, drm.vmBindInputs.size()); - EXPECT_EQ(1u, drm.syncInputs.size()); - EXPECT_EQ(1u, drm.waitUserFenceInputs.size()); + EXPECT_EQ(1u, drm->vmBindInputs.size()); + EXPECT_EQ(1u, drm->syncInputs.size()); + EXPECT_EQ(1u, drm->waitUserFenceInputs.size()); auto expectedMask = std::numeric_limits::max(); auto expectedTimeout = debuggingEnabled ? -1 : 1000000000ll; { - auto &sync = drm.syncInputs[0]; + auto &sync = drm->syncInputs[0]; EXPECT_EQ(fenceAddress, sync.addr); EXPECT_EQ(fenceValue, sync.timeline_value); - auto &waitUserFence = drm.waitUserFenceInputs[0]; + auto &waitUserFence = drm->waitUserFenceInputs[0]; EXPECT_EQ(fenceAddress, waitUserFence.addr); EXPECT_EQ(static_cast(DRM_XE_UFENCE_WAIT_OP_EQ), waitUserFence.op); @@ -1517,22 +1518,22 @@ TEST_P(IoctlHelperXeFenceWaitTest, whenCallingVmBindThenWaitUserFenceIsCalled) { EXPECT_EQ(expectedTimeout, waitUserFence.timeout); EXPECT_EQ(0u, waitUserFence.exec_queue_id); - EXPECT_EQ(expectedFlags, drm.vmBindInputs[0].bind.flags); + EXPECT_EQ(expectedFlags, drm->vmBindInputs[0].bind.flags); } - drm.vmBindInputs.clear(); - drm.syncInputs.clear(); - drm.waitUserFenceInputs.clear(); + drm->vmBindInputs.clear(); + drm->syncInputs.clear(); + drm->waitUserFenceInputs.clear(); EXPECT_EQ(0, xeIoctlHelper->vmUnbind(vmBindParams)); - EXPECT_EQ(1u, drm.vmBindInputs.size()); - EXPECT_EQ(1u, drm.syncInputs.size()); - EXPECT_EQ(1u, drm.waitUserFenceInputs.size()); + EXPECT_EQ(1u, drm->vmBindInputs.size()); + EXPECT_EQ(1u, drm->syncInputs.size()); + EXPECT_EQ(1u, drm->waitUserFenceInputs.size()); { - auto &sync = drm.syncInputs[0]; + auto &sync = drm->syncInputs[0]; EXPECT_EQ(fenceAddress, sync.addr); EXPECT_EQ(fenceValue, sync.timeline_value); - auto &waitUserFence = drm.waitUserFenceInputs[0]; + auto &waitUserFence = drm->waitUserFenceInputs[0]; EXPECT_EQ(fenceAddress, waitUserFence.addr); EXPECT_EQ(static_cast(DRM_XE_UFENCE_WAIT_OP_EQ), waitUserFence.op); @@ -1542,7 +1543,7 @@ TEST_P(IoctlHelperXeFenceWaitTest, whenCallingVmBindThenWaitUserFenceIsCalled) { EXPECT_EQ(expectedTimeout, waitUserFence.timeout); EXPECT_EQ(0u, waitUserFence.exec_queue_id); - EXPECT_EQ(expectedFlags, drm.vmBindInputs[0].bind.flags); + EXPECT_EQ(expectedFlags, drm->vmBindInputs[0].bind.flags); } } @@ -1555,8 +1556,8 @@ TEST(IoctlHelperXeTest, givenVmBindWaitUserFenceTimeoutWhenCallingVmBindThenWait debugManager.flags.VmBindWaitUserFenceTimeout.set(5000000000ll); auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); uint64_t fenceAddress = 0x4321; uint64_t fenceValue = 0x789; @@ -1573,26 +1574,26 @@ TEST(IoctlHelperXeTest, givenVmBindWaitUserFenceTimeoutWhenCallingVmBindThenWait vmBindParams.handle = mockBindInfo.handle; xeIoctlHelper->setVmBindUserFence(vmBindParams, vmBindExtUserFence); - drm.vmBindInputs.clear(); - drm.syncInputs.clear(); - drm.waitUserFenceInputs.clear(); + drm->vmBindInputs.clear(); + drm->syncInputs.clear(); + drm->waitUserFenceInputs.clear(); EXPECT_EQ(0u, vmBindParams.flags); vmBindParams.flags = 0x12345; // set non-zero to check if flags are passed auto expectedFlags = vmBindParams.flags; EXPECT_EQ(0, xeIoctlHelper->vmBind(vmBindParams)); - EXPECT_EQ(1u, drm.vmBindInputs.size()); - EXPECT_EQ(1u, drm.syncInputs.size()); - EXPECT_EQ(1u, drm.waitUserFenceInputs.size()); + EXPECT_EQ(1u, drm->vmBindInputs.size()); + EXPECT_EQ(1u, drm->syncInputs.size()); + EXPECT_EQ(1u, drm->waitUserFenceInputs.size()); auto expectedMask = std::numeric_limits::max(); auto expectedTimeout = 5000000000ll; { - auto &sync = drm.syncInputs[0]; + auto &sync = drm->syncInputs[0]; EXPECT_EQ(fenceAddress, sync.addr); EXPECT_EQ(fenceValue, sync.timeline_value); - auto &waitUserFence = drm.waitUserFenceInputs[0]; + auto &waitUserFence = drm->waitUserFenceInputs[0]; EXPECT_EQ(fenceAddress, waitUserFence.addr); EXPECT_EQ(static_cast(DRM_XE_UFENCE_WAIT_OP_EQ), waitUserFence.op); @@ -1602,15 +1603,15 @@ TEST(IoctlHelperXeTest, givenVmBindWaitUserFenceTimeoutWhenCallingVmBindThenWait EXPECT_EQ(expectedTimeout, waitUserFence.timeout); EXPECT_EQ(0u, waitUserFence.exec_queue_id); - EXPECT_EQ(expectedFlags, drm.vmBindInputs[0].bind.flags); + EXPECT_EQ(expectedFlags, drm->vmBindInputs[0].bind.flags); } } TEST(IoctlHelperXeTest, whenGemVmBindFailsThenErrorIsPropagated) { DebugManagerStateRestore restorer; auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); uint64_t fenceAddress = 0x4321; uint64_t fenceValue = 0x789; @@ -1627,22 +1628,22 @@ TEST(IoctlHelperXeTest, whenGemVmBindFailsThenErrorIsPropagated) { vmBindParams.handle = mockBindInfo.handle; xeIoctlHelper->setVmBindUserFence(vmBindParams, vmBindExtUserFence); - drm.waitUserFenceInputs.clear(); + drm->waitUserFenceInputs.clear(); int errorValue = -1; - drm.gemVmBindReturn = errorValue; + drm->gemVmBindReturn = errorValue; EXPECT_EQ(errorValue, xeIoctlHelper->vmBind(vmBindParams)); - EXPECT_EQ(0u, drm.waitUserFenceInputs.size()); + EXPECT_EQ(0u, drm->waitUserFenceInputs.size()); EXPECT_EQ(errorValue, xeIoctlHelper->vmUnbind(vmBindParams)); - EXPECT_EQ(0u, drm.waitUserFenceInputs.size()); + EXPECT_EQ(0u, drm->waitUserFenceInputs.size()); } TEST(IoctlHelperXeTest, whenUserFenceFailsThenErrorIsPropagated) { DebugManagerStateRestore restorer; auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); uint64_t fenceAddress = 0x4321; uint64_t fenceValue = 0x789; @@ -1659,10 +1660,10 @@ TEST(IoctlHelperXeTest, whenUserFenceFailsThenErrorIsPropagated) { vmBindParams.handle = mockBindInfo.handle; xeIoctlHelper->setVmBindUserFence(vmBindParams, vmBindExtUserFence); - drm.waitUserFenceInputs.clear(); + drm->waitUserFenceInputs.clear(); int errorValue = -1; - drm.waitUserFenceReturn = errorValue; + drm->waitUserFenceReturn = errorValue; EXPECT_EQ(errorValue, xeIoctlHelper->vmBind(vmBindParams)); EXPECT_EQ(errorValue, xeIoctlHelper->vmUnbind(vmBindParams)); @@ -1670,8 +1671,8 @@ TEST(IoctlHelperXeTest, whenUserFenceFailsThenErrorIsPropagated) { TEST(IoctlHelperXeTest, WhenSetupIpVersionIsCalledThenIpVersionIsCorrect) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); auto &hwInfo = *executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo(); auto &compilerProductHelper = executionEnvironment->rootDeviceEnvironments[0]->getHelper(); @@ -1684,8 +1685,8 @@ TEST(IoctlHelperXeTest, WhenSetupIpVersionIsCalledThenIpVersionIsCorrect) { TEST(IoctlHelperXeTest, whenXeShowBindTableIsCalledThenBindLogsArePrinted) { DebugManagerStateRestore restorer; auto executionEnvironment = std::make_unique(); - DrmMock drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); BindInfo mockBindInfo{}; mockBindInfo.handle = 1u; @@ -1709,8 +1710,8 @@ TEST(IoctlHelperXeTest, whenXeShowBindTableIsCalledThenBindLogsArePrinted) { TEST(IoctlHelperXeTest, whenFillBindInfoForIpcHandleIsCalledThenBindInfoIsCorrect) { auto executionEnvironment = std::make_unique(); - DrmMock drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); uint32_t handle = 100; size_t size = 1024u; xeIoctlHelper->fillBindInfoForIpcHandle(handle, size); @@ -1725,12 +1726,12 @@ TEST(IoctlHelperXeTest, givenIoctlFailureWhenSetGpuCpuTimesIsCalledThenFalseIsRe auto &rootDeviceEnvironment = *executionEnvironment->rootDeviceEnvironments[0]; rootDeviceEnvironment.osInterface = std::make_unique(); rootDeviceEnvironment.osInterface->setDriverModel(std::make_unique(mockFd, rootDeviceEnvironment)); - DrmMockXe drm{rootDeviceEnvironment}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(rootDeviceEnvironment); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); auto engineInfo = xeIoctlHelper->createEngineInfo(false); ASSERT_NE(nullptr, engineInfo); - drm.testMode(1, -1); + drm->testMode(1, -1); TimeStampData pGpuCpuTime{}; std::unique_ptr osTime = MockOSTimeLinux::create(*rootDeviceEnvironment.osInterface); auto ret = xeIoctlHelper->setGpuCpuTimes(&pGpuCpuTime, osTime.get()); @@ -1743,14 +1744,14 @@ TEST(IoctlHelperXeTest, givenIoctlFailureWhenSetGpuCpuTimesIsCalledThenProperVal auto &rootDeviceEnvironment = *executionEnvironment->rootDeviceEnvironments[0]; rootDeviceEnvironment.osInterface = std::make_unique(); rootDeviceEnvironment.osInterface->setDriverModel(std::make_unique(mockFd, rootDeviceEnvironment)); - DrmMockXe drm{rootDeviceEnvironment}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(rootDeviceEnvironment); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); auto engineInfo = xeIoctlHelper->createEngineInfo(false); ASSERT_NE(nullptr, engineInfo); uint64_t expectedCycles = 100000; uint64_t expectedTimestamp = 100; - auto xeQueryEngineCycles = reinterpret_cast(drm.queryEngineCycles); + auto xeQueryEngineCycles = reinterpret_cast(drm->queryEngineCycles); xeQueryEngineCycles->width = 32; xeQueryEngineCycles->engine_cycles = expectedCycles; xeQueryEngineCycles->cpu_timestamp = expectedTimestamp; @@ -1766,8 +1767,8 @@ TEST(IoctlHelperXeTest, givenIoctlFailureWhenSetGpuCpuTimesIsCalledThenProperVal TEST(IoctlHelperXeTest, whenSetDefaultEngineIsCalledThenProperEngineIsSet) { NEO::HardwareInfo hwInfo = *NEO::defaultHwInfo.get(); auto executionEnvironment = std::make_unique(&hwInfo); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); auto engineInfo = xeIoctlHelper->createEngineInfo(true); ASSERT_NE(nullptr, engineInfo); @@ -1782,8 +1783,8 @@ TEST(IoctlHelperXeTest, whenSetDefaultEngineIsCalledThenProperEngineIsSet) { TEST(IoctlHelperXeTest, whenGettingPreemptionSupportThenTrueIsReturned) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); EXPECT_TRUE(xeIoctlHelper->isPreemptionSupported()); } @@ -1791,11 +1792,11 @@ TEST(IoctlHelperXeTest, whenGettingPreemptionSupportThenTrueIsReturned) { TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenGetCpuCachingModeCalledThenCorrectValueIsReturned) { DebugManagerStateRestore restorer; auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); - auto xeIoctlHelper = std::make_unique(drm); xeIoctlHelper->initialize(); - drm.memoryInfo.reset(xeIoctlHelper->createMemoryInfo().release()); + drm->memoryInfo.reset(xeIoctlHelper->createMemoryInfo().release()); ASSERT_NE(nullptr, xeIoctlHelper); EXPECT_EQ(xeIoctlHelper->getCpuCachingMode(false, false), DRM_XE_GEM_CPU_CACHING_WC); @@ -1813,8 +1814,8 @@ TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenGetCpuCachingModeCalledThenCorrect TEST(IoctlHelperXeTest, whenCallingVmBindThenPatIndexIsSet) { DebugManagerStateRestore restorer; auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); uint64_t fenceAddress = 0x4321; uint64_t fenceValue = 0x789; @@ -1833,33 +1834,32 @@ TEST(IoctlHelperXeTest, whenCallingVmBindThenPatIndexIsSet) { xeIoctlHelper->setVmBindUserFence(vmBindParams, vmBindExtUserFence); vmBindParams.patIndex = expectedPatIndex; - drm.vmBindInputs.clear(); - drm.syncInputs.clear(); - drm.waitUserFenceInputs.clear(); + drm->vmBindInputs.clear(); + drm->syncInputs.clear(); + drm->waitUserFenceInputs.clear(); ASSERT_EQ(0, xeIoctlHelper->vmBind(vmBindParams)); - ASSERT_EQ(1u, drm.vmBindInputs.size()); + ASSERT_EQ(1u, drm->vmBindInputs.size()); - EXPECT_EQ(drm.vmBindInputs[0].bind.pat_index, expectedPatIndex); + EXPECT_EQ(drm->vmBindInputs[0].bind.pat_index, expectedPatIndex); } TEST(IoctlHelperXeTest, whenBindingDrmContextWithoutVirtualEnginesThenProperEnginesAreSelected) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto ioctlHelper = static_cast(drm->getIoctlHelper()); - drm.ioctlHelper = std::make_unique(drm); - auto ioctlHelper = static_cast(drm.ioctlHelper.get()); ioctlHelper->initialize(); - drm.queryEngineInfo(); + drm->queryEngineInfo(); unsigned int expectedValue = DRM_XE_ENGINE_CLASS_COMPUTE; uint16_t tileId = 1u; uint16_t expectedGtId = 2u; - EXPECT_EQ(expectedValue, drm.bindDrmContext(0, tileId, aub_stream::EngineType::ENGINE_CCS, true)); + EXPECT_EQ(expectedValue, drm->bindDrmContext(0, tileId, aub_stream::EngineType::ENGINE_CCS, true)); EXPECT_EQ(1u, ioctlHelper->contextParamEngine.size()); - auto expectedEngine = drm.getEngineInfo()->getEngineInstance(1, aub_stream::EngineType::ENGINE_CCS); - auto notExpectedEngine = drm.getEngineInfo()->getEngineInstance(0, aub_stream::EngineType::ENGINE_CCS); + auto expectedEngine = drm->getEngineInfo()->getEngineInstance(1, aub_stream::EngineType::ENGINE_CCS); + auto notExpectedEngine = drm->getEngineInfo()->getEngineInstance(0, aub_stream::EngineType::ENGINE_CCS); EXPECT_NE(expectedEngine->engineInstance, notExpectedEngine->engineInstance); EXPECT_EQ(expectedEngine->engineInstance, ioctlHelper->contextParamEngine[0].engine_instance); EXPECT_EQ(expectedEngine->engineClass, ioctlHelper->contextParamEngine[0].engine_class); @@ -1868,31 +1868,30 @@ TEST(IoctlHelperXeTest, whenBindingDrmContextWithoutVirtualEnginesThenProperEngi TEST(IoctlHelperXeTest, whenBindingDrmContextWithVirtualEnginesThenProperEnginesAreSelected) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto ioctlHelper = static_cast(drm->getIoctlHelper()); - drm.ioctlHelper = std::make_unique(drm); - auto ioctlHelper = static_cast(drm.ioctlHelper.get()); ioctlHelper->initialize(); - drm.queryEngineInfo(); + drm->queryEngineInfo(); executionEnvironment->rootDeviceEnvironments[0]->getMutableHardwareInfo()->gtSystemInfo.CCSInfo.NumberOfCCSEnabled = 2; unsigned int expectedValue = DRM_XE_ENGINE_CLASS_COMPUTE; uint16_t tileId = 1u; uint16_t expectedGtId = 2u; - EXPECT_EQ(expectedValue, drm.bindDrmContext(0, tileId, aub_stream::EngineType::ENGINE_CCS, false)); + EXPECT_EQ(expectedValue, drm->bindDrmContext(0, tileId, aub_stream::EngineType::ENGINE_CCS, false)); EXPECT_EQ(2u, ioctlHelper->contextParamEngine.size()); { - auto expectedEngine = drm.getEngineInfo()->getEngineInstance(1, aub_stream::EngineType::ENGINE_CCS); - auto notExpectedEngine = drm.getEngineInfo()->getEngineInstance(0, aub_stream::EngineType::ENGINE_CCS); + auto expectedEngine = drm->getEngineInfo()->getEngineInstance(1, aub_stream::EngineType::ENGINE_CCS); + auto notExpectedEngine = drm->getEngineInfo()->getEngineInstance(0, aub_stream::EngineType::ENGINE_CCS); EXPECT_NE(expectedEngine->engineInstance, notExpectedEngine->engineInstance); EXPECT_EQ(expectedEngine->engineInstance, ioctlHelper->contextParamEngine[0].engine_instance); EXPECT_EQ(expectedEngine->engineClass, ioctlHelper->contextParamEngine[0].engine_class); EXPECT_EQ(expectedGtId, ioctlHelper->contextParamEngine[0].gt_id); } { - auto expectedEngine = drm.getEngineInfo()->getEngineInstance(1, aub_stream::EngineType::ENGINE_CCS1); - auto notExpectedEngine = drm.getEngineInfo()->getEngineInstance(0, aub_stream::EngineType::ENGINE_CCS1); + auto expectedEngine = drm->getEngineInfo()->getEngineInstance(1, aub_stream::EngineType::ENGINE_CCS1); + auto notExpectedEngine = drm->getEngineInfo()->getEngineInstance(0, aub_stream::EngineType::ENGINE_CCS1); EXPECT_NE(expectedEngine->engineInstance, notExpectedEngine->engineInstance); EXPECT_EQ(expectedEngine->engineInstance, ioctlHelper->contextParamEngine[1].engine_instance); EXPECT_EQ(expectedEngine->engineClass, ioctlHelper->contextParamEngine[1].engine_class); @@ -1902,11 +1901,11 @@ TEST(IoctlHelperXeTest, whenBindingDrmContextWithVirtualEnginesThenProperEngines TEST(IoctlHelperXeTest, whenCallingGetResetStatsThenSuccessIsReturned) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); - auto xeIoctlHelper = std::make_unique(drm); xeIoctlHelper->initialize(); - drm.memoryInfo.reset(xeIoctlHelper->createMemoryInfo().release()); + drm->memoryInfo.reset(xeIoctlHelper->createMemoryInfo().release()); ASSERT_NE(nullptr, xeIoctlHelper); ResetStats resetStats{}; @@ -1917,9 +1916,8 @@ TEST(IoctlHelperXeTest, whenCallingGetResetStatsThenSuccessIsReturned) { TEST(IoctlHelperXeTest, whenCallingGetStatusAndFlagsForResetStatsThenZeroIsReturned) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - - auto ioctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto ioctlHelper = static_cast(drm->getIoctlHelper()); EXPECT_EQ(0u, ioctlHelper->getStatusForResetStats(true)); EXPECT_EQ(0u, ioctlHelper->getStatusForResetStats(false)); @@ -1929,9 +1927,8 @@ TEST(IoctlHelperXeTest, whenCallingGetStatusAndFlagsForResetStatsThenZeroIsRetur TEST(IoctlHelperXeTest, whenInitializeThenProperHwInfoIsSet) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - - drm.ioctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto ioctlHelper = static_cast(drm->getIoctlHelper()); auto hwInfo = executionEnvironment->rootDeviceEnvironments[0]->getMutableHardwareInfo(); @@ -1939,10 +1936,9 @@ TEST(IoctlHelperXeTest, whenInitializeThenProperHwInfoIsSet) { hwInfo->platform.usRevId = 0; hwInfo->capabilityTable.gpuAddressSpace = 0; - auto ioctlHelper = static_cast(drm.ioctlHelper.get()); ioctlHelper->initialize(); - EXPECT_EQ(drm.revId, hwInfo->platform.usRevId); - EXPECT_EQ(drm.devId, hwInfo->platform.usDeviceID); + EXPECT_EQ(drm->revId, hwInfo->platform.usRevId); + EXPECT_EQ(drm->devId, hwInfo->platform.usDeviceID); EXPECT_EQ((1ull << 48) - 1, hwInfo->capabilityTable.gpuAddressSpace); EXPECT_EQ(static_cast(DrmMockXe::mockDefaultCxlType), hwInfo->capabilityTable.cxlType); @@ -1951,11 +1947,10 @@ TEST(IoctlHelperXeTest, whenInitializeThenProperHwInfoIsSet) { TEST(IoctlHelperXeTest, givenMultipleBindInfosWhenGemCloseIsCalledThenProperHandleIsTaken) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto ioctlHelper = static_cast(drm->getIoctlHelper()); - auto ioctlHelper = std::make_unique(drm); - - drm.gemCloseCalled = 0; + drm->gemCloseCalled = 0; BindInfo bindInfo{}; @@ -1974,35 +1969,34 @@ TEST(IoctlHelperXeTest, givenMultipleBindInfosWhenGemCloseIsCalledThenProperHand gemClose.handle = 0; gemClose.userptr = 2; EXPECT_EQ(0, ioctlHelper->ioctl(DrmIoctl::gemClose, &gemClose)); - EXPECT_EQ(0, drm.gemCloseCalled); + EXPECT_EQ(0, drm->gemCloseCalled); gemClose.handle = 2; gemClose.userptr = 0; EXPECT_EQ(0, ioctlHelper->ioctl(DrmIoctl::gemClose, &gemClose)); - EXPECT_EQ(1, drm.gemCloseCalled); - EXPECT_EQ(2u, drm.passedGemClose.handle); + EXPECT_EQ(1, drm->gemCloseCalled); + EXPECT_EQ(2u, drm->passedGemClose.handle); gemClose.handle = 0; gemClose.userptr = 1; EXPECT_EQ(0, ioctlHelper->ioctl(DrmIoctl::gemClose, &gemClose)); - EXPECT_EQ(1, drm.gemCloseCalled); + EXPECT_EQ(1, drm->gemCloseCalled); gemClose.handle = 1; gemClose.userptr = 0; EXPECT_EQ(0, ioctlHelper->ioctl(DrmIoctl::gemClose, &gemClose)); - EXPECT_EQ(2, drm.gemCloseCalled); - EXPECT_EQ(1u, drm.passedGemClose.handle); + EXPECT_EQ(2, drm->gemCloseCalled); + EXPECT_EQ(1u, drm->passedGemClose.handle); EXPECT_EQ(0ul, ioctlHelper->bindInfo.size()); } TEST(IoctlHelperXeTest, givenMultipleBindInfosWhenVmBindIsCalledThenProperHandleIsTaken) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto ioctlHelper = static_cast(drm->getIoctlHelper()); - auto ioctlHelper = std::make_unique(drm); - - drm.vmBindInputs.clear(); + drm->vmBindInputs.clear(); BindInfo bindInfo{}; @@ -2025,58 +2019,56 @@ TEST(IoctlHelperXeTest, givenMultipleBindInfosWhenVmBindIsCalledThenProperHandle vmBindParams.userptr = 2; EXPECT_EQ(0, ioctlHelper->vmBind(vmBindParams)); - EXPECT_EQ(1ul, drm.vmBindInputs.size()); - EXPECT_EQ(0u, drm.vmBindInputs[0].bind.obj); - EXPECT_EQ(2u, drm.vmBindInputs[0].bind.obj_offset); - drm.vmBindInputs.clear(); + EXPECT_EQ(1ul, drm->vmBindInputs.size()); + EXPECT_EQ(0u, drm->vmBindInputs[0].bind.obj); + EXPECT_EQ(2u, drm->vmBindInputs[0].bind.obj_offset); + drm->vmBindInputs.clear(); vmBindParams.handle = 2; vmBindParams.userptr = 0; EXPECT_EQ(0, ioctlHelper->vmBind(vmBindParams)); - EXPECT_EQ(1ul, drm.vmBindInputs.size()); - EXPECT_EQ(2u, drm.vmBindInputs[0].bind.obj); - EXPECT_EQ(0u, drm.vmBindInputs[0].bind.obj_offset); - drm.vmBindInputs.clear(); + EXPECT_EQ(1ul, drm->vmBindInputs.size()); + EXPECT_EQ(2u, drm->vmBindInputs[0].bind.obj); + EXPECT_EQ(0u, drm->vmBindInputs[0].bind.obj_offset); + drm->vmBindInputs.clear(); vmBindParams.handle = 0; vmBindParams.userptr = 1; EXPECT_EQ(0, ioctlHelper->vmBind(vmBindParams)); - EXPECT_EQ(1ul, drm.vmBindInputs.size()); - EXPECT_EQ(0u, drm.vmBindInputs[0].bind.obj); - EXPECT_EQ(1u, drm.vmBindInputs[0].bind.obj_offset); - drm.vmBindInputs.clear(); + EXPECT_EQ(1ul, drm->vmBindInputs.size()); + EXPECT_EQ(0u, drm->vmBindInputs[0].bind.obj); + EXPECT_EQ(1u, drm->vmBindInputs[0].bind.obj_offset); + drm->vmBindInputs.clear(); vmBindParams.handle = 1; vmBindParams.userptr = 0; EXPECT_EQ(0, ioctlHelper->vmBind(vmBindParams)); - EXPECT_EQ(1ul, drm.vmBindInputs.size()); - EXPECT_EQ(1u, drm.vmBindInputs[0].bind.obj); - EXPECT_EQ(0u, drm.vmBindInputs[0].bind.obj_offset); - drm.vmBindInputs.clear(); + EXPECT_EQ(1ul, drm->vmBindInputs.size()); + EXPECT_EQ(1u, drm->vmBindInputs[0].bind.obj); + EXPECT_EQ(0u, drm->vmBindInputs[0].bind.obj_offset); + drm->vmBindInputs.clear(); vmBindParams.handle = 0; vmBindParams.userptr = 0; EXPECT_NE(0, ioctlHelper->vmBind(vmBindParams)); - EXPECT_EQ(0ul, drm.vmBindInputs.size()); + EXPECT_EQ(0ul, drm->vmBindInputs.size()); ioctlHelper->bindInfo.clear(); } TEST(IoctlHelperXeTest, givenLowPriorityContextWhenSettingPropertiesThenCorrectIndexIsUsedAndReturend) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeHelper = std::make_unique(drm); - auto mockXeHelper = xeHelper.get(); - drm.ioctlHelper = std::move(xeHelper); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); - OsContextLinux osContext(drm, 0, 5u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::lowPriority})); + OsContextLinux osContext(*drm, 0, 5u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::lowPriority})); std::array extProperties{}; uint32_t extIndex = 1; - mockXeHelper->setContextProperties(osContext, &extProperties, extIndex); + xeIoctlHelper->setContextProperties(osContext, &extProperties, extIndex); EXPECT_EQ(reinterpret_cast(&extProperties[1]), extProperties[0].base.next_extension); EXPECT_EQ(0u, extProperties[1].base.next_extension); @@ -2085,27 +2077,23 @@ TEST(IoctlHelperXeTest, givenLowPriorityContextWhenSettingPropertiesThenCorrectI TEST(IoctlHelperXeTest, givenLowPriorityContextWhenCreatingDrmContextThenExtPropertyIsSetCorrectly) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); - drm.ioctlHelper = std::make_unique(drm); - drm.queryEngineInfo(); + drm->queryEngineInfo(); executionEnvironment->rootDeviceEnvironments[0]->getMutableHardwareInfo()->gtSystemInfo.CCSInfo.NumberOfCCSEnabled = 1; - OsContextLinux osContext(drm, 0, 5u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::lowPriority})); + OsContextLinux osContext(*drm, 0, 5u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::lowPriority})); osContext.ensureContextInitialized(false); - ASSERT_LE(1u, drm.execQueueProperties.size()); - EXPECT_EQ(static_cast(DRM_XE_EXEC_QUEUE_SET_PROPERTY_PRIORITY), drm.execQueueProperties[0].property); - EXPECT_EQ(0u, drm.execQueueProperties[0].value); + ASSERT_LE(1u, drm->execQueueProperties.size()); + EXPECT_EQ(static_cast(DRM_XE_EXEC_QUEUE_SET_PROPERTY_PRIORITY), drm->execQueueProperties[0].property); + EXPECT_EQ(0u, drm->execQueueProperties[0].value); } TEST(IoctlHelperXeTest, whenInitializeThenGtListDataIsQueried) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - - drm.ioctlHelper = std::make_unique(drm); - - auto ioctlHelper = static_cast(drm.ioctlHelper.get()); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto ioctlHelper = static_cast(drm->getIoctlHelper()); EXPECT_EQ(nullptr, ioctlHelper->xeGtListData); EXPECT_TRUE(ioctlHelper->queryGtListData.empty()); @@ -2115,26 +2103,23 @@ TEST(IoctlHelperXeTest, whenInitializeThenGtListDataIsQueried) { EXPECT_NE(nullptr, ioctlHelper->xeGtListData); EXPECT_FALSE(ioctlHelper->queryGtListData.empty()); EXPECT_EQ(castToUint64(ioctlHelper->queryGtListData.data()), castToUint64(ioctlHelper->xeGtListData)); - EXPECT_EQ(drm.queryGtList.size(), ioctlHelper->queryGtListData.size()); + EXPECT_EQ(drm->queryGtList.size(), ioctlHelper->queryGtListData.size()); } TEST(IoctlHelperXeTest, givenNoGtListDataWhenInitializeThenInitializationFails) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto ioctlHelper = static_cast(drm->getIoctlHelper()); - drm.ioctlHelper = std::make_unique(drm); - - auto ioctlHelper = static_cast(drm.ioctlHelper.get()); - - drm.queryGtList.resize(0); + drm->queryGtList.resize(0); EXPECT_FALSE(ioctlHelper->initialize()); } TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallingGetFlagsForVmBindThenExpectedValueIsReturned) { auto executionEnvironment = std::make_unique(); - DrmMock drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = std::make_unique(*drm); ASSERT_NE(nullptr, xeIoctlHelper); for (auto &bindCapture : ::testing::Bool()) { @@ -2158,8 +2143,8 @@ TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallingGetFlagsForVmBindThenExpect TEST(IoctlHelperXeTest, whenGetFdFromVmExportIsCalledThenFalseIsReturned) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeIoctlHelper = std::make_unique(drm); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); uint32_t vmId = 0, flags = 0; int32_t fd = 0; EXPECT_FALSE(xeIoctlHelper->getFdFromVmExport(vmId, flags, &fd)); @@ -2167,17 +2152,15 @@ TEST(IoctlHelperXeTest, whenGetFdFromVmExportIsCalledThenFalseIsReturned) { TEST(IoctlHelperXeTest, whenCheckingGpuHangThenBanPropertyIsQueried) { auto executionEnvironment = std::make_unique(); - DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; - auto xeHelper = std::make_unique(drm); - drm.ioctlHelper = std::move(xeHelper); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); - MockOsContextLinux osContext(drm, 0, 5u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::regular})); + MockOsContextLinux osContext(*drm, 0, 5u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::regular})); osContext.drmContextIds.push_back(0); - drm.execQueueBanPropertyReturn = 0; - EXPECT_FALSE(drm.checkResetStatus(osContext)); + drm->execQueueBanPropertyReturn = 0; + EXPECT_FALSE(drm->checkResetStatus(osContext)); EXPECT_FALSE(osContext.isHangDetected()); - drm.execQueueBanPropertyReturn = 1; - EXPECT_TRUE(drm.checkResetStatus(osContext)); + drm->execQueueBanPropertyReturn = 1; + EXPECT_TRUE(drm->checkResetStatus(osContext)); EXPECT_TRUE(osContext.isHangDetected()); } diff --git a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.h b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.h index e55655823b..a4511d8b5c 100644 --- a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.h +++ b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.h @@ -77,93 +77,13 @@ inline constexpr int testValueVmId = 0x5764; inline constexpr int testValueMapOff = 0x7788; inline constexpr int testValuePrime = 0x4321; inline constexpr uint32_t testValueGemCreate = 0x8273; -class DrmMockXe : public DrmMockCustom { - public: - DrmMockXe(RootDeviceEnvironment &rootDeviceEnvironment) : DrmMockCustom(rootDeviceEnvironment) { +struct DrmMockXe : public DrmMockCustom { - auto xeQueryConfig = reinterpret_cast(queryConfig); - xeQueryConfig->num_params = 6; - xeQueryConfig->info[DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_ID] = (revId << 16) | devId; - xeQueryConfig->info[DRM_XE_QUERY_CONFIG_VA_BITS] = 48; - xeQueryConfig->info[DRM_XE_QUERY_CONFIG_MAX_EXEC_QUEUE_PRIORITY] = mockMaxExecQueuePriority; + static auto create(RootDeviceEnvironment &rootDeviceEnvironment) { + auto drm = std::unique_ptr(new DrmMockXe{rootDeviceEnvironment}); + drm->initInstance(); - auto xeQueryEngines = reinterpret_cast(queryEngines); - xeQueryEngines->num_engines = 11; - xeQueryEngines->engines[0] = {{DRM_XE_ENGINE_CLASS_RENDER, 0, 0}, {}}; - xeQueryEngines->engines[1] = {{DRM_XE_ENGINE_CLASS_COPY, 1, 0}, {}}; - xeQueryEngines->engines[2] = {{DRM_XE_ENGINE_CLASS_COPY, 2, 0}, {}}; - xeQueryEngines->engines[3] = {{DRM_XE_ENGINE_CLASS_COMPUTE, 3, 0}, {}}; - xeQueryEngines->engines[4] = {{DRM_XE_ENGINE_CLASS_COMPUTE, 4, 0}, {}}; - xeQueryEngines->engines[5] = {{DRM_XE_ENGINE_CLASS_COMPUTE, 5, 1}, {}}; - xeQueryEngines->engines[6] = {{DRM_XE_ENGINE_CLASS_COMPUTE, 6, 1}, {}}; - xeQueryEngines->engines[7] = {{DRM_XE_ENGINE_CLASS_COMPUTE, 7, 1}, {}}; - xeQueryEngines->engines[8] = {{DRM_XE_ENGINE_CLASS_COMPUTE, 8, 1}, {}}; - xeQueryEngines->engines[9] = {{DRM_XE_ENGINE_CLASS_VIDEO_DECODE, 9, 1}, {}}; - xeQueryEngines->engines[10] = {{DRM_XE_ENGINE_CLASS_VIDEO_ENHANCE, 10, 0}, {}}; - - auto xeQueryMemUsage = reinterpret_cast(queryMemUsage); - xeQueryMemUsage->num_mem_regions = 3; - xeQueryMemUsage->mem_regions[0] = { - DRM_XE_MEM_REGION_CLASS_VRAM, // class - 1, // instance - MemoryConstants::pageSize, // min page size - 2 * MemoryConstants::gigaByte, // total size - MemoryConstants::megaByte // used size - }; - xeQueryMemUsage->mem_regions[1] = { - DRM_XE_MEM_REGION_CLASS_SYSMEM, // class - 0, // instance - MemoryConstants::pageSize, // min page size - MemoryConstants::gigaByte, // total size - MemoryConstants::kiloByte // used size - }; - xeQueryMemUsage->mem_regions[2] = { - DRM_XE_MEM_REGION_CLASS_VRAM, // class - 2, // instance - MemoryConstants::pageSize, // min page size - 4 * MemoryConstants::gigaByte, // total size - MemoryConstants::gigaByte // used size - }; - - queryGtList.resize(49); // 1 qword for num gts and 12 qwords per gt - auto xeQueryGtList = reinterpret_cast(queryGtList.begin()); - xeQueryGtList->num_gt = 4; - xeQueryGtList->gt_list[0] = { - DRM_XE_QUERY_GT_TYPE_MAIN, // type - 0, // tile_id - 0, // gt_id - {0}, // padding - mockTimestampFrequency, // reference_clock - 0b100, // native mem regions - 0x011, // slow mem regions - }; - xeQueryGtList->gt_list[1] = { - DRM_XE_QUERY_GT_TYPE_MEDIA, // type - 1, // tile_id - 1, // gt_id - {0}, // padding - mockTimestampFrequency, // reference_clock - 0b001, // native mem regions - 0x110, // slow mem regions - }; - xeQueryGtList->gt_list[2] = { - DRM_XE_QUERY_GT_TYPE_MAIN, // type - 1, // tile_id - 2, // gt_id - {0}, // padding - mockTimestampFrequency, // reference_clock - 0b010, // native mem regions - 0x101, // slow mem regions - }; - xeQueryGtList->gt_list[3] = { - DRM_XE_QUERY_GT_TYPE_MAIN, // type - 2, // tile_id - 3, // gt_id - {0}, // padding - mockTimestampFrequency, // reference_clock - 0b100, // native mem regions - 0x011, // slow mem regions - }; + return drm; } void testMode(int f, int a = 0) { @@ -393,4 +313,106 @@ class DrmMockXe : public DrmMockCustom { uint16_t createParamsCpuCaching = 0u; uint32_t createParamsPlacement = 0u; bool ioctlCalled = false; + + protected: + // Don't call directly, use the create() function + DrmMockXe(RootDeviceEnvironment &rootDeviceEnvironment) + : DrmMockCustom(std::make_unique(mockFd, mockPciPath), rootDeviceEnvironment) {} + + virtual void initInstance() { + this->reset(); + auto &gfxCoreHelper = rootDeviceEnvironment.getHelper(); + this->ioctlExpected.contextCreate = static_cast(gfxCoreHelper.getGpgpuEngineInstances(rootDeviceEnvironment).size()); + this->ioctlExpected.contextDestroy = this->ioctlExpected.contextCreate.load(); + + this->ioctlHelper = std::make_unique(*this); + + this->createVirtualMemoryAddressSpace(NEO::GfxCoreHelper::getSubDevicesCount(rootDeviceEnvironment.getHardwareInfo())); + this->isVmBindAvailable(); + + auto xeQueryConfig = reinterpret_cast(this->queryConfig); + xeQueryConfig->num_params = 6; + xeQueryConfig->info[DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_ID] = (this->revId << 16) | this->devId; + xeQueryConfig->info[DRM_XE_QUERY_CONFIG_VA_BITS] = 48; + xeQueryConfig->info[DRM_XE_QUERY_CONFIG_MAX_EXEC_QUEUE_PRIORITY] = mockMaxExecQueuePriority; + + auto xeQueryEngines = reinterpret_cast(this->queryEngines); + xeQueryEngines->num_engines = 11; + xeQueryEngines->engines[0] = {{DRM_XE_ENGINE_CLASS_RENDER, 0, 0}, {}}; + xeQueryEngines->engines[1] = {{DRM_XE_ENGINE_CLASS_COPY, 1, 0}, {}}; + xeQueryEngines->engines[2] = {{DRM_XE_ENGINE_CLASS_COPY, 2, 0}, {}}; + xeQueryEngines->engines[3] = {{DRM_XE_ENGINE_CLASS_COMPUTE, 3, 0}, {}}; + xeQueryEngines->engines[4] = {{DRM_XE_ENGINE_CLASS_COMPUTE, 4, 0}, {}}; + xeQueryEngines->engines[5] = {{DRM_XE_ENGINE_CLASS_COMPUTE, 5, 1}, {}}; + xeQueryEngines->engines[6] = {{DRM_XE_ENGINE_CLASS_COMPUTE, 6, 1}, {}}; + xeQueryEngines->engines[7] = {{DRM_XE_ENGINE_CLASS_COMPUTE, 7, 1}, {}}; + xeQueryEngines->engines[8] = {{DRM_XE_ENGINE_CLASS_COMPUTE, 8, 1}, {}}; + xeQueryEngines->engines[9] = {{DRM_XE_ENGINE_CLASS_VIDEO_DECODE, 9, 1}, {}}; + xeQueryEngines->engines[10] = {{DRM_XE_ENGINE_CLASS_VIDEO_ENHANCE, 10, 0}, {}}; + + auto xeQueryMemUsage = reinterpret_cast(this->queryMemUsage); + xeQueryMemUsage->num_mem_regions = 3; + xeQueryMemUsage->mem_regions[0] = { + DRM_XE_MEM_REGION_CLASS_VRAM, // class + 1, // instance + MemoryConstants::pageSize, // min page size + 2 * MemoryConstants::gigaByte, // total size + MemoryConstants::megaByte // used size + }; + xeQueryMemUsage->mem_regions[1] = { + DRM_XE_MEM_REGION_CLASS_SYSMEM, // class + 0, // instance + MemoryConstants::pageSize, // min page size + MemoryConstants::gigaByte, // total size + MemoryConstants::kiloByte // used size + }; + xeQueryMemUsage->mem_regions[2] = { + DRM_XE_MEM_REGION_CLASS_VRAM, // class + 2, // instance + MemoryConstants::pageSize, // min page size + 4 * MemoryConstants::gigaByte, // total size + MemoryConstants::gigaByte // used size + }; + + this->queryGtList.resize(49); // 1 qword for num gts and 12 qwords per gt + auto xeQueryGtList = reinterpret_cast(this->queryGtList.begin()); + xeQueryGtList->num_gt = 4; + xeQueryGtList->gt_list[0] = { + DRM_XE_QUERY_GT_TYPE_MAIN, // type + 0, // tile_id + 0, // gt_id + {0}, // padding + mockTimestampFrequency, // reference_clock + 0b100, // native mem regions + 0x011, // slow mem regions + }; + xeQueryGtList->gt_list[1] = { + DRM_XE_QUERY_GT_TYPE_MEDIA, // type + 1, // tile_id + 1, // gt_id + {0}, // padding + mockTimestampFrequency, // reference_clock + 0b001, // native mem regions + 0x110, // slow mem regions + }; + xeQueryGtList->gt_list[2] = { + DRM_XE_QUERY_GT_TYPE_MAIN, // type + 1, // tile_id + 2, // gt_id + {0}, // padding + mockTimestampFrequency, // reference_clock + 0b010, // native mem regions + 0x101, // slow mem regions + }; + xeQueryGtList->gt_list[3] = { + DRM_XE_QUERY_GT_TYPE_MAIN, // type + 2, // tile_id + 3, // gt_id + {0}, // padding + mockTimestampFrequency, // reference_clock + 0b100, // native mem regions + 0x011, // slow mem regions + }; + this->reset(); + } };