Skip to content

Commit 8154ce7

Browse files
test(sysman): Added and Removed the RAS ULTs as required
Related-To: NEO-12707 Signed-off-by: Pratik Bari <[email protected]>
1 parent 74432a3 commit 8154ce7

File tree

3 files changed

+118
-28
lines changed

3 files changed

+118
-28
lines changed

level_zero/sysman/test/unit_tests/sources/ras/linux/test_zes_ras.cpp

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
/*
2-
* Copyright (C) 2023 Intel Corporation
2+
* Copyright (C) 2023-2024 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
66
*/
77

88
#include "shared/test/common/libult/linux/drm_mock.h"
99

10+
#include "level_zero/sysman/source/api/ras/linux/ras_util/sysman_ras_util.h"
1011
#include "level_zero/sysman/source/sysman_const.h"
1112
#include "level_zero/sysman/test/unit_tests/sources/linux/mock_sysman_fixture.h"
1213
#include "level_zero/sysman/test/unit_tests/sources/ras/linux/mock_sysman_ras.h"
@@ -540,19 +541,6 @@ HWTEST2_F(SysmanRasFixture, GivenValidRasHandleAndHandleCountZeroWhenCallingReIn
540541
EXPECT_EQ(count, mockHandleCount);
541542
}
542543

543-
HWTEST2_F(SysmanRasFixture, GivenValidRasHandleAndRasUtilInterfaceIsNullWhenRequestingCountWithzesGetStateStateThenVerifyGetStateReturnsFailure, isRasNotSupportedProduct) {
544-
bool isSubDevice = true;
545-
uint32_t subDeviceId = 0u;
546-
547-
auto pLinuxRasImp = std::make_unique<PublicLinuxRasImp>(pOsSysman, ZES_RAS_ERROR_TYPE_CORRECTABLE, isSubDevice, subDeviceId);
548-
pLinuxRasImp->rasSources.clear();
549-
pLinuxRasImp->rasSources.push_back(std::make_unique<L0::Sysman::LinuxRasSourceGt>(pLinuxSysmanImp, ZES_RAS_ERROR_TYPE_CORRECTABLE, isSubDevice, subDeviceId));
550-
pLinuxRasImp->rasSources.push_back(std::make_unique<L0::Sysman::LinuxRasSourceHbm>(pLinuxSysmanImp, ZES_RAS_ERROR_TYPE_CORRECTABLE, isSubDevice, subDeviceId));
551-
552-
zes_ras_state_t state = {};
553-
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, pLinuxRasImp->osRasGetState(state, 0));
554-
}
555-
556544
HWTEST2_F(SysmanRasFixture, GivenValidRasHandleWhenCallingZesGetRasStateAndFirmwareInterfaceIsAbsentOtherInterfacesAreAlsoAbsentThenCallFails, IsPVC) {
557545
pDrm->setMemoryType(NEO::DeviceBlobConstants::MemoryType::hbm2e);
558546
pFsAccess->mockReadVal = true;
@@ -573,6 +561,13 @@ HWTEST2_F(SysmanRasFixture, GivenValidRasHandleWhenCallingZesGetRasStateAndFirmw
573561
}
574562
}
575563

564+
TEST_F(SysmanRasFixture, GivenRasUtilAsNoneWhenCallingRasGetStateAndRasGetCategoryCountThenErrorAndNoCategoryCountIsReturned) {
565+
auto pRasUtil = std::make_unique<RasUtilNone>();
566+
zes_ras_state_t state = {};
567+
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, pRasUtil->rasGetState(state, false));
568+
EXPECT_EQ(0u, pRasUtil->rasGetCategoryCount());
569+
}
570+
576571
struct SysmanRasMultiDeviceFixture : public SysmanMultiDeviceFixture {
577572
protected:
578573
std::unique_ptr<MockRasFsAccess> pFsAccess;

level_zero/sysman/test/unit_tests/sources/ras/linux/test_zes_ras_exp.cpp

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#include "shared/test/common/libult/linux/drm_mock.h"
99

10+
#include "level_zero/sysman/source/api/ras/linux/ras_util/sysman_ras_util.h"
1011
#include "level_zero/sysman/source/sysman_const.h"
1112
#include "level_zero/sysman/test/unit_tests/sources/linux/mock_sysman_fixture.h"
1213
#include "level_zero/sysman/test/unit_tests/sources/ras/linux/mock_sysman_ras.h"
@@ -680,20 +681,6 @@ HWTEST2_F(SysmanRasExpFixture, GivenValidRasHandleAndRasUtilInterfaceIsNullWhenC
680681
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, pLinuxRasImp->osRasClearStateExp(ZES_RAS_ERROR_CATEGORY_EXP_DRIVER_ERRORS));
681682
}
682683

