From c46e8866494eb5a313b31d70fc1e161b515b454e Mon Sep 17 00:00:00 2001 From: Slawomir Milczarek Date: Tue, 15 Oct 2019 10:23:04 +0200 Subject: [PATCH] Create drm to check status of set memory regions operation Related-To: NEO-3008 Change-Id: I0c26656c905ad52295ed0aaf2c53731c99da9cc2 Signed-off-by: Slawomir Milczarek --- runtime/dll/linux/drm_neo_create.cpp | 6 +++++- runtime/os_interface/linux/drm_neo.h | 2 +- runtime/os_interface/linux/drm_query.cpp | 3 ++- unit_tests/linux/main_linux_dll.cpp | 10 ++++++++++ .../os_interface/linux/drm_memory_info_tests.cpp | 5 +++-- 5 files changed, 21 insertions(+), 5 deletions(-) diff --git a/runtime/dll/linux/drm_neo_create.cpp b/runtime/dll/linux/drm_neo_create.cpp index 7b7595e2d5..753dc2209c 100644 --- a/runtime/dll/linux/drm_neo_create.cpp +++ b/runtime/dll/linux/drm_neo_create.cpp @@ -190,7 +190,11 @@ Drm *Drm::create(int32_t deviceOrdinal) { if (HwHelper::get(device->pHwInfo->platform.eRenderCoreFamily).getEnableLocalMemory(*device->pHwInfo)) { drmObject->queryMemoryInfo(); - drmObject->setMemoryRegions(); + ret = drmObject->setMemoryRegions(); + if (ret != 0) { + printDebugString(DebugManager.flags.PrintDebugMessages.get(), stderr, "%s", "FATAL: Failed to set memory regions\n"); + return nullptr; + } } drms[deviceOrdinal % drms.size()] = drmObject.release(); diff --git a/runtime/os_interface/linux/drm_neo.h b/runtime/os_interface/linux/drm_neo.h index b7717cec5a..8e27b2d422 100644 --- a/runtime/os_interface/linux/drm_neo.h +++ b/runtime/os_interface/linux/drm_neo.h @@ -78,7 +78,7 @@ class Drm { void queryEngineInfo(); void queryMemoryInfo(); int setEngines(); - void setMemoryRegions(); + int setMemoryRegions(); MemoryInfo *getMemoryInfo() const { return memoryInfo.get(); diff --git a/runtime/os_interface/linux/drm_query.cpp b/runtime/os_interface/linux/drm_query.cpp index c3f8a1239e..cb0d31f6bc 100644 --- a/runtime/os_interface/linux/drm_query.cpp +++ b/runtime/os_interface/linux/drm_query.cpp @@ -25,7 +25,8 @@ int Drm::setEngines() { return 0; } -void Drm::setMemoryRegions() { +int Drm::setMemoryRegions() { + return 0; } unsigned int Drm::bindDrmContext(uint32_t drmContextId, uint32_t deviceIndex, aub_stream::EngineType engineType) { diff --git a/unit_tests/linux/main_linux_dll.cpp b/unit_tests/linux/main_linux_dll.cpp index 9679ec0fbc..79c3d254d0 100644 --- a/unit_tests/linux/main_linux_dll.cpp +++ b/unit_tests/linux/main_linux_dll.cpp @@ -277,6 +277,16 @@ TEST_F(DrmTests, failOnInvalidDeviceName) { EXPECT_EQ(drm, nullptr); } +TEST_F(DrmTests, whenDrmIsCreatedThenSetMemoryRegionsDoesntFailAndDrmObjectIsReturned) { + DebugManagerStateRestore restore; + DebugManager.flags.EnableLocalMemory.set(1); + + auto drm = DrmWrap::createDrm(0); + EXPECT_NE(drm, nullptr); + + DrmWrap::closeDevice(0); +} + TEST(AllocatorHelper, givenExpectedSizeToReserveWhenGetSizeToReserveCalledThenExpectedValueReturned) { EXPECT_EQ((maxNBitValue<47> + 1) / 4, NEO::getSizeToReserve()); } diff --git a/unit_tests/os_interface/linux/drm_memory_info_tests.cpp b/unit_tests/os_interface/linux/drm_memory_info_tests.cpp index c5f42ac41c..89c2140456 100644 --- a/unit_tests/os_interface/linux/drm_memory_info_tests.cpp +++ b/unit_tests/os_interface/linux/drm_memory_info_tests.cpp @@ -37,12 +37,13 @@ TEST(DrmTest, whenSettingEnginesThenReturnZeroValueAndCallNoIoctls) { EXPECT_EQ(0u, drm->ioctlCallsCount); } -TEST(DrmTest, whenSettingMemoryRegionsThenNoIoctlIsCalled) { +TEST(DrmTest, whenSettingMemoryRegionsThenZeroIsReturnedAndNoIoctlsAreCalled) { std::unique_ptr drm = std::make_unique(); EXPECT_NE(nullptr, drm); - drm->setMemoryRegions(); + auto ret = drm->setMemoryRegions(); + EXPECT_EQ(0, ret); EXPECT_EQ(0u, drm->ioctlCallsCount); }