feature(sysman): Use common KMD interface in Standby module

Related-To: NEO-8755

Signed-off-by: shubham kumar <shubham.kumar@intel.com>
This commit is contained in:
shubham kumar
2023-11-16 17:41:32 +05:30
committed by Compute-Runtime-Automation
parent c3ac7b78bd
commit e470104d42
4 changed files with 178 additions and 103 deletions

View File

@@ -101,8 +101,8 @@ void LinuxStandbyImp::init() {
LinuxStandbyImp::LinuxStandbyImp(OsSysman *pOsSysman, ze_bool_t onSubdevice, uint32_t subdeviceId) : isSubdevice(onSubdevice), subdeviceId(subdeviceId) {
LinuxSysmanImp *pLinuxSysmanImp = static_cast<LinuxSysmanImp *>(pOsSysman);
pSysfsAccess = &pLinuxSysmanImp->getSysfsAccess();
pSysmanKmdInterface = pLinuxSysmanImp->getSysmanKmdInterface();
pSysfsAccess = pSysmanKmdInterface->getSysFsAccess();
init();
}

View File

@@ -10,13 +10,14 @@
#include "level_zero/sysman/source/api/standby/sysman_os_standby.h"
#include "level_zero/sysman/source/api/standby/sysman_standby_imp.h"
#include "level_zero/sysman/source/shared/linux/sysman_fs_access.h"
#include "level_zero/sysman/source/shared/linux/sysman_fs_access_interface.h"
#include "level_zero/sysman/source/shared/linux/zes_os_sysman_imp.h"
namespace L0 {
namespace Sysman {
class SysmanKmdInterface;
class SysFsAccessInterface;
class LinuxStandbyImp : public OsStandby, NEO::NonCopyableOrMovableClass {
public:
@@ -32,7 +33,7 @@ class LinuxStandbyImp : public OsStandby, NEO::NonCopyableOrMovableClass {
protected:
SysmanKmdInterface *pSysmanKmdInterface = nullptr;
SysfsAccess *pSysfsAccess = nullptr;
SysFsAccessInterface *pSysfsAccess = nullptr;
private:
std::string standbyModeFile;

View File

@@ -19,7 +19,7 @@ const std::string standbyModeFile("gt/gt0/rc6_enable");
const std::string standbyModeFile1("gt/gt1/rc6_enable");
const std::string standbyModeFileLegacy("power/rc6_enable");
struct MockStandbySysfsAccess : public L0::Sysman::SysfsAccess {
struct MockStandbySysfsAccessInterface : public L0::Sysman::SysFsAccessInterface {
ze_result_t mockError = ZE_RESULT_SUCCESS;
int mockStandbyMode = -1;
bool isStandbyModeFileAvailable = true;
@@ -88,8 +88,8 @@ struct MockStandbySysfsAccess : public L0::Sysman::SysfsAccess {
mockError = error;
}
MockStandbySysfsAccess() = default;
~MockStandbySysfsAccess() override = default;
MockStandbySysfsAccessInterface() = default;
~MockStandbySysfsAccessInterface() override = default;
private:
bool isFileAccessible(const std::string file) {
@@ -107,6 +107,13 @@ class PublicLinuxStandbyImp : public L0::Sysman::LinuxStandbyImp {
using L0::Sysman::LinuxStandbyImp::pSysmanKmdInterface;
};
class PublicSysmanKmdInterfaceI915 : public L0::Sysman::SysmanKmdInterfaceI915 {
public:
PublicSysmanKmdInterfaceI915(const PRODUCT_FAMILY productFamily) : L0::Sysman::SysmanKmdInterfaceI915(productFamily) {}
~PublicSysmanKmdInterfaceI915() override = default;
using L0::Sysman::SysmanKmdInterface::pSysfsAccess;
};
} // namespace ult
} // namespace Sysman
} // namespace L0

View File

@@ -18,27 +18,39 @@ constexpr int standbyModeNever = 0;
constexpr int standbyModeInvalid = 0xff;
constexpr uint32_t mockHandleCount = 1u;
uint32_t mockSubDeviceHandleCount = 0u;
class ZesStandbyFixture : public SysmanDeviceFixture {
protected:
L0::Sysman::SysmanDevice *device = nullptr;
std::unique_ptr<MockStandbySysfsAccess> ptestSysfsAccess;
uint32_t subDeviceCount;
ze_bool_t onSubdevice;
uint32_t subdeviceId = 0;
};
class ZesStandbyFixtureI915 : public ZesStandbyFixture {
protected:
zes_standby_handle_t hSysmanStandby = {};
L0::Sysman::SysfsAccess *pOriginalSysfsAccess = nullptr;
PublicSysmanKmdInterfaceI915 *pSysmanKmdInterface = nullptr;
MockStandbySysfsAccessInterface *pSysfsAccess = nullptr;
void SetUp() override {
SysmanDeviceFixture::SetUp();
device = pSysmanDevice;
ptestSysfsAccess = std::make_unique<MockStandbySysfsAccess>();
pOriginalSysfsAccess = pLinuxSysmanImp->pSysfsAccess;
pLinuxSysmanImp->pSysfsAccess = ptestSysfsAccess.get();
ptestSysfsAccess->setVal(standbyModeFile, standbyModeDefault);
pSysmanDeviceImp->pStandbyHandleContext->handleList.clear();
subDeviceCount = pLinuxSysmanImp->getSubDeviceCount();
onSubdevice = (subDeviceCount == 0) ? false : true;
}
void TearDown() override {
pLinuxSysmanImp->pSysfsAccess = pOriginalSysfsAccess;
SysmanDeviceFixture::TearDown();
}
void mockKMDInterfaceSetup() {
pSysmanKmdInterface = new PublicSysmanKmdInterfaceI915(pLinuxSysmanImp->getProductFamily());
pSysfsAccess = new MockStandbySysfsAccessInterface();
pSysmanKmdInterface->pSysfsAccess.reset(pSysfsAccess);
pLinuxSysmanImp->pSysmanKmdInterface.reset(pSysmanKmdInterface);
}
std::vector<zes_standby_handle_t> getStandbyHandles(uint32_t count) {
std::vector<zes_standby_handle_t> handles(count, nullptr);
EXPECT_EQ(zesDeviceEnumStandbyDomains(device, &count, handles.data()), ZE_RESULT_SUCCESS);
@@ -46,40 +58,38 @@ class ZesStandbyFixture : public SysmanDeviceFixture {
}
};
TEST_F(ZesStandbyFixture, GivenKmdInterfaceWhenGettingFilenamesForStandbyForI915VersionAndBaseDirectoryExistsThenProperPathsAreReturned) {
TEST_F(ZesStandbyFixtureI915, GivenKmdInterfaceWhenGettingFilenamesForStandbyForI915VersionAndBaseDirectoryExistsThenProperPathsAreReturned) {
auto pSysmanKmdInterface = std::make_unique<SysmanKmdInterfaceI915>(pLinuxSysmanImp->getProductFamily());
bool baseDirectoryExists = true;
EXPECT_STREQ("gt/gt0/rc6_enable", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameStandbyModeControl, 0, baseDirectoryExists).c_str());
}
TEST_F(ZesStandbyFixture, GivenKmdInterfaceWhenGettingFilenamesForStandbyForI915VersionAndBaseDirectoryDoesntExistThenProperPathsAreReturned) {
TEST_F(ZesStandbyFixtureI915, GivenKmdInterfaceWhenGettingFilenamesForStandbyForI915VersionAndBaseDirectoryDoesntExistThenProperPathsAreReturned) {
auto pSysmanKmdInterface = std::make_unique<SysmanKmdInterfaceI915>(pLinuxSysmanImp->getProductFamily());
bool baseDirectoryExists = false;
EXPECT_STREQ("power/rc6_enable", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameStandbyModeControl, 0, baseDirectoryExists).c_str());
}
TEST_F(ZesStandbyFixture, GivenKmdInterfaceWhenGettingFilenamesForStandbyForXeVersionThenUnsupportedFeatureIsReturned) {
auto subDeviceCount = pLinuxSysmanImp->getSubDeviceCount();
ze_bool_t onSubdevice = (subDeviceCount == 0) ? false : true;
uint32_t subdeviceId = 0;
std::unique_ptr<PublicLinuxStandbyImp> pLinuxStandbyImp = std::make_unique<PublicLinuxStandbyImp>(pOsSysman, onSubdevice, subdeviceId);
auto pSysmanKmdInterface = std::make_unique<SysmanKmdInterfaceXe>(pLinuxSysmanImp->getProductFamily());
pLinuxStandbyImp->pSysmanKmdInterface = pSysmanKmdInterface.get();
EXPECT_FALSE(pLinuxStandbyImp->pSysmanKmdInterface->isStandbyModeControlAvailable());
TEST_F(ZesStandbyFixtureI915, GivenStandbyModeFilesNotAvailableWhenCallingEnumerateThenSuccessResultAndZeroCountIsReturned) {
zes_standby_promo_mode_t mode = {};
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, pLinuxStandbyImp->getMode(mode));
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, pLinuxStandbyImp->setMode(mode));
}
VariableBackup<decltype(NEO::SysCalls::sysCallsStat)> mockStat(&NEO::SysCalls::sysCallsStat, [](const std::string &filePath, struct stat *statbuf) -> int {
statbuf->st_mode = ~S_IRUSR;
return 0;
});
TEST_F(ZesStandbyFixture, GivenStandbyModeFilesNotAvailableWhenCallingEnumerateThenSuccessResultAndZeroCountIsReturned) {
uint32_t count = 0;
ptestSysfsAccess->isStandbyModeFileAvailable = false;
ze_result_t result = zesDeviceEnumStandbyDomains(device, &count, nullptr);
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
EXPECT_EQ(count, 0u);
}
TEST_F(ZesStandbyFixture, GivenComponentCountZeroWhenCallingzesStandbyGetThenNonZeroCountIsReturnedAndVerifyzesStandbyGetCallSucceeds) {
TEST_F(ZesStandbyFixtureI915, GivenComponentCountZeroWhenCallingzesStandbyGetThenNonZeroCountIsReturnedAndVerifyzesStandbyGetCallSucceeds) {
VariableBackup<decltype(NEO::SysCalls::sysCallsStat)> mockStat(&NEO::SysCalls::sysCallsStat, [](const std::string &filePath, struct stat *statbuf) -> int {
statbuf->st_mode = S_IRUSR;
return 0;
});
std::vector<zes_standby_handle_t> standbyHandle = {};
uint32_t count = 0;
@@ -102,10 +112,6 @@ TEST_F(ZesStandbyFixture, GivenComponentCountZeroWhenCallingzesStandbyGetThenNon
EXPECT_NE(nullptr, standbyHandle.data());
EXPECT_EQ(count, mockHandleCount);
auto subDeviceCount = pLinuxSysmanImp->getSubDeviceCount();
ze_bool_t onSubdevice = (subDeviceCount == 0) ? false : true;
uint32_t subdeviceId = 0;
std::unique_ptr<L0::Sysman::StandbyImp> ptestStandbyImp = std::make_unique<L0::Sysman::StandbyImp>(pSysmanDeviceImp->pStandbyHandleContext->pOsSysman, onSubdevice, subdeviceId);
count = 0;
pSysmanDeviceImp->pStandbyHandleContext->handleList.push_back(std::move(ptestStandbyImp));
@@ -126,7 +132,9 @@ TEST_F(ZesStandbyFixture, GivenComponentCountZeroWhenCallingzesStandbyGetThenNon
pSysmanDeviceImp->pStandbyHandleContext->handleList.pop_back();
}
TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbyGetPropertiesThenVerifyzesStandbyGetPropertiesCallSucceeds) {
TEST_F(ZesStandbyFixtureI915, GivenValidStandbyHandleWhenCallingzesStandbyGetPropertiesThenVerifyzesStandbyGetPropertiesCallSucceeds) {
mockKMDInterfaceSetup();
zes_standby_properties_t properties = {};
auto handles = getStandbyHandles(mockHandleCount);
@@ -139,8 +147,12 @@ TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbyGetPropert
}
}
TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbyGetModeThenVerifyzesStandbyGetModeCallSucceedsForDefaultMode) {
TEST_F(ZesStandbyFixtureI915, GivenValidStandbyHandleWhenCallingzesStandbyGetModeThenVerifyzesStandbyGetModeCallSucceedsForDefaultMode) {
mockKMDInterfaceSetup();
pSysfsAccess->setVal(standbyModeFile, standbyModeDefault);
zes_standby_promo_mode_t mode = {};
auto handles = getStandbyHandles(mockHandleCount);
for (auto hSysmanStandby : handles) {
@@ -150,9 +162,12 @@ TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbyGetModeThe
}
}
TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbyGetModeThenVerifyzesStandbyGetModeCallSucceedsForNeverMode) {
TEST_F(ZesStandbyFixtureI915, GivenValidStandbyHandleWhenCallingzesStandbyGetModeThenVerifyzesStandbyGetModeCallSucceedsForNeverMode) {
zes_standby_promo_mode_t mode = {};
ptestSysfsAccess->setVal(standbyModeFile, standbyModeNever);
mockKMDInterfaceSetup();
pSysfsAccess->setVal(standbyModeFile, standbyModeNever);
auto handles = getStandbyHandles(mockHandleCount);
for (auto hSysmanStandby : handles) {
@@ -162,21 +177,25 @@ TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbyGetModeThe
}
}
TEST_F(ZesStandbyFixture, GivenInvalidStandbyFileWhenReadisCalledThenExpectFailure) {
TEST_F(ZesStandbyFixtureI915, GivenInvalidStandbyFileWhenReadisCalledThenExpectFailure) {
mockKMDInterfaceSetup();
zes_standby_promo_mode_t mode = {};
ptestSysfsAccess->setValReturnError(ZE_RESULT_ERROR_NOT_AVAILABLE);
pSysfsAccess->setValReturnError(ZE_RESULT_ERROR_NOT_AVAILABLE);
auto handles = getStandbyHandles(mockHandleCount);
for (auto hSysmanStandby : handles) {
ASSERT_NE(nullptr, hSysmanStandby);
EXPECT_NE(ZE_RESULT_SUCCESS, zesStandbyGetMode(hSysmanStandby, &mode));
}
}
TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbyGetModeThenVerifyzesStandbyGetModeCallFailsForInvalidMode) {
TEST_F(ZesStandbyFixtureI915, GivenValidStandbyHandleWhenCallingzesStandbyGetModeThenVerifyzesStandbyGetModeCallFailsForInvalidMode) {
mockKMDInterfaceSetup();
zes_standby_promo_mode_t mode = {};
ptestSysfsAccess->setVal(standbyModeFile, standbyModeInvalid);
pSysfsAccess->setVal(standbyModeFile, standbyModeInvalid);
auto handles = getStandbyHandles(mockHandleCount);
for (auto hSysmanStandby : handles) {
@@ -185,12 +204,15 @@ TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbyGetModeThe
}
}
TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbyGetModeOnUnavailableFileThenVerifyzesStandbyGetModeCallFailsForUnsupportedFeature) {
TEST_F(ZesStandbyFixtureI915, GivenValidStandbyHandleWhenCallingzesStandbyGetModeOnUnavailableFileThenVerifyzesStandbyGetModeCallFailsForUnsupportedFeature) {
mockKMDInterfaceSetup();
zes_standby_promo_mode_t mode = {};
ptestSysfsAccess->setVal(standbyModeFile, standbyModeInvalid);
pSysfsAccess->setVal(standbyModeFile, standbyModeInvalid);
auto handles = getStandbyHandles(mockHandleCount);
ptestSysfsAccess->isStandbyModeFileAvailable = false;
pSysfsAccess->isStandbyModeFileAvailable = false;
for (auto hSysmanStandby : handles) {
ASSERT_NE(nullptr, hSysmanStandby);
@@ -198,12 +220,14 @@ TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbyGetModeOnU
}
}
TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbyGetModeWithInsufficientPermissionsThenVerifyzesStandbyGetModeCallFailsForInsufficientPermissions) {
zes_standby_promo_mode_t mode = {};
ptestSysfsAccess->setVal(standbyModeFile, standbyModeInvalid);
auto handles = getStandbyHandles(mockHandleCount);
TEST_F(ZesStandbyFixtureI915, GivenValidStandbyHandleWhenCallingzesStandbyGetModeWithInsufficientPermissionsThenVerifyzesStandbyGetModeCallFailsForInsufficientPermissions) {
ptestSysfsAccess->mockStandbyFileMode &= ~S_IRUSR;
mockKMDInterfaceSetup();
zes_standby_promo_mode_t mode = {};
pSysfsAccess->setVal(standbyModeFile, standbyModeInvalid);
auto handles = getStandbyHandles(mockHandleCount);
pSysfsAccess->mockStandbyFileMode &= ~S_IRUSR;
for (auto hSysmanStandby : handles) {
ASSERT_NE(nullptr, hSysmanStandby);
@@ -211,9 +235,11 @@ TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbyGetModeWit
}
}
TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbySetModeThenwithUnwritableFileVerifySysmanzesySetModeCallFailedWithInsufficientPermissions) {
TEST_F(ZesStandbyFixtureI915, GivenValidStandbyHandleWhenCallingzesStandbySetModeThenwithUnwritableFileVerifySysmanzesySetModeCallFailedWithInsufficientPermissions) {
mockKMDInterfaceSetup();
auto handles = getStandbyHandles(mockHandleCount);
ptestSysfsAccess->mockStandbyFileMode &= ~S_IWUSR;
pSysfsAccess->mockStandbyFileMode &= ~S_IWUSR;
for (auto hSysmanStandby : handles) {
ASSERT_NE(nullptr, hSysmanStandby);
@@ -221,38 +247,27 @@ TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbySetModeThe
}
}
TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbySetModeOnUnavailableFileThenVerifyzesStandbySetModeCallFailsForUnsupportedFeature) {
auto handles = getStandbyHandles(mockHandleCount);
TEST_F(ZesStandbyFixtureI915, GivenValidStandbyHandleWhenCallingzesStandbySetModeOnUnavailableFileThenVerifyzesStandbySetModeCallFailsForUnsupportedFeature) {
mockKMDInterfaceSetup();
auto handles = getStandbyHandles(mockHandleCount);
pSysfsAccess->isStandbyModeFileAvailable = false;
ptestSysfsAccess->isStandbyModeFileAvailable = false;
for (auto hSysmanStandby : handles) {
ASSERT_NE(nullptr, hSysmanStandby);
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zesStandbySetMode(hSysmanStandby, ZES_STANDBY_PROMO_MODE_NEVER));
}
}
TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbySetModeNeverThenVerifySysmanzesySetModeCallSucceeds) {
TEST_F(ZesStandbyFixtureI915, GivenValidStandbyHandleWhenCallingzesStandbySetModeNeverThenVerifySysmanzesSetModeCallSucceeds) {
mockKMDInterfaceSetup();
auto handles = getStandbyHandles(mockHandleCount);
for (auto hSysmanStandby : handles) {
ASSERT_NE(nullptr, hSysmanStandby);
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 = getStandbyHandles(mockHandleCount);
for (auto hSysmanStandby : handles) {
ASSERT_NE(nullptr, hSysmanStandby);
zes_standby_promo_mode_t mode;
ptestSysfsAccess->setVal(standbyModeFile, standbyModeNever);
pSysfsAccess->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));
@@ -261,20 +276,40 @@ TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbySetModeDef
}
}
TEST_F(ZesStandbyFixture, GivenOnSubdeviceNotSetWhenValidatingosStandbyGetPropertiesThenSuccessIsReturned) {
auto subDeviceCount = pLinuxSysmanImp->getSubDeviceCount();
TEST_F(ZesStandbyFixtureI915, GivenValidStandbyHandleWhenCallingzesStandbySetModeDefaultThenVerifySysmanzesSetModeCallSucceeds) {
mockKMDInterfaceSetup();
auto handles = getStandbyHandles(mockHandleCount);
for (auto hSysmanStandby : handles) {
ASSERT_NE(nullptr, hSysmanStandby);
zes_standby_promo_mode_t mode;
pSysfsAccess->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(ZesStandbyFixtureI915, GivenOnSubdeviceNotSetWhenValidatingosStandbyGetPropertiesThenSuccessIsReturned) {
mockKMDInterfaceSetup();
zes_standby_properties_t properties = {};
ze_bool_t onSubdevice = (subDeviceCount == 0) ? false : true;
uint32_t subdeviceId = 0;
auto pSysfsAccess = std::make_unique<MockStandbySysfsAccessInterface>();
std::unique_ptr<PublicLinuxStandbyImp> pLinuxStandbyImp = std::make_unique<PublicLinuxStandbyImp>(pOsSysman, onSubdevice, subdeviceId);
pLinuxStandbyImp->pSysfsAccess = pSysfsAccess.get();
EXPECT_EQ(ZE_RESULT_SUCCESS, pLinuxStandbyImp->osStandbyGetProperties(properties));
EXPECT_EQ(properties.subdeviceId, subdeviceId);
EXPECT_EQ(properties.onSubdevice, onSubdevice);
}
TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbySetModeDefaultWithLegacyPathThenVerifySysmanzesySetModeCallSucceeds) {
TEST_F(ZesStandbyFixtureI915, GivenValidStandbyHandleWhenCallingzesStandbySetModeDefaultWithLegacyPathThenVerifySysmanzesSetModeCallSucceeds) {
mockKMDInterfaceSetup();
pSysmanDeviceImp->pStandbyHandleContext->handleList.clear();
ptestSysfsAccess->directoryExistsResult = false;
pSysfsAccess->directoryExistsResult = false;
pSysmanDeviceImp->pStandbyHandleContext->init(pLinuxSysmanImp->getSubDeviceCount());
auto handles = getStandbyHandles(mockHandleCount);
@@ -282,7 +317,7 @@ TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbySetModeDef
for (auto hSysmanStandby : handles) {
ASSERT_NE(nullptr, hSysmanStandby);
zes_standby_promo_mode_t mode;
ptestSysfsAccess->setVal(standbyModeFile, standbyModeNever);
pSysfsAccess->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));
@@ -291,17 +326,18 @@ TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbySetModeDef
}
}
TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbySetModeNeverWithLegacyPathThenVerifySysmanzesySetModeCallSucceeds) {
pSysmanDeviceImp->pStandbyHandleContext->handleList.clear();
ptestSysfsAccess->directoryExistsResult = false;
pSysmanDeviceImp->pStandbyHandleContext->init(pLinuxSysmanImp->getSubDeviceCount());
TEST_F(ZesStandbyFixtureI915, GivenValidStandbyHandleWhenCallingzesStandbySetModeNeverWithLegacyPathThenVerifySysmanzesSetModeCallSucceeds) {
mockKMDInterfaceSetup();
pSysmanDeviceImp->pStandbyHandleContext->handleList.clear();
pSysfsAccess->directoryExistsResult = false;
pSysmanDeviceImp->pStandbyHandleContext->init(pLinuxSysmanImp->getSubDeviceCount());
auto handles = getStandbyHandles(mockHandleCount);
for (auto hSysmanStandby : handles) {
ASSERT_NE(nullptr, hSysmanStandby);
zes_standby_promo_mode_t mode;
ptestSysfsAccess->setVal(standbyModeFile, standbyModeDefault);
pSysfsAccess->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));
@@ -310,36 +346,66 @@ TEST_F(ZesStandbyFixture, GivenValidStandbyHandleWhenCallingzesStandbySetModeNev
}
}
class ZesStandbyMultiDeviceFixture : public SysmanMultiDeviceFixture {
class ZesStandbyFixtureXe : public ZesStandbyFixture {
protected:
zes_standby_handle_t hSysmanStandby = {};
std::unique_ptr<MockStandbySysfsAccess> ptestSysfsAccess;
L0::Sysman::SysfsAccess *pOriginalSysfsAccess = nullptr;
void SetUp() override {
SysmanDeviceFixture::SetUp();
device = pSysmanDevice;
pSysmanDeviceImp->pStandbyHandleContext->handleList.clear();
subDeviceCount = pLinuxSysmanImp->getSubDeviceCount();
onSubdevice = (subDeviceCount == 0) ? false : true;
}
void TearDown() override {
SysmanDeviceFixture::TearDown();
}
};
TEST_F(ZesStandbyFixtureXe, GivenKmdInterfaceWhenGettingFilenamesForStandbyThenUnsupportedFeatureIsReturned) {
std::unique_ptr<PublicLinuxStandbyImp> pLinuxStandbyImp = std::make_unique<PublicLinuxStandbyImp>(pOsSysman, onSubdevice, subdeviceId);
auto pSysmanKmdInterface = std::make_unique<SysmanKmdInterfaceXe>(pLinuxSysmanImp->getProductFamily());
pLinuxStandbyImp->pSysmanKmdInterface = pSysmanKmdInterface.get();
EXPECT_FALSE(pLinuxStandbyImp->pSysmanKmdInterface->isStandbyModeControlAvailable());
zes_standby_promo_mode_t mode = {};
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, pLinuxStandbyImp->getMode(mode));
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, pLinuxStandbyImp->setMode(mode));
}
TEST_F(ZesStandbyFixtureXe, GivenKmdInterfaceWhenQueryingSupportForStandbyForXeVersionThenProperStausIsReturned) {
auto pSysmanKmdInterface = std::make_unique<SysmanKmdInterfaceXe>(pLinuxSysmanImp->getProductFamily());
EXPECT_EQ(false, pSysmanKmdInterface->isStandbyModeControlAvailable());
}
class ZesStandbyMultiDeviceFixture : public SysmanMultiDeviceFixture {
protected:
L0::Sysman::SysmanDevice *device = nullptr;
uint32_t subDeviceCount;
ze_bool_t onSubdevice;
uint32_t subdeviceId = 0;
void SetUp() override {
SysmanMultiDeviceFixture::SetUp();
device = pSysmanDevice;
mockSubDeviceHandleCount = pLinuxSysmanImp->getSubDeviceCount();
ptestSysfsAccess = std::make_unique<MockStandbySysfsAccess>();
pOriginalSysfsAccess = pLinuxSysmanImp->pSysfsAccess;
pLinuxSysmanImp->pSysfsAccess = ptestSysfsAccess.get();
ptestSysfsAccess->setVal(standbyModeFile, standbyModeDefault);
pSysmanDeviceImp->pStandbyHandleContext->handleList.clear();
subDeviceCount = pLinuxSysmanImp->getSubDeviceCount();
onSubdevice = (subDeviceCount == 0) ? false : true;
}
void TearDown() override {
pLinuxSysmanImp->pSysfsAccess = pOriginalSysfsAccess;
SysmanMultiDeviceFixture::TearDown();
}
std::vector<zes_standby_handle_t> getStandbyHandles(uint32_t count) {
std::vector<zes_standby_handle_t> handles(count, nullptr);
EXPECT_EQ(zesDeviceEnumStandbyDomains(device, &count, handles.data()), ZE_RESULT_SUCCESS);
return handles;
}
};
TEST_F(ZesStandbyMultiDeviceFixture, GivenComponentCountZeroWhenCallingzesStandbyGetThenNonZeroCountIsReturnedAndVerifyzesStandbyGetCallSucceeds) {
VariableBackup<decltype(NEO::SysCalls::sysCallsStat)> mockStat(&NEO::SysCalls::sysCallsStat, [](const std::string &filePath, struct stat *statbuf) -> int {
statbuf->st_mode = S_IRUSR;
return 0;
});
std::vector<zes_standby_handle_t> standbyHandle = {};
uint32_t count = 0;
@@ -364,11 +430,12 @@ TEST_F(ZesStandbyMultiDeviceFixture, GivenComponentCountZeroWhenCallingzesStandb
}
TEST_F(ZesStandbyMultiDeviceFixture, GivenOnSubdeviceNotSetWhenValidatingosStandbyGetPropertiesThenSuccessIsReturned) {
auto subDeviceCount = pLinuxSysmanImp->getSubDeviceCount();
zes_standby_properties_t properties = {};
ze_bool_t onSubdevice = (subDeviceCount == 0) ? false : true;
uint32_t subdeviceId = 0;
auto pSysfsAccess = std::make_unique<MockStandbySysfsAccessInterface>();
std::unique_ptr<PublicLinuxStandbyImp> pLinuxStandbyImp = std::make_unique<PublicLinuxStandbyImp>(pOsSysman, onSubdevice, subdeviceId);
pLinuxStandbyImp->pSysfsAccess = pSysfsAccess.get();
zes_standby_properties_t properties = {};
EXPECT_EQ(ZE_RESULT_SUCCESS, pLinuxStandbyImp->osStandbyGetProperties(properties));
EXPECT_EQ(properties.subdeviceId, subdeviceId);
EXPECT_EQ(properties.onSubdevice, onSubdevice);