From 135851e218c1eedaf4c9cba92c9118010d2db507 Mon Sep 17 00:00:00 2001 From: Jitendra Sharma Date: Tue, 19 May 2020 15:55:24 +0530 Subject: [PATCH] Fixes for APIs zetSysmanDeviceGetProperties and zetSysmanProcessesGetState This change: - Fixes the problem of last character truncted from strings returned by zetSysmanDeviceGetProperties() API. - Fix ULT to validate them. - Return UNSUPPORTED_FEATURE in case zetSysmanProcessesGetState() fails to find required sysfs nodes in filesystem. Change-Id: I4b18688c13b1971a1654a41a5a0ef1949330ed10 Signed-off-by: Jitendra Sharma --- .../linux/os_sysman_device_imp.cpp | 24 +++++++++--------- .../linux/test_sysman_device.cpp | 25 +++++-------------- 2 files changed, 18 insertions(+), 31 deletions(-) diff --git a/level_zero/tools/source/sysman/sysman_device/linux/os_sysman_device_imp.cpp b/level_zero/tools/source/sysman/sysman_device/linux/os_sysman_device_imp.cpp index 4eb7ac0d02..a59c7662dc 100644 --- a/level_zero/tools/source/sysman/sysman_device/linux/os_sysman_device_imp.cpp +++ b/level_zero/tools/source/sysman/sysman_device/linux/os_sysman_device_imp.cpp @@ -41,12 +41,12 @@ const std::map engineMap = { void LinuxSysmanDeviceImp::getSerialNumber(int8_t (&serialNumber)[ZET_STRING_PROPERTY_SIZE]) { std::copy(unknown.begin(), unknown.end(), serialNumber); - serialNumber[unknown.size() - 1] = '\0'; + serialNumber[unknown.size()] = '\0'; } void LinuxSysmanDeviceImp::getBoardNumber(int8_t (&boardNumber)[ZET_STRING_PROPERTY_SIZE]) { std::copy(unknown.begin(), unknown.end(), boardNumber); - boardNumber[unknown.size() - 1] = '\0'; + boardNumber[unknown.size()] = '\0'; } void LinuxSysmanDeviceImp::getBrandName(int8_t (&brandName)[ZET_STRING_PROPERTY_SIZE]) { @@ -54,16 +54,16 @@ void LinuxSysmanDeviceImp::getBrandName(int8_t (&brandName)[ZET_STRING_PROPERTY_ ze_result_t result = pSysfsAccess->read(subsystemVendorFile, strVal); if (ZE_RESULT_SUCCESS != result) { std::copy(unknown.begin(), unknown.end(), brandName); - brandName[unknown.size() - 1] = '\0'; + brandName[unknown.size()] = '\0'; return; } if (strVal.compare(intelPciId) == 0) { std::copy(vendorIntel.begin(), vendorIntel.end(), brandName); - brandName[vendorIntel.size() - 1] = '\0'; + brandName[vendorIntel.size()] = '\0'; return; } std::copy(unknown.begin(), unknown.end(), brandName); - brandName[unknown.size() - 1] = '\0'; + brandName[unknown.size()] = '\0'; } void LinuxSysmanDeviceImp::getModelName(int8_t (&modelName)[ZET_STRING_PROPERTY_SIZE]) { @@ -71,12 +71,12 @@ void LinuxSysmanDeviceImp::getModelName(int8_t (&modelName)[ZET_STRING_PROPERTY_ ze_result_t result = pSysfsAccess->read(deviceFile, strVal); if (ZE_RESULT_SUCCESS != result) { std::copy(unknown.begin(), unknown.end(), modelName); - modelName[unknown.size() - 1] = '\0'; + modelName[unknown.size()] = '\0'; return; } std::copy(strVal.begin(), strVal.end(), modelName); - modelName[strVal.size() - 1] = '\0'; + modelName[strVal.size()] = '\0'; } void LinuxSysmanDeviceImp::getVendorName(int8_t (&vendorName)[ZET_STRING_PROPERTY_SIZE]) { @@ -84,21 +84,21 @@ void LinuxSysmanDeviceImp::getVendorName(int8_t (&vendorName)[ZET_STRING_PROPERT ze_result_t result = pSysfsAccess->read(vendorFile, strVal); if (ZE_RESULT_SUCCESS != result) { std::copy(unknown.begin(), unknown.end(), vendorName); - vendorName[unknown.size() - 1] = '\0'; + vendorName[unknown.size()] = '\0'; return; } if (strVal.compare(intelPciId) == 0) { std::copy(vendorIntel.begin(), vendorIntel.end(), vendorName); - vendorName[vendorIntel.size() - 1] = '\0'; + vendorName[vendorIntel.size()] = '\0'; return; } std::copy(unknown.begin(), unknown.end(), vendorName); - vendorName[unknown.size() - 1] = '\0'; + vendorName[unknown.size()] = '\0'; } void LinuxSysmanDeviceImp::getDriverVersion(int8_t (&driverVersion)[ZET_STRING_PROPERTY_SIZE]) { std::copy(unknown.begin(), unknown.end(), driverVersion); - driverVersion[unknown.size() - 1] = '\0'; + driverVersion[unknown.size()] = '\0'; } static void getPidFdsForOpenDevice(ProcfsAccess *pProcfsAccess, SysfsAccess *pSysfsAccess, const ::pid_t pid, std::vector &deviceFds) { @@ -233,7 +233,7 @@ ze_result_t LinuxSysmanDeviceImp::scanProcessesState(std::vector clientIds; ze_result_t result = pSysfsAccess->scanDirEntries(clientsDir, clientIds); if (ZE_RESULT_SUCCESS != result) { - return result; + return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; } // Create a map with unique pid as key and engineType as value diff --git a/level_zero/tools/test/unit_tests/sources/sysman/sysman_device/linux/test_sysman_device.cpp b/level_zero/tools/test/unit_tests/sources/sysman/sysman_device/linux/test_sysman_device.cpp index 647b6e2e6e..6421045d05 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/sysman_device/linux/test_sysman_device.cpp +++ b/level_zero/tools/test/unit_tests/sources/sysman/sysman_device/linux/test_sysman_device.cpp @@ -79,19 +79,6 @@ class SysmanSysmanDeviceFixture : public DeviceFixture, public ::testing::Test { } DeviceFixture::TearDown(); } - - uint32_t getPropLength(int8_t prop[ZET_STRING_PROPERTY_SIZE]) { - uint32_t length = 0; - for (int i = 0; i < ZET_STRING_PROPERTY_SIZE; i++) { - if (prop[i] == '\0') { - break; - } else { - length += 1; - } - } - - return length; - } }; TEST_F(SysmanSysmanDeviceFixture, GivenValidSysmanHandleWhenCallingzetSysmanDeviceGetPropertiesThenVerifyzetSysmanDeviceGetPropertiesCallSucceeds) { @@ -100,12 +87,12 @@ TEST_F(SysmanSysmanDeviceFixture, GivenValidSysmanHandleWhenCallingzetSysmanDevi EXPECT_EQ(ZE_RESULT_SUCCESS, result); EXPECT_EQ(properties.numSubdevices, 0u); - EXPECT_TRUE(0 == std::memcmp(properties.boardNumber, unknown.c_str(), getPropLength(properties.boardNumber))); - EXPECT_TRUE(0 == std::memcmp(properties.brandName, vendorIntel.c_str(), getPropLength(properties.brandName))); - EXPECT_TRUE(0 == std::memcmp(properties.driverVersion, unknown.c_str(), getPropLength(properties.driverVersion))); - EXPECT_TRUE(0 == std::memcmp(properties.modelName, expectedModelName.c_str(), getPropLength(properties.modelName))); - EXPECT_TRUE(0 == std::memcmp(properties.serialNumber, unknown.c_str(), getPropLength(properties.serialNumber))); - EXPECT_TRUE(0 == std::memcmp(properties.vendorName, vendorIntel.c_str(), getPropLength(properties.vendorName))); + EXPECT_TRUE(0 == std::memcmp(properties.boardNumber, unknown.c_str(), unknown.size())); + EXPECT_TRUE(0 == std::memcmp(properties.brandName, vendorIntel.c_str(), vendorIntel.size())); + EXPECT_TRUE(0 == std::memcmp(properties.driverVersion, unknown.c_str(), unknown.size())); + EXPECT_TRUE(0 == std::memcmp(properties.modelName, expectedModelName.c_str(), expectedModelName.size())); + EXPECT_TRUE(0 == std::memcmp(properties.serialNumber, unknown.c_str(), unknown.size())); + EXPECT_TRUE(0 == std::memcmp(properties.vendorName, vendorIntel.c_str(), vendorIntel.size())); } TEST_F(SysmanSysmanDeviceFixture, GivenValidSysmanHandleWhileRetrievingInformationAboutHostProcessesUsingDeviceThenSuccessIsReturned) {