@@ -56,6 +56,107 @@ HWTEST2_F(SysmanProductHelperRasTest, GivenValidRasHandleWhenRequestingCountWith
56
56
EXPECT_EQ (3u , count);
57
57
}
58
58
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
+
59
160
} // namespace ult
60
161
} // namespace Sysman
61
162
} // namespace L0
0 commit comments