mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-05 09:09:04 +08:00
Add StandbySetMode support
Added mode setting support for standby if required permission is available Signed-off-by: Joshua Santosh Ranjan <joshua.santosh.ranjan@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
bb51681bbb
commit
d3d2e153f2
@@ -6,7 +6,7 @@
|
||||
|
||||
set(L0_SRCS_TOOLS_SYSMAN_STANDBY_LINUX
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/os_standby_imp.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/os_standby_imp.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/os_standby_imp.h
|
||||
)
|
||||
|
||||
|
||||
@@ -47,12 +47,17 @@ ze_result_t LinuxStandbyImp::getMode(zes_standby_promo_mode_t &mode) {
|
||||
}
|
||||
|
||||
ze_result_t LinuxStandbyImp::setMode(zes_standby_promo_mode_t mode) {
|
||||
// standbyModeFile is not writable.
|
||||
// Mode cannot be set from L0.
|
||||
// To set the mode, user must reload
|
||||
// the i915 module and set module parameter
|
||||
// enable_rc6 appropriately.
|
||||
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
|
||||
ze_result_t result = ZE_RESULT_ERROR_UNKNOWN;
|
||||
if (ZES_STANDBY_PROMO_MODE_DEFAULT == mode) {
|
||||
result = pSysfsAccess->write(standbyModeFile, standbyModeDefault);
|
||||
} else {
|
||||
result = pSysfsAccess->write(standbyModeFile, standbyModeNever);
|
||||
}
|
||||
|
||||
if (ZE_RESULT_ERROR_NOT_AVAILABLE == result) {
|
||||
result = ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
LinuxStandbyImp::LinuxStandbyImp(OsSysman *pOsSysman, ze_bool_t onSubdevice, uint32_t subdeviceId) : isSubdevice(onSubdevice), subdeviceId(subdeviceId) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (C) 2020 Intel Corporation
|
||||
# Copyright (C) 2020-2021 Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
@@ -8,8 +8,8 @@ if(UNIX)
|
||||
target_sources(${TARGET_NAME}
|
||||
PRIVATE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/mock_sysfs_standby.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/test_zes_sysman_standby.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/mock_sysfs_standby.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/test_zes_sysman_standby.cpp
|
||||
|
||||
)
|
||||
endif()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Intel Corporation
|
||||
* Copyright (C) 2020-2021 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -19,33 +19,57 @@ class StandbySysfsAccess : public SysfsAccess {};
|
||||
template <>
|
||||
struct Mock<StandbySysfsAccess> : public StandbySysfsAccess {
|
||||
int mockStandbyMode = -1;
|
||||
bool isStandbyModeFileAvailable = true;
|
||||
::mode_t mockStandbyFileMode = S_IRUSR | S_IRGRP | S_IROTH | S_IWUSR;
|
||||
MOCK_METHOD(ze_result_t, read, (const std::string file, int &val), (override));
|
||||
MOCK_METHOD(ze_result_t, write, (const std::string file, int val), (override));
|
||||
MOCK_METHOD(ze_result_t, canRead, (const std::string file), (override));
|
||||
|
||||
ze_result_t getCanReadStatus(const std::string file) {
|
||||
if (file.compare(standbyModeFile) == 0) {
|
||||
if (isFileAccessible(file) == true) {
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
return ZE_RESULT_ERROR_UNKNOWN;
|
||||
}
|
||||
|
||||
ze_result_t getVal(const std::string file, int &val) {
|
||||
if (file.compare(standbyModeFile) == 0) {
|
||||
if ((isFileAccessible(file) == true) &&
|
||||
(mockStandbyFileMode & S_IRUSR) != 0) {
|
||||
val = mockStandbyMode;
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
return ZE_RESULT_ERROR_NOT_AVAILABLE;
|
||||
|
||||
if (isStandbyModeFileAvailable == false) {
|
||||
return ZE_RESULT_ERROR_NOT_AVAILABLE;
|
||||
}
|
||||
|
||||
if ((mockStandbyFileMode & S_IRUSR) == 0) {
|
||||
return ZE_RESULT_ERROR_INSUFFICIENT_PERMISSIONS;
|
||||
}
|
||||
|
||||
return ZE_RESULT_ERROR_UNKNOWN;
|
||||
}
|
||||
|
||||
ze_result_t setVal(const std::string file, const int val) {
|
||||
if (file.compare(standbyModeFile) == 0) {
|
||||
if ((isFileAccessible(file) == true) &&
|
||||
(mockStandbyFileMode & S_IWUSR) != 0) {
|
||||
mockStandbyMode = val;
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
return ZE_RESULT_ERROR_NOT_AVAILABLE;
|
||||
|
||||
if (isFileAccessible(file) == false) {
|
||||
return ZE_RESULT_ERROR_NOT_AVAILABLE;
|
||||
}
|
||||
|
||||
if ((mockStandbyFileMode & S_IWUSR) == 0) {
|
||||
return ZE_RESULT_ERROR_INSUFFICIENT_PERMISSIONS;
|
||||
}
|
||||
|
||||
return ZE_RESULT_ERROR_UNKNOWN;
|
||||
}
|
||||
|
||||
ze_result_t setValReturnError(const std::string file, const int val) {
|
||||
if (file.compare(standbyModeFile) == 0) {
|
||||
if (isFileAccessible(file) == true) {
|
||||
return ZE_RESULT_ERROR_NOT_AVAILABLE;
|
||||
}
|
||||
return ZE_RESULT_ERROR_NOT_AVAILABLE;
|
||||
@@ -53,6 +77,14 @@ struct Mock<StandbySysfsAccess> : public StandbySysfsAccess {
|
||||
|
||||
Mock() = default;
|
||||
~Mock() override = default;
|
||||
|
||||
private:
|
||||
bool isFileAccessible(const std::string file) {
|
||||
if ((file.compare(standbyModeFile) == 0) && (isStandbyModeFileAvailable == true)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
class PublicLinuxStandbyImp : public L0::LinuxStandbyImp {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Intel Corporation
|
||||
* Copyright (C) 2020-2021 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -34,6 +34,8 @@ class ZesStandbyFixture : public SysmanDeviceFixture {
|
||||
ptestSysfsAccess->setVal(standbyModeFile, standbyModeDefault);
|
||||
ON_CALL(*ptestSysfsAccess.get(), read(_, Matcher<int &>(_)))
|
||||
.WillByDefault(::testing::Invoke(ptestSysfsAccess.get(), &Mock<StandbySysfsAccess>::getVal));
|
||||
ON_CALL(*ptestSysfsAccess.get(), write(_, Matcher<int>(_)))
|
||||
.WillByDefault(::testing::Invoke(ptestSysfsAccess.get(), &Mock<StandbySysfsAccess>::setVal));
|
||||
ON_CALL(*ptestSysfsAccess.get(), canRead(_))
|
||||
.WillByDefault(::testing::Invoke(ptestSysfsAccess.get(), &Mock<StandbySysfsAccess>::getCanReadStatus));
|
||||
for (const auto &handle : pSysmanDeviceImp->pStandbyHandleContext->handleList) {
|
||||
@@ -163,13 +165,80 @@ TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbyGetModeThe
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbySetModeThenVerifySysmanzesySetModeCallFailsWithUnsupported) {
|
||||
TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbyGetModeOnUnavailableFileThenVerifyzesStandbyGetModeCallFailsForUnsupportedFeature) {
|
||||
zes_standby_promo_mode_t mode = {};
|
||||
ptestSysfsAccess->setVal(standbyModeFile, standbyModeInvalid);
|
||||
auto handles = get_standby_handles(mockHandleCount);
|
||||
|
||||
ptestSysfsAccess->isStandbyModeFileAvailable = false;
|
||||
|
||||
for (auto hSysmanStandby : handles) {
|
||||
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zesStandbyGetMode(hSysmanStandby, &mode));
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbyGetModeWithInsufficientPermissionsThenVerifyzesStandbyGetModeCallFailsForInsufficientPermissions) {
|
||||
zes_standby_promo_mode_t mode = {};
|
||||
ptestSysfsAccess->setVal(standbyModeFile, standbyModeInvalid);
|
||||
auto handles = get_standby_handles(mockHandleCount);
|
||||
|
||||
ptestSysfsAccess->mockStandbyFileMode &= ~S_IRUSR;
|
||||
|
||||
for (auto hSysmanStandby : handles) {
|
||||
EXPECT_EQ(ZE_RESULT_ERROR_INSUFFICIENT_PERMISSIONS, zesStandbyGetMode(hSysmanStandby, &mode));
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbySetModeThenwithUnwritableFileVerifySysmanzesySetModeCallFailedWithInsufficientPermissions) {
|
||||
auto handles = get_standby_handles(mockHandleCount);
|
||||
ptestSysfsAccess->mockStandbyFileMode &= ~S_IWUSR;
|
||||
|
||||
for (auto hSysmanStandby : handles) {
|
||||
EXPECT_EQ(ZE_RESULT_ERROR_INSUFFICIENT_PERMISSIONS, zesStandbySetMode(hSysmanStandby, ZES_STANDBY_PROMO_MODE_NEVER));
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbySetModeOnUnavailableFileThenVerifyzesStandbySetModeCallFailsForUnsupportedFeature) {
|
||||
auto handles = get_standby_handles(mockHandleCount);
|
||||
|
||||
ptestSysfsAccess->isStandbyModeFileAvailable = false;
|
||||
for (auto hSysmanStandby : handles) {
|
||||
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zesStandbySetMode(hSysmanStandby, ZES_STANDBY_PROMO_MODE_NEVER));
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbySetModeNeverThenVerifySysmanzesySetModeCallSucceeds) {
|
||||
auto handles = get_standby_handles(mockHandleCount);
|
||||
|
||||
for (auto hSysmanStandby : handles) {
|
||||
zes_standby_promo_mode_t mode;
|
||||
ptestSysfsAccess->setVal(standbyModeFile, standbyModeDefault);
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zesStandbyGetMode(hSysmanStandby, &mode));
|
||||
EXPECT_EQ(ZES_STANDBY_PROMO_MODE_DEFAULT, mode);
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zesStandbySetMode(hSysmanStandby, ZES_STANDBY_PROMO_MODE_NEVER));
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zesStandbyGetMode(hSysmanStandby, &mode));
|
||||
EXPECT_EQ(ZES_STANDBY_PROMO_MODE_NEVER, mode);
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbySetModeDefaultThenVerifySysmanzesySetModeCallSucceeds) {
|
||||
auto handles = get_standby_handles(mockHandleCount);
|
||||
|
||||
for (auto hSysmanStandby : handles) {
|
||||
zes_standby_promo_mode_t mode;
|
||||
ptestSysfsAccess->setVal(standbyModeFile, standbyModeNever);
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zesStandbyGetMode(hSysmanStandby, &mode));
|
||||
EXPECT_EQ(ZES_STANDBY_PROMO_MODE_NEVER, mode);
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zesStandbySetMode(hSysmanStandby, ZES_STANDBY_PROMO_MODE_DEFAULT));
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zesStandbyGetMode(hSysmanStandby, &mode));
|
||||
EXPECT_EQ(ZES_STANDBY_PROMO_MODE_DEFAULT, mode);
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(ZesStandbyFixture, GivenOnSubdeviceNotSetWhenValidatingosStandbyGetPropertiesThenSuccessIsReturned) {
|
||||
zes_standby_properties_t properties = {};
|
||||
ze_device_properties_t deviceProperties = {};
|
||||
@@ -260,5 +329,6 @@ TEST_F(ZesStandbyMultiDeviceFixture, GivenOnSubdeviceNotSetWhenValidatingosStand
|
||||
EXPECT_EQ(properties.onSubdevice, isSubDevice);
|
||||
delete pLinuxStandbyImp;
|
||||
}
|
||||
|
||||
} // namespace ult
|
||||
} // namespace L0
|
||||
|
||||
Reference in New Issue
Block a user