683-
HWTEST2_F(SysmanRasExpFixture, GivenValidRasHandleAndRasUtilInterfaceIsNullWhenCallingzesGetStateStateExpThenVerifyGetStateExpReturnsFailure, IsNotPVC) {
684-
bool isSubDevice = true;
685-
uint32_t subDeviceId = 0u;
686-
687-
auto pLinuxRasImp = std::make_unique<PublicLinuxRasImp>(pOsSysman, ZES_RAS_ERROR_TYPE_CORRECTABLE, isSubDevice, subDeviceId);
688-
pLinuxRasImp->rasSources.clear();
689-
pLinuxRasImp->rasSources.push_back(std::make_unique<L0::Sysman::LinuxRasSourceGt>(pLinuxSysmanImp, ZES_RAS_ERROR_TYPE_CORRECTABLE, isSubDevice, subDeviceId));
690-
pLinuxRasImp->rasSources.push_back(std::make_unique<L0::Sysman::LinuxRasSourceHbm>(pLinuxSysmanImp, ZES_RAS_ERROR_TYPE_CORRECTABLE, isSubDevice, subDeviceId));
691-
692-
uint32_t count = 2;
693-
std::vector<zes_ras_state_exp_t> rasStates(count);
694-
EXPECT_EQ(ZE_RESULT_ERROR_DEPENDENCY_UNAVAILABLE, pLinuxRasImp->osRasGetStateExp(&count, rasStates.data()));
695-
}
696-
697684
HWTEST2_F(SysmanRasExpFixture, GivenValidRasHandleWhenCallingzesRasClearStateExpAndGetStateExpForHbmThenVerifyErrorCountersAreCleared, IsPVC) {
698685
pDrm->setMemoryType(NEO::DeviceBlobConstants::MemoryType::hbm2);
699686
pPmuInterface->mockPmuReadResult = true;
@@ -765,6 +752,13 @@ HWTEST2_F(SysmanRasExpFixture, GivenValidRasHandleWhenCallingzesRasClearStateExp
765752
}
766753
}
767754

