From 910bf677a9d978e795f29438ccd8d6df5bb75eb3 Mon Sep 17 00:00:00 2001 From: "Bill(Shuzhou) Liu" Date: Mon, 26 Jun 2023 07:59:49 -0500 Subject: [PATCH] Crash if no hwmon sysfs Return NOT_SUPPORTED if no hwmon sysfs. Change-Id: I01356a21f004ab552ca6ef7ffb49934bfdfd5e31 --- src/rocm_smi.cc | 28 ++++++++++++++++++---------- src/rocm_smi_device.cc | 3 +++ 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/rocm_smi.cc b/src/rocm_smi.cc index 12f6d2c665..4cd359ce3a 100755 --- a/src/rocm_smi.cc +++ b/src/rocm_smi.cc @@ -341,7 +341,9 @@ static rsmi_status_t get_dev_mon_value(amd::smi::MonitorTypes type, } GET_DEV_FROM_INDX - assert(dev->monitor() != nullptr); + if (dev->monitor() == nullptr) { + return RSMI_STATUS_NOT_SUPPORTED; + } std::string val_str; @@ -369,8 +371,9 @@ static rsmi_status_t get_dev_mon_value(amd::smi::MonitorTypes type, } GET_DEV_FROM_INDX - assert(dev->monitor() != nullptr); - + if (dev->monitor() == nullptr) { + return RSMI_STATUS_NOT_SUPPORTED; + } std::string val_str; int ret = dev->monitor()->readMonitor(type, sensor_ind, &val_str); @@ -394,8 +397,9 @@ static rsmi_status_t set_dev_mon_value(amd::smi::MonitorTypes type, uint32_t dv_ind, uint32_t sensor_ind, T val) { GET_DEV_FROM_INDX - assert(dev->monitor() != nullptr); - + if (dev->monitor() == nullptr) { + return RSMI_STATUS_NOT_SUPPORTED; + } int ret = dev->monitor()->writeMonitor(type, sensor_ind, std::to_string(val)); @@ -416,9 +420,9 @@ static rsmi_status_t get_power_mon_value(amd::smi::PowerMonTypes type, } std::shared_ptr dev = smi.devices()[dv_ind]; - assert(dev != nullptr); - assert(dev->monitor() != nullptr); - + if (dev == nullptr || dev->monitor() == nullptr) { + return RSMI_STATUS_NOT_SUPPORTED; + } ret = dev->power_monitor()->readPowerValue(type, val); return amd::smi::ErrnoToRsmiStatus(ret); @@ -2503,7 +2507,9 @@ rsmi_dev_temp_metric_get(uint32_t dv_ind, uint32_t sensor_type, GET_DEV_FROM_INDX - assert(dev->monitor() != nullptr); + if (dev->monitor() == nullptr) { + return RSMI_STATUS_NOT_SUPPORTED; + } std::shared_ptr m = dev->monitor(); // getTempSensorIndex will throw an out of range exception if sensor_type is @@ -2564,7 +2570,9 @@ rsmi_dev_volt_metric_get(uint32_t dv_ind, rsmi_voltage_type_t sensor_type, GET_DEV_FROM_INDX - assert(dev->monitor() != nullptr); + if (dev->monitor() == nullptr) { + return RSMI_STATUS_NOT_SUPPORTED; + } std::shared_ptr m = dev->monitor(); // getVoltSensorIndex will throw an out of range exception if sensor_type is diff --git a/src/rocm_smi_device.cc b/src/rocm_smi_device.cc index 311aee3edd..18c96b7f13 100755 --- a/src/rocm_smi_device.cc +++ b/src/rocm_smi_device.cc @@ -1092,6 +1092,9 @@ void Device::fillSupportedFuncs(void) { if (supported_funcs_.size() != 0) { return; } + if (monitor() == nullptr) { + return; + } std::map::const_iterator it = kDevFuncDependsMap.begin();