From 432591a88a450b188b8faa118a1b297400a9b55c Mon Sep 17 00:00:00 2001 From: Mateusz Hoppe Date: Tue, 19 Mar 2019 13:53:55 +0100 Subject: [PATCH] Adding MemoryInfo to Drm - call queryMemoryInfo on Drm::create() Change-Id: Ib0532894f271bd4ab3dcbb281d0bddf2a01d4afe Signed-off-by: Mateusz Hoppe --- runtime/dll/linux/drm_neo_create.cpp | 2 ++ runtime/os_interface/linux/CMakeLists.txt | 2 ++ runtime/os_interface/linux/drm_neo.h | 4 +++ .../linux/drm_neo_memory_info.cpp | 15 +++++++++ runtime/os_interface/linux/memory_info.h | 19 +++++++++++ unit_tests/os_interface/linux/CMakeLists.txt | 1 + .../linux/drm_memory_info_tests.cpp | 32 +++++++++++++++++++ unit_tests/os_interface/linux/drm_mock.h | 4 +++ 8 files changed, 79 insertions(+) create mode 100644 runtime/os_interface/linux/drm_neo_memory_info.cpp create mode 100644 runtime/os_interface/linux/memory_info.h create mode 100644 unit_tests/os_interface/linux/drm_memory_info_tests.cpp diff --git a/runtime/dll/linux/drm_neo_create.cpp b/runtime/dll/linux/drm_neo_create.cpp index 31f2b8c87c..6a5e102743 100644 --- a/runtime/dll/linux/drm_neo_create.cpp +++ b/runtime/dll/linux/drm_neo_create.cpp @@ -188,6 +188,8 @@ Drm *Drm::create(int32_t deviceOrdinal) { printDebugString(DebugManager.flags.PrintDebugMessages.get(), stderr, "%s", "WARNING: Failed to request OCL Turbo Boost\n"); } + drmObject->queryMemoryInfo(); + drms[deviceOrdinal % drms.size()] = drmObject.release(); return drms[deviceOrdinal % drms.size()]; } diff --git a/runtime/os_interface/linux/CMakeLists.txt b/runtime/os_interface/linux/CMakeLists.txt index db0d0bd5ee..9f133ae950 100644 --- a/runtime/os_interface/linux/CMakeLists.txt +++ b/runtime/os_interface/linux/CMakeLists.txt @@ -32,9 +32,11 @@ set(RUNTIME_SRCS_OS_INTERFACE_LINUX ${CMAKE_CURRENT_SOURCE_DIR}/drm_neo.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drm_neo.h ${CMAKE_CURRENT_SOURCE_DIR}/drm_neo_create.cpp + ${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/drm_neo_memory_info.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drm_null_device.h ${CMAKE_CURRENT_SOURCE_DIR}/hw_info_config.cpp ${CMAKE_CURRENT_SOURCE_DIR}/linux_inc.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/memory_info.h ${CMAKE_CURRENT_SOURCE_DIR}/os_context_linux.cpp ${CMAKE_CURRENT_SOURCE_DIR}/os_context_linux.h ${CMAKE_CURRENT_SOURCE_DIR}/os_inc.h diff --git a/runtime/os_interface/linux/drm_neo.h b/runtime/os_interface/linux/drm_neo.h index 3b48e2b129..6dbde6b85f 100644 --- a/runtime/os_interface/linux/drm_neo.h +++ b/runtime/os_interface/linux/drm_neo.h @@ -6,12 +6,14 @@ */ #pragma once +#include "runtime/os_interface/linux/memory_info.h" #include "runtime/utilities/api_intercept.h" #include "igfxfmid.h" #include #include +#include #include #include #include @@ -68,6 +70,7 @@ class Drm { MOCKABLE_VIRTUAL int getErrno(); void setSimplifiedMocsTableUsage(bool value); bool getSimplifiedMocsTableUsage() const; + void queryMemoryInfo(); protected: bool useSimplifiedMocsTable = false; @@ -77,6 +80,7 @@ class Drm { int revisionId; GTTYPE eGtType; Drm(int fd) : fd(fd), deviceId(0), revisionId(0), eGtType(GTTYPE_UNDEFINED) {} + std::unique_ptr memoryInfo; static bool isi915Version(int fd); static int getDeviceFd(const int devType); diff --git a/runtime/os_interface/linux/drm_neo_memory_info.cpp b/runtime/os_interface/linux/drm_neo_memory_info.cpp new file mode 100644 index 0000000000..eb3c892a02 --- /dev/null +++ b/runtime/os_interface/linux/drm_neo_memory_info.cpp @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2019 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "drm_neo.h" + +namespace OCLRT { + +void Drm::queryMemoryInfo() { +} + +} // namespace OCLRT diff --git a/runtime/os_interface/linux/memory_info.h b/runtime/os_interface/linux/memory_info.h new file mode 100644 index 0000000000..5b89bd9d8b --- /dev/null +++ b/runtime/os_interface/linux/memory_info.h @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2019 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#pragma once + +namespace OCLRT { + +struct MemoryInfo { + MemoryInfo() = default; + virtual ~MemoryInfo() = 0; +}; + +inline MemoryInfo::~MemoryInfo(){}; + +} // namespace OCLRT diff --git a/unit_tests/os_interface/linux/CMakeLists.txt b/unit_tests/os_interface/linux/CMakeLists.txt index 6c289ab227..c80fdf3ecd 100644 --- a/unit_tests/os_interface/linux/CMakeLists.txt +++ b/unit_tests/os_interface/linux/CMakeLists.txt @@ -19,6 +19,7 @@ set(IGDRCL_SRCS_tests_os_interface_linux ${CMAKE_CURRENT_SOURCE_DIR}/drm_command_stream_tests.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drm_gem_close_worker_tests.cpp ${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/drm_mapper_tests.cpp + ${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/drm_memory_info_tests.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drm_memory_manager_tests.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drm_memory_manager_tests.h ${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/drm_memory_manager_allocate_in_device_pool_tests.cpp diff --git a/unit_tests/os_interface/linux/drm_memory_info_tests.cpp b/unit_tests/os_interface/linux/drm_memory_info_tests.cpp new file mode 100644 index 0000000000..40c624b68c --- /dev/null +++ b/unit_tests/os_interface/linux/drm_memory_info_tests.cpp @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2019 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "runtime/os_interface/linux/memory_info.h" +#include "unit_tests/os_interface/linux/drm_mock.h" + +#include "gtest/gtest.h" + +using namespace OCLRT; + +TEST(DrmTest, whenQueryingMemoryInfoThenMemoryInfoIsNotCreatedAndNoIoctlIsCalled) { + std::unique_ptr drm = std::make_unique(); + EXPECT_NE(nullptr, drm); + + drm->queryMemoryInfo(); + + EXPECT_EQ(nullptr, drm->memoryInfo.get()); + EXPECT_EQ(0u, drm->ioctlCallsCount); +} + +TEST(MemoryInfo, givenMemoryInfoImplementationWhenDestructingThenDestructorIsCalled) { + struct MemoryInfoImpl : public OCLRT::MemoryInfo { + MemoryInfoImpl() {} + ~MemoryInfoImpl() override{}; + }; + + MemoryInfoImpl memoryInfoImpl; +} diff --git a/unit_tests/os_interface/linux/drm_mock.h b/unit_tests/os_interface/linux/drm_mock.h index 4cbdd6f814..c6fd3b640c 100644 --- a/unit_tests/os_interface/linux/drm_mock.h +++ b/unit_tests/os_interface/linux/drm_mock.h @@ -27,6 +27,7 @@ static const int mockFd = 33; // Mock DRM class that responds to DRM_IOCTL_I915_GETPARAMs class DrmMock : public Drm { public: + using Drm::memoryInfo; using Drm::preemptionSupported; DrmMock() : Drm(mockFd) { @@ -39,6 +40,8 @@ class DrmMock : public Drm { } } int ioctl(unsigned long request, void *arg) override { + ioctlCallsCount++; + if ((request == DRM_IOCTL_I915_GETPARAM) && (arg != nullptr)) { drm_i915_getparam_t *gp = (drm_i915_getparam_t *)arg; if (false @@ -243,6 +246,7 @@ class DrmMock : public Drm { int StoredExecSoftPin = 0; uint32_t StoredCtxId = 1; uint32_t receivedDestroyContextId = 0; + uint32_t ioctlCallsCount = 0; uint32_t receivedContextParamRequestCount = 0; drm_i915_gem_context_param receivedContextParamRequest = {};