diff --git a/level_zero/tools/source/sysman/frequency/linux/os_frequency_imp.cpp b/level_zero/tools/source/sysman/frequency/linux/os_frequency_imp.cpp index f5ed97ea97..8b5b18cb06 100644 --- a/level_zero/tools/source/sysman/frequency/linux/os_frequency_imp.cpp +++ b/level_zero/tools/source/sysman/frequency/linux/os_frequency_imp.cpp @@ -25,6 +25,9 @@ ze_result_t LinuxFrequencyImp::getMin(double &min) { ze_result_t result = pSysfsAccess->read(minFreqFile, intval); if (ZE_RESULT_SUCCESS != result) { + if (result == ZE_RESULT_ERROR_NOT_AVAILABLE) { + result = ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } return result; } min = intval; @@ -34,6 +37,9 @@ ze_result_t LinuxFrequencyImp::getMin(double &min) { ze_result_t LinuxFrequencyImp::setMin(double min) { ze_result_t result = pSysfsAccess->write(minFreqFile, min); if (ZE_RESULT_SUCCESS != result) { + if (result == ZE_RESULT_ERROR_NOT_AVAILABLE) { + result = ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } return result; } return ZE_RESULT_SUCCESS; @@ -44,6 +50,9 @@ ze_result_t LinuxFrequencyImp::getMax(double &max) { ze_result_t result = pSysfsAccess->read(maxFreqFile, intval); if (ZE_RESULT_SUCCESS != result) { + if (result == ZE_RESULT_ERROR_NOT_AVAILABLE) { + result = ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } return result; } max = intval; @@ -53,6 +62,9 @@ ze_result_t LinuxFrequencyImp::getMax(double &max) { ze_result_t LinuxFrequencyImp::setMax(double max) { ze_result_t result = pSysfsAccess->write(maxFreqFile, max); if (ZE_RESULT_SUCCESS != result) { + if (result == ZE_RESULT_ERROR_NOT_AVAILABLE) { + result = ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } return result; } return ZE_RESULT_SUCCESS; @@ -63,6 +75,9 @@ ze_result_t LinuxFrequencyImp::getRequest(double &request) { ze_result_t result = pSysfsAccess->read(requestFreqFile, intval); if (ZE_RESULT_SUCCESS != result) { + if (result == ZE_RESULT_ERROR_NOT_AVAILABLE) { + result = ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } return result; } request = intval; @@ -74,6 +89,9 @@ ze_result_t LinuxFrequencyImp::getTdp(double &tdp) { ze_result_t result = pSysfsAccess->read(tdpFreqFile, intval); if (ZE_RESULT_SUCCESS != result) { + if (result == ZE_RESULT_ERROR_NOT_AVAILABLE) { + result = ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } return result; } tdp = intval; @@ -85,6 +103,9 @@ ze_result_t LinuxFrequencyImp::getActual(double &actual) { ze_result_t result = pSysfsAccess->read(actualFreqFile, intval); if (ZE_RESULT_SUCCESS != result) { + if (result == ZE_RESULT_ERROR_NOT_AVAILABLE) { + result = ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } return result; } actual = intval; @@ -96,6 +117,9 @@ ze_result_t LinuxFrequencyImp::getEfficient(double &efficient) { ze_result_t result = pSysfsAccess->read(efficientFreqFile, intval); if (ZE_RESULT_SUCCESS != result) { + if (result == ZE_RESULT_ERROR_NOT_AVAILABLE) { + result = ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } return result; } efficient = intval; @@ -107,6 +131,9 @@ ze_result_t LinuxFrequencyImp::getMaxVal(double &maxVal) { ze_result_t result = pSysfsAccess->read(maxValFreqFile, intval); if (ZE_RESULT_SUCCESS != result) { + if (result == ZE_RESULT_ERROR_NOT_AVAILABLE) { + result = ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } return result; } maxVal = intval; @@ -118,6 +145,9 @@ ze_result_t LinuxFrequencyImp::getMinVal(double &minVal) { ze_result_t result = pSysfsAccess->read(minValFreqFile, intval); if (ZE_RESULT_SUCCESS != result) { + if (result == ZE_RESULT_ERROR_NOT_AVAILABLE) { + result = ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } return result; } minVal = intval; diff --git a/level_zero/tools/source/sysman/scheduler/linux/os_scheduler_imp.cpp b/level_zero/tools/source/sysman/scheduler/linux/os_scheduler_imp.cpp index a5dc149f83..dc660e6246 100644 --- a/level_zero/tools/source/sysman/scheduler/linux/os_scheduler_imp.cpp +++ b/level_zero/tools/source/sysman/scheduler/linux/os_scheduler_imp.cpp @@ -30,6 +30,9 @@ ze_result_t LinuxSchedulerImp::getPreemptTimeout(uint64_t &timeout, ze_bool_t ge if (result == ZE_RESULT_SUCCESS) { timeout = timeout * milliSecsToMicroSecs; } + if (result == ZE_RESULT_ERROR_NOT_AVAILABLE) { + result = ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } return result; } @@ -43,6 +46,9 @@ ze_result_t LinuxSchedulerImp::getTimesliceDuration(uint64_t ×lice, ze_bool if (result == ZE_RESULT_SUCCESS) { timeslice = timeslice * milliSecsToMicroSecs; } + if (result == ZE_RESULT_ERROR_NOT_AVAILABLE) { + result = ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } return result; } @@ -56,22 +62,37 @@ ze_result_t LinuxSchedulerImp::getHeartbeatInterval(uint64_t &heartbeat, ze_bool if (result == ZE_RESULT_SUCCESS) { heartbeat = heartbeat * milliSecsToMicroSecs; } + if (result == ZE_RESULT_ERROR_NOT_AVAILABLE) { + result = ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } return result; } ze_result_t LinuxSchedulerImp::setPreemptTimeout(uint64_t timeout) { timeout = timeout / milliSecsToMicroSecs; - return pSysfsAccess->write(preemptTimeoutMilliSecs, timeout); + ze_result_t result = pSysfsAccess->write(preemptTimeoutMilliSecs, timeout); + if (result == ZE_RESULT_ERROR_NOT_AVAILABLE) { + result = ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } + return result; } ze_result_t LinuxSchedulerImp::setTimesliceDuration(uint64_t timeslice) { timeslice = timeslice / milliSecsToMicroSecs; - return pSysfsAccess->write(timesliceDurationMilliSecs, timeslice); + ze_result_t result = pSysfsAccess->write(timesliceDurationMilliSecs, timeslice); + if (result == ZE_RESULT_ERROR_NOT_AVAILABLE) { + result = ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } + return result; } ze_result_t LinuxSchedulerImp::setHeartbeatInterval(uint64_t heartbeat) { heartbeat = heartbeat / milliSecsToMicroSecs; - return pSysfsAccess->write(heartbeatIntervalMilliSecs, heartbeat); + ze_result_t result = pSysfsAccess->write(heartbeatIntervalMilliSecs, heartbeat); + if (result == ZE_RESULT_ERROR_NOT_AVAILABLE) { + result = ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } + return result; } ze_bool_t LinuxSchedulerImp::canControlScheduler() { diff --git a/level_zero/tools/source/sysman/standby/linux/os_standby_imp.cpp b/level_zero/tools/source/sysman/standby/linux/os_standby_imp.cpp index 0d363e2da9..aac8425d3c 100644 --- a/level_zero/tools/source/sysman/standby/linux/os_standby_imp.cpp +++ b/level_zero/tools/source/sysman/standby/linux/os_standby_imp.cpp @@ -23,6 +23,9 @@ ze_result_t LinuxStandbyImp::getMode(zes_standby_promo_mode_t &mode) { int currentMode = -1; ze_result_t result = pSysfsAccess->read(standbyModeFile, currentMode); if (ZE_RESULT_SUCCESS != result) { + if (result == ZE_RESULT_ERROR_NOT_AVAILABLE) { + result = ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } return result; } if (standbyModeDefault == currentMode) { diff --git a/level_zero/tools/test/unit_tests/sources/sysman/frequency/linux/test_zes_frequency.cpp b/level_zero/tools/test/unit_tests/sources/sysman/frequency/linux/test_zes_frequency.cpp index 34b38327c0..6dc3373eeb 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/frequency/linux/test_zes_frequency.cpp +++ b/level_zero/tools/test/unit_tests/sources/sysman/frequency/linux/test_zes_frequency.cpp @@ -168,7 +168,7 @@ TEST_F(SysmanDeviceFrequencyFixture, GivenValidateFrequencyGetRangeWhengetMaxFai .WillByDefault(::testing::Invoke(pSysfsAccess.get(), &Mock::getValReturnError)); auto pFrequencyImp = std::make_unique(pOsSysman); zes_freq_range_t limit = {}; - EXPECT_EQ(ZE_RESULT_ERROR_NOT_AVAILABLE, pFrequencyImp->frequencyGetRange(&limit)); + EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, pFrequencyImp->frequencyGetRange(&limit)); } TEST_F(SysmanDeviceFrequencyFixture, GivenValidFrequencyHandleWhenCallingzesFrequencyGetRangeThenVerifyzesFrequencyGetRangeTestCallSucceeds) { @@ -190,7 +190,7 @@ TEST_F(SysmanDeviceFrequencyFixture, GivenValidFrequencyLimitsWhenCallingFrequen limits.max = 600.0; ON_CALL(*pSysfsAccess.get(), write(_, _)) .WillByDefault(::testing::Invoke(pSysfsAccess.get(), &Mock::setValMinReturnError)); - EXPECT_EQ(ZE_RESULT_ERROR_NOT_AVAILABLE, pFrequencyImp->frequencySetRange(&limits)); + EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, pFrequencyImp->frequencySetRange(&limits)); } TEST_F(SysmanDeviceFrequencyFixture, GivenValidFrequencyLimitsWhenCallingFrequencySetRangeForFailures2ThenAPIExitsGracefully) { @@ -202,7 +202,7 @@ TEST_F(SysmanDeviceFrequencyFixture, GivenValidFrequencyLimitsWhenCallingFrequen limits.max = maxFreq; ON_CALL(*pSysfsAccess.get(), write(_, _)) .WillByDefault(::testing::Invoke(pSysfsAccess.get(), &Mock::setValMaxReturnError)); - EXPECT_EQ(ZE_RESULT_ERROR_NOT_AVAILABLE, pFrequencyImp->frequencySetRange(&limits)); + EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, pFrequencyImp->frequencySetRange(&limits)); } TEST_F(SysmanDeviceFrequencyFixture, GivenValidFrequencyHandleWhenCallingzesFrequencySetRangeThenVerifyzesFrequencySetRangeTest1CallSucceeds) { @@ -313,19 +313,19 @@ TEST_F(SysmanDeviceFrequencyFixture, GivenValidStatePointerWhenValidatingfrequen zes_freq_state_t state = {}; ON_CALL(*pSysfsAccess.get(), read(_, _)) .WillByDefault(::testing::Invoke(pSysfsAccess.get(), &Mock::getValRequestReturnError)); - EXPECT_EQ(ZE_RESULT_ERROR_NOT_AVAILABLE, pFrequencyImp->frequencyGetState(&state)); + EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, pFrequencyImp->frequencyGetState(&state)); ON_CALL(*pSysfsAccess.get(), read(_, _)) .WillByDefault(::testing::Invoke(pSysfsAccess.get(), &Mock::getValTdpReturnError)); - EXPECT_EQ(ZE_RESULT_ERROR_NOT_AVAILABLE, pFrequencyImp->frequencyGetState(&state)); + EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, pFrequencyImp->frequencyGetState(&state)); ON_CALL(*pSysfsAccess.get(), read(_, _)) .WillByDefault(::testing::Invoke(pSysfsAccess.get(), &Mock::getValEfficientReturnError)); - EXPECT_EQ(ZE_RESULT_ERROR_NOT_AVAILABLE, pFrequencyImp->frequencyGetState(&state)); + EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, pFrequencyImp->frequencyGetState(&state)); ON_CALL(*pSysfsAccess.get(), read(_, _)) .WillByDefault(::testing::Invoke(pSysfsAccess.get(), &Mock::getValActualReturnError)); - EXPECT_EQ(ZE_RESULT_ERROR_NOT_AVAILABLE, pFrequencyImp->frequencyGetState(&state)); + EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, pFrequencyImp->frequencyGetState(&state)); } TEST_F(SysmanDeviceFrequencyFixture, GivenThrottleTimeStructPointerWhenCallingfrequencyGetThrottleTimeThenUnsupportedIsReturned) { diff --git a/level_zero/tools/test/unit_tests/sources/sysman/scheduler/linux/mock_sysfs_scheduler.h b/level_zero/tools/test/unit_tests/sources/sysman/scheduler/linux/mock_sysfs_scheduler.h index d5b1276cba..935fc7d6fa 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/scheduler/linux/mock_sysfs_scheduler.h +++ b/level_zero/tools/test/unit_tests/sources/sysman/scheduler/linux/mock_sysfs_scheduler.h @@ -36,6 +36,10 @@ struct Mock : public SysfsAccess { return ZE_RESULT_ERROR_NOT_AVAILABLE; } + ze_result_t getValForErrorWhileWrite(const std::string file, const uint64_t val) { + return ZE_RESULT_ERROR_NOT_AVAILABLE; + } + ze_result_t getVal(const std::string file, uint64_t &val) { if (file.compare(preemptTimeoutMilliSecs) == 0) { val = mockValPreemptTimeoutMilliSecs; diff --git a/level_zero/tools/test/unit_tests/sources/sysman/scheduler/linux/test_zes_scheduler.cpp b/level_zero/tools/test/unit_tests/sources/sysman/scheduler/linux/test_zes_scheduler.cpp index e900ca7c61..5a8d11b315 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/scheduler/linux/test_zes_scheduler.cpp +++ b/level_zero/tools/test/unit_tests/sources/sysman/scheduler/linux/test_zes_scheduler.cpp @@ -205,7 +205,7 @@ TEST_F(SysmanDeviceSchedulerFixture, GivenValidDeviceHandleWhenCallingzesSchedul for (auto handle : handles) { zes_sched_mode_t mode; ze_result_t result = zesSchedulerGetCurrentMode(handle, &mode); - EXPECT_EQ(ZE_RESULT_ERROR_NOT_AVAILABLE, result); + EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, result); } } @@ -216,7 +216,7 @@ TEST_F(SysmanDeviceSchedulerFixture, GivenValidDeviceHandleWhenCallingzesSchedul for (auto handle : handles) { zes_sched_timeout_properties_t config; ze_result_t result = zesSchedulerGetTimeoutModeProperties(handle, true, &config); - EXPECT_EQ(ZE_RESULT_ERROR_NOT_AVAILABLE, result); + EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, result); } } @@ -227,7 +227,34 @@ TEST_F(SysmanDeviceSchedulerFixture, GivenValidDeviceHandleWhenCallingzesSchedul for (auto handle : handles) { zes_sched_timeslice_properties_t config; ze_result_t result = zesSchedulerGetTimesliceModeProperties(handle, true, &config); - EXPECT_EQ(ZE_RESULT_ERROR_NOT_AVAILABLE, result); + EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, result); + } +} + +TEST_F(SysmanDeviceSchedulerFixture, GivenValidDeviceHandleWhenCallingzesSchedulerSetTimeoutModeWhenSysfsNodeIsAbsentThenFailureIsReturned) { + ON_CALL(*pSysfsAccess.get(), write(_, _)) + .WillByDefault(::testing::Invoke(pSysfsAccess.get(), &Mock::getValForErrorWhileWrite)); + auto handles = get_sched_handles(handleComponentCount); + for (auto handle : handles) { + ze_bool_t needReboot; + zes_sched_timeout_properties_t setConfig; + setConfig.watchdogTimeout = 10000u; + ze_result_t result = zesSchedulerSetTimeoutMode(handle, &setConfig, &needReboot); + EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, result); + } +} + +TEST_F(SysmanDeviceSchedulerFixture, GivenValidDeviceHandleWhenCallingzesSchedulerSetTimesliceModeWhenSysfsNodeIsAbsentThenFailureIsReturned) { + ON_CALL(*pSysfsAccess.get(), write(_, _)) + .WillByDefault(::testing::Invoke(pSysfsAccess.get(), &Mock::getValForErrorWhileWrite)); + auto handles = get_sched_handles(handleComponentCount); + for (auto handle : handles) { + ze_bool_t needReboot; + zes_sched_timeslice_properties_t setConfig; + setConfig.interval = 1000u; + setConfig.yieldTimeout = 1000u; + ze_result_t result = zesSchedulerSetTimesliceMode(handle, &setConfig, &needReboot); + EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, result); } }