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); }