From 005b273b1ed0fce53efcb6af31a9bd1dd97223c6 Mon Sep 17 00:00:00 2001 From: Maciej Bielski Date: Tue, 9 Jul 2024 22:01:01 +0000 Subject: [PATCH] test: stop abusing ctors in DrmMockCustom and derived types Calling virtual functions from within constructors is incorrect, the virtualization mechanism does not work until a constructor completes. So, instead of performing many operations in constructors, make them small and use static `create()` methods to construct the object properly and only then perform additional setup. Mocks are a prominent example how such practice degrades the code. A function called from a constructor is basically unmockable. Despite being overriden by derived type (to alter the execution path as per needs of a given test-case) the parent versions are always called. This was making test development more and more painful as at some point there is no hack to compensate for the lack of standard mechanism. Related-To: NEO-9754 Signed-off-by: Maciej Bielski --- .../xe/debug_session_fixtures_linux_xe.cpp | 2 +- .../linux/cl_drm_memory_manager_tests.cpp | 2 +- .../common/mocks/linux/debug_mock_drm_xe.h | 29 +- .../mocks/linux/mock_drm_memory_manager.cpp | 6 +- .../linux/device_command_stream_fixture.cpp | 30 +- .../linux/device_command_stream_fixture.h | 12 +- .../device_command_stream_fixture_prelim.h | 25 +- .../linux/drm_buffer_object_fixture.h | 4 +- .../linux/drm_command_stream_fixture.h | 4 +- .../linux/drm_memory_manager_fixture.cpp | 8 +- .../drm_memory_manager_prelim_fixtures.h | 4 +- .../linux/drm_buffer_object_tests.cpp | 10 +- .../linux/drm_command_stream_mm_tests.cpp | 8 +- .../linux/drm_command_stream_tests_1.cpp | 2 +- ...rm_command_stream_xehp_and_later_tests.cpp | 4 +- ...memory_manager_localmem_upstream_tests.cpp | 4 +- .../linux/drm_memory_manager_tests.cpp | 24 +- .../linux/ioctl_helper_tests_prelim.cpp | 4 +- .../linux/ioctl_helper_tests_upstream.cpp | 4 +- .../linux/os_context_linux_tests.cpp | 4 +- .../os_interface/linux/os_time_test.cpp | 8 +- .../xe/ioctl_helper_xe_debugger_tests.cpp | 200 ++++--- .../linux/xe/ioctl_helper_xe_perf_tests.cpp | 40 +- .../linux/xe/ioctl_helper_xe_tests.cpp | 561 +++++++++--------- .../linux/xe/ioctl_helper_xe_tests.h | 192 +++--- 25 files changed, 619 insertions(+), 572 deletions(-) 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(); + } };