From ea6e2982fb7f4b83ef9cfd670f2c15628ad4d89c Mon Sep 17 00:00:00 2001 From: Jitendra Sharma Date: Wed, 23 Dec 2020 08:17:06 +0530 Subject: [PATCH] Query free memory info inside zesMemoryGetState API Signed-off-by: Jitendra Sharma --- .../sysman/memory/linux/dg1/os_memory_imp.cpp | 29 ++++++++++--------- .../sysman/memory/linux/dg1/os_memory_imp.h | 2 -- .../sysman/memory/linux/dg1/mock_memory.h | 8 +++++ .../memory/linux/dg1/test_sysman_memory.cpp | 29 ++++++++++++++++++- 4 files changed, 51 insertions(+), 17 deletions(-) diff --git a/level_zero/tools/source/sysman/memory/linux/dg1/os_memory_imp.cpp b/level_zero/tools/source/sysman/memory/linux/dg1/os_memory_imp.cpp index a3c69f0915..912253b9fc 100644 --- a/level_zero/tools/source/sysman/memory/linux/dg1/os_memory_imp.cpp +++ b/level_zero/tools/source/sysman/memory/linux/dg1/os_memory_imp.cpp @@ -13,23 +13,10 @@ namespace L0 { -void LinuxMemoryImp::init() { - auto memoryInfo = static_cast(pDrm->getMemoryInfo()); - if (!memoryInfo) { - return; - } - for (auto region : memoryInfo->regions) { - if (region.region.memory_class == I915_MEMORY_CLASS_DEVICE) { - deviceRegions.push_back(region); - } - } -} - LinuxMemoryImp::LinuxMemoryImp(OsSysman *pOsSysman, ze_bool_t onSubdevice, uint32_t subdeviceId) : isSubdevice(onSubdevice), subdeviceId(subdeviceId) { LinuxSysmanImp *pLinuxSysmanImp = static_cast(pOsSysman); pDrm = &pLinuxSysmanImp->getDrm(); pDevice = pLinuxSysmanImp->getDeviceHandle(); - init(); } bool LinuxMemoryImp::isMemoryModuleSupported() { @@ -53,9 +40,23 @@ ze_result_t LinuxMemoryImp::getBandwidth(zes_mem_bandwidth_t *pBandwidth) { } ze_result_t LinuxMemoryImp::getState(zes_mem_state_t *pState) { - pState->health = ZES_MEM_HEALTH_OK; + std::vector deviceRegions; + if (pDrm->queryMemoryInfo() == false) { + return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } + + auto memoryInfo = static_cast(pDrm->getMemoryInfo()); + if (!memoryInfo) { + return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } + for (auto region : memoryInfo->regions) { + if (region.region.memory_class == I915_MEMORY_CLASS_DEVICE) { + deviceRegions.push_back(region); + } + } pState->free = deviceRegions[subdeviceId].unallocated_size; pState->size = deviceRegions[subdeviceId].probed_size; + pState->health = ZES_MEM_HEALTH_OK; return ZE_RESULT_SUCCESS; } diff --git a/level_zero/tools/source/sysman/memory/linux/dg1/os_memory_imp.h b/level_zero/tools/source/sysman/memory/linux/dg1/os_memory_imp.h index 3f644518a3..67d2849b52 100644 --- a/level_zero/tools/source/sysman/memory/linux/dg1/os_memory_imp.h +++ b/level_zero/tools/source/sysman/memory/linux/dg1/os_memory_imp.h @@ -33,7 +33,5 @@ class LinuxMemoryImp : public OsMemory, NEO::NonCopyableOrMovableClass { private: bool isSubdevice = false; uint32_t subdeviceId = 0; - void init(); - std::vector deviceRegions; }; } // namespace L0 diff --git a/level_zero/tools/test/unit_tests/sources/sysman/memory/linux/dg1/mock_memory.h b/level_zero/tools/test/unit_tests/sources/sysman/memory/linux/dg1/mock_memory.h index 44cad7f541..a67db011d0 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/memory/linux/dg1/mock_memory.h +++ b/level_zero/tools/test/unit_tests/sources/sysman/memory/linux/dg1/mock_memory.h @@ -60,6 +60,14 @@ struct Mock : public MemoryNeoDrm { return true; } + bool queryMemoryInfoMockReturnFalse() { + return false; + } + + bool queryMemoryInfoMockReturnFakeTrue() { + return true; + } + MOCK_METHOD(bool, queryMemoryInfo, (), (override)); }; diff --git a/level_zero/tools/test/unit_tests/sources/sysman/memory/linux/dg1/test_sysman_memory.cpp b/level_zero/tools/test/unit_tests/sources/sysman/memory/linux/dg1/test_sysman_memory.cpp index b59aa14e96..7d5149ab81 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/memory/linux/dg1/test_sysman_memory.cpp +++ b/level_zero/tools/test/unit_tests/sources/sysman/memory/linux/dg1/test_sysman_memory.cpp @@ -53,7 +53,6 @@ class SysmanDeviceMemoryFixture : public SysmanDeviceFixture { deviceHandles.resize(subDeviceCount, nullptr); Device::fromHandle(device->toHandle())->getSubDevices(&subDeviceCount, deviceHandles.data()); } - pDrm->queryMemoryInfo(); pSysmanDeviceImp->pMemoryHandleContext->init(deviceHandles); } @@ -208,6 +207,34 @@ TEST_F(SysmanDeviceMemoryFixture, GivenValidMemoryHandleWhenCallingzetSysmanMemo } } +TEST_F(SysmanDeviceMemoryFixture, GivenValidMemoryHandleWhenCallingzetSysmanMemoryGetStateAndIfQueryMemoryInfoFailsThenErrorIsReturned) { + setLocalSupportedAndReinit(true); + + ON_CALL(*pDrm, queryMemoryInfo()) + .WillByDefault(::testing::Invoke(pDrm, &Mock::queryMemoryInfoMockReturnFalse)); + + auto handles = get_memory_handles(memoryHandleComponentCount); + + for (auto handle : handles) { + zes_mem_state_t state; + EXPECT_EQ(zesMemoryGetState(handle, &state), ZE_RESULT_ERROR_UNSUPPORTED_FEATURE); + } +} + +TEST_F(SysmanDeviceMemoryFixture, GivenValidMemoryHandleWhenCallingzetSysmanMemoryGetStateAndIfQueryMemoryInfoAndIfMemoryInfoIsNotCorrectThenErrorIsReturned) { + setLocalSupportedAndReinit(true); + + ON_CALL(*pDrm, queryMemoryInfo()) + .WillByDefault(::testing::Invoke(pDrm, &Mock::queryMemoryInfoMockReturnFakeTrue)); + + auto handles = get_memory_handles(memoryHandleComponentCount); + + for (auto handle : handles) { + zes_mem_state_t state; + EXPECT_EQ(zesMemoryGetState(handle, &state), ZE_RESULT_ERROR_UNSUPPORTED_FEATURE); + } +} + TEST_F(SysmanDeviceMemoryFixture, GivenValidMemoryHandleWhenCallingzetSysmanMemoryGetBandwidthhenVerifySysmanMemoryGetBandwidthCallReturnUnsupportedFeature) { setLocalSupportedAndReinit(true);