755+
TEST_F(SysmanRasExpFixture, GivenRasUtilAsNoneWhenCallingRasGetStateExpAndRasClearStateExpThenErrorAreReturned) {
756+
auto pRasUtil = std::make_unique<RasUtilNone>();
757+
std::vector<zes_ras_state_exp_t> rasStates(maxRasErrorCategoryExpCount);
758+
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, pRasUtil->rasGetStateExp(maxRasErrorCategoryExpCount, rasStates.data()));
759+
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, pRasUtil->rasClearStateExp(ZES_RAS_ERROR_CATEGORY_EXP_COMPUTE_ERRORS));
760+
}
761+
768762
struct SysmanRasExpMultiDeviceFixture : public SysmanMultiDeviceFixture {
769763
protected:
770764
std::unique_ptr<MockRasFsAccess> pFsAccess;

level_zero/sysman/test/unit_tests/sources/shared/linux/product_helper/sysman_product_helper_ras_tests.cpp

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,107 @@ HWTEST2_F(SysmanProductHelperRasTest, GivenValidRasHandleWhenRequestingCountWith
5656
EXPECT_EQ(3u, count);
5757
}
5858

59+
HWTEST2_F(SysmanProductHelperRasTest, GivenValidRasHandleAndRasSourcesWhenCallingRasGetStateThenSuccessIsReturned, IsPVC) {
60+
61+
VariableBackup<decltype(NEO::SysCalls::sysCallsReadlink)> mockReadLink(&NEO::SysCalls::sysCallsReadlink, [](const char *path, char *buf, size_t bufsize) -> int {
62+
constexpr size_t sizeofPath = sizeof("/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:01.0/0000:03:00.0");
63+
strcpy_s(buf, sizeofPath, "/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:01.0/0000:03:00.0");
64+
return sizeofPath;
65+
});
66+
67+
VariableBackup<decltype(NEO::SysCalls::sysCallsPread)> mockPread(&NEO::SysCalls::sysCallsPread, [](int fd, void *buf, size_t count, off_t offset) -> ssize_t {
68+
std::ostringstream oStream;
69+
oStream << pmuDriverType;
70+
std::string value = oStream.str();
71+
memcpy(buf, value.data(), count);
72+
return count;
73+
});
74+
75+
VariableBackup<L0::Sysman::FsAccessInterface *> fsBackup(&pLinuxSysmanImp->pFsAccess);
76+
auto pFsAccess = std::make_unique<MockRasFsAccess>();
77+
pLinuxSysmanImp->pFsAccess = pFsAccess.get();
78+
79+
auto pPmuInterface = std::make_unique<MockRasPmuInterfaceImp>(pLinuxSysmanImp);
80+
pPmuInterface->mockPmuReadAfterClear = true;
81+
VariableBackup<L0::Sysman::PmuInterface *> pmuBackup(&pLinuxSysmanImp->pPmuInterface);
82+
pLinuxSysmanImp->pPmuInterface = pPmuInterface.get();
83+
84+
VariableBackup<L0::Sysman::SysFsAccessInterface *> sysfsBackup(&pLinuxSysmanImp->pSysfsAccess);
85+
auto pSysfsAccess = std::make_unique<MockRasSysfsAccess>();
86+
pLinuxSysmanImp->pSysfsAccess = pSysfsAccess.get();
87+
88+
bool isSubDevice = false;
89+
uint32_t subDeviceId = 0u;
90+
91+
auto pLinuxRasImp = std::make_unique<PublicLinuxRasImp>(pOsSysman, ZES_RAS_ERROR_TYPE_CORRECTABLE, isSubDevice, subDeviceId);
92+
pLinuxRasImp->rasSources.clear();
93+
pLinuxRasImp->rasSources.push_back(std::make_unique<L0::Sysman::LinuxRasSourceGt>(pLinuxSysmanImp, ZES_RAS_ERROR_TYPE_CORRECTABLE, isSubDevice, subDeviceId));
94+
pLinuxRasImp->rasSources.push_back(std::make_unique<L0::Sysman::LinuxRasSourceHbm>(pLinuxSysmanImp, ZES_RAS_ERROR_TYPE_CORRECTABLE, isSubDevice, subDeviceId));
95+
96+
zes_ras_state_t state = {};
97+
EXPECT_EQ(ZE_RESULT_SUCCESS, pLinuxRasImp->osRasGetState(state, 0));
98+
EXPECT_EQ(state.category[ZES_RAS_ERROR_CAT_RESET], 0u);
99+
EXPECT_EQ(state.category[ZES_RAS_ERROR_CAT_PROGRAMMING_ERRORS], 0u);
100+
EXPECT_EQ(state.category[ZES_RAS_ERROR_CAT_DRIVER_ERRORS], 0u);
101+
EXPECT_EQ(state.category[ZES_RAS_ERROR_CAT_COMPUTE_ERRORS], correctableGrfErrorCount + correctableEuErrorCount + initialCorrectableComputeErrors);
102+
EXPECT_EQ(state.category[ZES_RAS_ERROR_CAT_NON_COMPUTE_ERRORS], 0u);
103+
EXPECT_EQ(state.category[ZES_RAS_ERROR_CAT_CACHE_ERRORS], 0u);
104+
EXPECT_EQ(state.category[ZES_RAS_ERROR_CAT_DISPLAY_ERRORS], 0u);
105+
}
106+
107+
HWTEST2_F(SysmanProductHelperRasTest, GivenValidRasHandleAndRasSourcesWhenCallingRasGetStateStateExpThenSuccessIsReturned, IsPVC) {
108+
109+
VariableBackup<decltype(NEO::SysCalls::sysCallsReadlink)> mockReadLink(&NEO::SysCalls::sysCallsReadlink, [](const char *path, char *buf, size_t bufsize) -> int {
110+
constexpr size_t sizeofPath = sizeof("/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:01.0/0000:03:00.0");
111+
strcpy_s(buf, sizeofPath, "/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:01.0/0000:03:00.0");
112+
return sizeofPath;
113+
});
114+
115+
VariableBackup<decltype(NEO::SysCalls::sysCallsPread)> mockPread(&NEO::SysCalls::sysCallsPread, [](int fd, void *buf, size_t count, off_t offset) -> ssize_t {
116+
std::ostringstream oStream;
117+
oStream << pmuDriverType;
118+
std::string value = oStream.str();
119+
memcpy(buf, value.data(), count);
120+
return count;
121+
});
122+
123+
VariableBackup<L0::Sysman::FsAccessInterface *> fsBackup(&pLinuxSysmanImp->pFsAccess);
124+
auto pFsAccess = std::make_unique<MockRasFsAccess>();
125+
pLinuxSysmanImp->pFsAccess = pFsAccess.get();
126+
127+
auto pPmuInterface = std::make_unique<MockRasPmuInterfaceImp>(pLinuxSysmanImp);
128+
pPmuInterface->mockPmuReadAfterClear = true;
129+
VariableBackup<L0::Sysman::PmuInterface *> pmuBackup(&pLinuxSysmanImp->pPmuInterface);
130+
pLinuxSysmanImp->pPmuInterface = pPmuInterface.get();
131+
132+
VariableBackup<L0::Sysman::SysFsAccessInterface *> sysfsBackup(&pLinuxSysmanImp->pSysfsAccess);
133+
auto pSysfsAccess = std::make_unique<MockRasSysfsAccess>();
134+
pLinuxSysmanImp->pSysfsAccess = pSysfsAccess.get();
135+
136+
bool isSubDevice = false;
137+
uint32_t subDeviceId = 0u;
138+
139+
auto pLinuxRasImp = std::make_unique<PublicLinuxRasImp>(pOsSysman, ZES_RAS_ERROR_TYPE_CORRECTABLE, isSubDevice, subDeviceId);
140+
pLinuxRasImp->rasSources.clear();
141+
pLinuxRasImp->rasSources.push_back(std::make_unique<L0::Sysman::LinuxRasSourceGt>(pLinuxSysmanImp, ZES_RAS_ERROR_TYPE_CORRECTABLE, isSubDevice, subDeviceId));
142+
pLinuxRasImp->rasSources.push_back(std::make_unique<L0::Sysman::LinuxRasSourceHbm>(pLinuxSysmanImp, ZES_RAS_ERROR_TYPE_CORRECTABLE, isSubDevice, subDeviceId));
143+
144+
uint32_t count = 2;
145+
std::vector<zes_ras_state_exp_t> rasStates(count);
146+
EXPECT_EQ(ZE_RESULT_SUCCESS, pLinuxRasImp->osRasGetStateExp(&count, rasStates.data()));
147+
for (uint32_t i = 0; i < count; i++) {
148+
if (rasStates[i].category == ZES_RAS_ERROR_CATEGORY_EXP_COMPUTE_ERRORS) {
149+
uint32_t expectedErrCount = correctableGrfErrorCount + correctableEuErrorCount + initialCorrectableComputeErrors;
150+
EXPECT_EQ(rasStates[i].errorCounter, expectedErrCount);
151+
break;
152+
} else if (rasStates[i].category == ZES_RAS_ERROR_CATEGORY_EXP_NON_COMPUTE_ERRORS) {
153+
uint32_t expectedErrCount = 0u;
154+
EXPECT_EQ(rasStates[i].errorCounter, expectedErrCount);
155+
break;
156+
}
157+
}
158+
}
159+
59160
} // namespace ult
60161
} // namespace Sysman
61162
} // namespace L0

0 commit comments

Comments
 (0)