Adding MemoryInfo to Drm

- call queryMemoryInfo on Drm::create()

Change-Id: Ib0532894f271bd4ab3dcbb281d0bddf2a01d4afe
Signed-off-by: Mateusz Hoppe <mateusz.hoppe@intel.com>
This commit is contained in:
Mateusz Hoppe 2019-03-19 13:53:55 +01:00 committed by sys_ocldev
parent a7d66b0365
commit 432591a88a
8 changed files with 79 additions and 0 deletions

View File

@ -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()];
}

View File

@ -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

View File

@ -6,12 +6,14 @@
*/
#pragma once
#include "runtime/os_interface/linux/memory_info.h"
#include "runtime/utilities/api_intercept.h"
#include "igfxfmid.h"
#include <cerrno>
#include <fcntl.h>
#include <memory>
#include <string>
#include <sys/ioctl.h>
#include <unistd.h>
@ -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> memoryInfo;
static bool isi915Version(int fd);
static int getDeviceFd(const int devType);

View File

@ -0,0 +1,15 @@
/*
* Copyright (C) 2019 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "drm_neo.h"
namespace OCLRT {
void Drm::queryMemoryInfo() {
}
} // namespace OCLRT

View File

@ -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

View File

@ -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

View File

@ -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<DrmMock> drm = std::make_unique<DrmMock>();
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;
}

View File

@ -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 = {};