diff --git a/level_zero/tools/source/sysman/memory/windows/os_memory_imp.cpp b/level_zero/tools/source/sysman/memory/windows/os_memory_imp.cpp index ed6e7e68d7..581b4cdcea 100644 --- a/level_zero/tools/source/sysman/memory/windows/os_memory_imp.cpp +++ b/level_zero/tools/source/sysman/memory/windows/os_memory_imp.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 Intel Corporation + * Copyright (C) 2020-2021 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -9,7 +9,21 @@ namespace L0 { bool WddmMemoryImp::isMemoryModuleSupported() { - return pDevice->getDriverHandle()->getMemoryManager()->isLocalMemorySupported(pDevice->getRootDeviceIndex()); + uint32_t value = 0; + KmdSysman::RequestProperty request; + KmdSysman::ResponseProperty response; + + request.commandId = KmdSysman::Command::Get; + request.componentId = KmdSysman::Component::MemoryComponent; + request.requestId = KmdSysman::Requests::Memory::NumMemoryDomains; + + if (pKmdSysManager->requestSingle(request, response) != ZE_RESULT_SUCCESS) { + return false; + } + + memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t)); + + return (value > 0); } ze_result_t WddmMemoryImp::getProperties(zes_mem_properties_t *pProperties) { ze_result_t status = ZE_RESULT_SUCCESS; diff --git a/level_zero/tools/test/unit_tests/sources/sysman/memory/windows/mock_memory.h b/level_zero/tools/test/unit_tests/sources/sysman/memory/windows/mock_memory.h index 05c70763ec..61b6b0a2ab 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/memory/windows/mock_memory.h +++ b/level_zero/tools/test/unit_tests/sources/sysman/memory/windows/mock_memory.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 Intel Corporation + * Copyright (C) 2020-2021 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -35,12 +35,19 @@ struct Mock : public MemoryKmdSysManager { uint32_t mockMemoryChannels = 2; uint32_t mockMemoryMaxBandwidth = 4256000000; uint32_t mockMemoryCurrentBandwidth = 561321; + uint32_t mockMemoryDomains = 1; void getMemoryProperty(KmdSysman::GfxSysmanReqHeaderIn *pRequest, KmdSysman::GfxSysmanReqHeaderOut *pResponse) override { uint8_t *pBuffer = reinterpret_cast(pResponse); pBuffer += sizeof(KmdSysman::GfxSysmanReqHeaderOut); switch (pRequest->inRequestId) { + case KmdSysman::Requests::Memory::NumMemoryDomains: { + uint32_t *pValue = reinterpret_cast(pBuffer); + *pValue = mockMemoryDomains; + pResponse->outReturnCode = KmdSysman::KmdSysmanSuccess; + pResponse->outDataSize = sizeof(uint32_t); + } break; case KmdSysman::Requests::Memory::MemoryType: { uint32_t *pValue = reinterpret_cast(pBuffer); *pValue = mockMemoryType; diff --git a/level_zero/tools/test/unit_tests/sources/sysman/memory/windows/test_zes_memory.cpp b/level_zero/tools/test/unit_tests/sources/sysman/memory/windows/test_zes_memory.cpp index 0c128f7bce..90781691e7 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/memory/windows/test_zes_memory.cpp +++ b/level_zero/tools/test/unit_tests/sources/sysman/memory/windows/test_zes_memory.cpp @@ -138,33 +138,7 @@ TEST_F(SysmanDeviceMemoryFixture, GivenComponentCountZeroWhenEnumeratingMemoryMo uint32_t count = 0; EXPECT_EQ(zesDeviceEnumMemoryModules(device->toHandle(), &count, nullptr), ZE_RESULT_SUCCESS); - EXPECT_EQ(count, 0u); -} - -TEST_F(SysmanDeviceMemoryFixture, GivenInvalidComponentCountWhenEnumeratingMemoryModulesWithNoLocalMemorySupportThenZeroCountIsReturnedAndVerifySysmanPowerGetCallSucceeds) { - setLocalSupportedAndReinit(false); - - uint32_t count = 0; - EXPECT_EQ(zesDeviceEnumMemoryModules(device->toHandle(), &count, nullptr), ZE_RESULT_SUCCESS); - EXPECT_EQ(count, 0u); - - count = count + 1; - EXPECT_EQ(zesDeviceEnumMemoryModules(device->toHandle(), &count, nullptr), ZE_RESULT_SUCCESS); - EXPECT_EQ(count, 0u); -} - -TEST_F(SysmanDeviceMemoryFixture, GivenComponentCountZeroWhenEnumeratingMemoryModulesWithNoLocalMemorySupportThenValidPowerHandlesIsReturned) { - setLocalSupportedAndReinit(false); - - uint32_t count = 0; - EXPECT_EQ(zesDeviceEnumMemoryModules(device->toHandle(), &count, nullptr), ZE_RESULT_SUCCESS); - EXPECT_EQ(count, 0u); - - std::vector handles(count, nullptr); - EXPECT_EQ(zesDeviceEnumMemoryModules(device->toHandle(), &count, handles.data()), ZE_RESULT_SUCCESS); - for (auto handle : handles) { - EXPECT_NE(handle, nullptr); - } + EXPECT_EQ(count, memoryHandleComponentCount); } TEST_F(SysmanDeviceMemoryFixture, GivenValidMemoryHandleWhenCallingGettingPropertiesWithLocalMemoryThenCallSucceeds) {