Extended DRM interface with function to set memory regions

Related-To: NEO-3008

Change-Id: I3f2d5571d670b43225e77e4f80e121aee215d61a
Signed-off-by: Milczarek, Slawomir <slawomir.milczarek@intel.com>
This commit is contained in:
Milczarek, Slawomir 2019-07-31 22:44:27 +02:00 committed by sys_ocldev
parent 6b21ae07ad
commit 030945bcd3
5 changed files with 49 additions and 0 deletions

View File

@ -189,6 +189,7 @@ Drm *Drm::create(int32_t deviceOrdinal) {
drmObject->queryEngineInfo();
if (HwHelper::get(device->pHwInfo->platform.eRenderCoreFamily).getEnableLocalMemory(*device->pHwInfo)) {
drmObject->queryMemoryInfo();
drmObject->setMemoryRegions();
}
drms[deviceOrdinal % drms.size()] = drmObject.release();

View File

@ -6,6 +6,7 @@
*/
#pragma once
#include "core/helpers/basic_math.h"
#include "runtime/os_interface/linux/engine_info.h"
#include "runtime/os_interface/linux/memory_info.h"
#include "runtime/utilities/api_intercept.h"
@ -74,6 +75,7 @@ class Drm {
bool getSimplifiedMocsTableUsage() const;
void queryEngineInfo();
void queryMemoryInfo();
void setMemoryRegions();
MemoryInfo *getMemoryInfo() const {
return memoryInfo.get();
@ -99,6 +101,9 @@ class Drm {
std::string getSysFsPciPath(int deviceID);
void *query(uint32_t queryId);
static inline uint16_t getMemoryTypeFromRegion(uint32_t region) { return Math::log2(region >> 16); };
static inline uint16_t getInstanceFromRegion(uint32_t region) { return Math::log2(region & 0xFFFF); };
#pragma pack(1)
struct PCIConfig {
uint16_t VendorID;

View File

@ -21,6 +21,9 @@ void Drm::queryEngineInfo() {
void Drm::queryMemoryInfo() {
}
void Drm::setMemoryRegions() {
}
unsigned int Drm::bindDrmContext(uint32_t drmContextId, uint32_t deviceIndex, aub_stream::EngineType engineType) {
return DrmEngineMapper::engineNodeMap(engineType);
}

View File

@ -27,6 +27,15 @@ TEST(DrmTest, whenQueryingMemoryInfoThenMemoryInfoIsNotCreatedAndNoIoctlIsCalled
EXPECT_EQ(0u, drm->ioctlCallsCount);
}
TEST(DrmTest, whenSettingMemoryRegionsThenNoIoctlIsCalled) {
std::unique_ptr<DrmMock> drm = std::make_unique<DrmMock>();
EXPECT_NE(nullptr, drm);
drm->setMemoryRegions();
EXPECT_EQ(0u, drm->ioctlCallsCount);
}
TEST(DrmTest, givenMemoryInfoWhenGetMemoryInfoIsCalledThenValidPtrIsReturned) {
std::unique_ptr<DrmMock> drm = std::make_unique<DrmMock>();
EXPECT_NE(nullptr, drm);
@ -39,3 +48,28 @@ TEST(DrmTest, givenMemoryInfoWhenGetMemoryInfoIsCalledThenValidPtrIsReturned) {
TEST(MemoryInfo, givenMemoryInfoImplementationWhenDestructingThenDestructorIsCalled) {
MemoryInfoImpl memoryInfoImpl;
}
TEST(MemoryInfo, givenMemoryRegionIdWhenGetMemoryTypeFromRegionAndGetInstanceFromRegionAreCalledThenMemoryTypeAndInstanceAreReturned) {
std::unique_ptr<DrmMock> drm = std::make_unique<DrmMock>();
EXPECT_NE(nullptr, drm);
auto regionSmem = drm->createMemoryRegionId(0, 0);
EXPECT_EQ(0u, drm->getMemoryTypeFromRegion(regionSmem));
EXPECT_EQ(0u, drm->getInstanceFromRegion(regionSmem));
auto regionLmem = drm->createMemoryRegionId(1, 0);
EXPECT_EQ(1u, drm->getMemoryTypeFromRegion(regionLmem));
EXPECT_EQ(0u, drm->getInstanceFromRegion(regionLmem));
auto regionLmem1 = drm->createMemoryRegionId(1, 1);
EXPECT_EQ(1u, drm->getMemoryTypeFromRegion(regionLmem1));
EXPECT_EQ(1u, drm->getInstanceFromRegion(regionLmem1));
auto regionLmem2 = drm->createMemoryRegionId(1, 2);
EXPECT_EQ(1u, drm->getMemoryTypeFromRegion(regionLmem2));
EXPECT_EQ(2u, drm->getInstanceFromRegion(regionLmem2));
auto regionLmem3 = drm->createMemoryRegionId(1, 3);
EXPECT_EQ(1u, drm->getMemoryTypeFromRegion(regionLmem3));
EXPECT_EQ(3u, drm->getInstanceFromRegion(regionLmem3));
}

View File

@ -20,6 +20,8 @@ using namespace NEO;
// Mock DRM class that responds to DRM_IOCTL_I915_GETPARAMs
class DrmMock : public Drm {
public:
using Drm::getInstanceFromRegion;
using Drm::getMemoryTypeFromRegion;
using Drm::memoryInfo;
using Drm::preemptionSupported;
using Drm::query;
@ -65,6 +67,10 @@ class DrmMock : public Drm {
void setDeviceID(int deviceId) { this->deviceId = deviceId; }
void setDeviceRevID(int revisionId) { this->revisionId = revisionId; }
inline uint32_t createMemoryRegionId(uint16_t type, uint16_t instance) const {
return (1u << (type + 16)) | (1u << instance);
}
static const int mockFd = 33;
int StoredEUVal = -1;