From 5e168c8f6a71b9a0b7dcc2421b523eaddf54c105 Mon Sep 17 00:00:00 2001 From: Marko Oblak Date: Thu, 13 Apr 2023 15:21:08 +0200 Subject: [PATCH 1/2] SWDEV-394359 - [AMDSMI] [Linux] [Guest] Resolved issue: status string and socket info API failing Signed-off-by: Marko Oblak Change-Id: I6fe3beafbf2cd3d2701dd5f78dac2bcf2d9b3aa9 --- py-interface/amdsmi_interface.py | 11 ++++++----- src/amd_smi/amd_smi.cc | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/py-interface/amdsmi_interface.py b/py-interface/amdsmi_interface.py index 0542fed5da..5b1d888150 100644 --- a/py-interface/amdsmi_interface.py +++ b/py-interface/amdsmi_interface.py @@ -503,7 +503,7 @@ def amdsmi_get_socket_info(socket_handle): _check_res( amdsmi_wrapper.amdsmi_get_socket_info( - socket_handle, ctypes.byref(socket_info), ctypes.c_size_t(128)) + socket_handle, socket_info, ctypes.c_size_t(128)) ) return socket_info.value.decode() @@ -2489,11 +2489,12 @@ def amdsmi_status_string(status: amdsmi_wrapper.amdsmi_status_t) -> str: if not isinstance(status, amdsmi_wrapper.amdsmi_status_t): raise AmdSmiParameterException(status, amdsmi_wrapper.amdsmi_status_t) - status_string = ctypes.c_char_p() - _check_res(amdsmi_wrapper.amdsmi_status_string( - status, ctypes.byref(status_string))) + status_string_p_p = ctypes.pointer(ctypes.pointer(ctypes.c_char())) - return amdsmi_wrapper.string_cast(status_string) + _check_res(amdsmi_wrapper.amdsmi_status_string( + status, status_string_p_p)) + + return amdsmi_wrapper.string_cast(status_string_p_p.contents) def amdsmi_get_compute_process_info() -> List[Dict[str, int]]: diff --git a/src/amd_smi/amd_smi.cc b/src/amd_smi/amd_smi.cc index 31657c0ad0..181b87d6f4 100644 --- a/src/amd_smi/amd_smi.cc +++ b/src/amd_smi/amd_smi.cc @@ -144,7 +144,7 @@ amdsmi_status_string(amdsmi_status_t status, const char **status_string) { *status_string = "FAIL_LOAD_MODULE: Fail to load module."; break; case AMDSMI_STATUS_FAIL_LOAD_SYMBOL: - *status_string = "FAIL_LOAD_SYMOBL: Fail to load symbol."; + *status_string = "FAIL_LOAD_SYMBOL: Fail to load symbol."; break; case AMDSMI_STATUS_DRM_ERROR: *status_string = "DRM_ERROR: Fail to run function in libdrm."; From b39a56fc526545173803e220c2b35d048995a658 Mon Sep 17 00:00:00 2001 From: "Bill(Shuzhou) Liu" Date: Thu, 13 Apr 2023 12:34:30 -0500 Subject: [PATCH 2/2] Crash if no hwmon sysfs Return NOT_SUPPORTED if no hwmon sysfs. Change-Id: I8f4bea0d74619150aee7dfc21fe62d24018e2994 --- README.md | 2 +- rocm_smi/src/rocm_smi.cc | 25 ++++++++++++++++++------- rocm_smi/src/rocm_smi_device.cc | 3 +++ 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 468c18c754..ac7ec316c3 100755 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ The AMD System Management Interface Library, or AMD SMI library, is a C library ## Supported platforms -At initial release, the AMD SMI library will support Linux bear metal and Linux virtual machine guest for AMD GPUs. In the future release, the library will be extended to support AMD EPYC™ CPUs. +At initial release, the AMD SMI library will support Linux bare metal and Linux virtual machine guest for AMD GPUs. In the future release, the library will be extended to support AMD EPYC™ CPUs. AMD SMI library can run on AMD ROCm supported platforms, please refer to [List of Supported Operating Systems and GPUs](https://docs.amd.com/bundle/ROCm-Getting-Started-Guide-v5.3/page/Introduction_to_ROCm_Getting_Started_Guide_for_Linux.html) diff --git a/rocm_smi/src/rocm_smi.cc b/rocm_smi/src/rocm_smi.cc index 0339bb4246..12b8061a0c 100755 --- a/rocm_smi/src/rocm_smi.cc +++ b/rocm_smi/src/rocm_smi.cc @@ -336,7 +336,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; @@ -364,7 +366,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; @@ -389,7 +393,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)); @@ -411,8 +417,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); @@ -2223,7 +2230,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 @@ -2281,7 +2290,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/rocm_smi/src/rocm_smi_device.cc b/rocm_smi/src/rocm_smi_device.cc index cd6956cad0..67b198ef83 100755 --- a/rocm_smi/src/rocm_smi_device.cc +++ b/rocm_smi/src/rocm_smi_device.cc @@ -974,6 +974,9 @@ void Device::fillSupportedFuncs(void) { if (supported_funcs_.size() != 0) { return; } + if (monitor() == nullptr) { + return; + } std::map::const_iterator it = kDevFuncDependsMap.begin();