From b8757842320dfe22d6c443c19d6e56530eba3ef7 Mon Sep 17 00:00:00 2001 From: "Bill(Shuzhou) Liu" Date: Fri, 24 Mar 2023 15:36:30 -0500 Subject: [PATCH] Correct subsystem name by matching device id. The rsmi_dev_subsystem_name_get() only matches subvendor id and subdevice id for a vendor. The change will also match device id. Change-Id: Ife3aedaf6fc7390ed7fa62edbde40c2340689b23 [ROCm/amdsmi commit: 0c82a9d57748ac70fcc3c873d5e95a8aabe258e5] --- projects/amdsmi/src/rocm_smi.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/projects/amdsmi/src/rocm_smi.cc b/projects/amdsmi/src/rocm_smi.cc index 44d8d907eb..8c3b710ee7 100755 --- a/projects/amdsmi/src/rocm_smi.cc +++ b/projects/amdsmi/src/rocm_smi.cc @@ -1811,6 +1811,8 @@ static rsmi_status_t get_dev_name_from_id(uint32_t dv_ind, char *name, uint16_t subsys_vend_id; uint16_t subsys_id; bool found_device_vendor = false; + // to match subsystem, it must match the device id at previous line + bool found_device_id_for_subsys = false; std::string val_str; assert(name != nullptr); @@ -1857,8 +1859,8 @@ static rsmi_status_t get_dev_name_from_id(uint32_t dv_ind, char *name, if (ln[0] == '\t') { if (found_device_vendor) { if (ln[1] == '\t') { - // This is a subsystem line - if (typ == NAME_STR_SUBSYS) { + // The subsystem line, ignore a line if the device id not match + if (typ == NAME_STR_SUBSYS && found_device_id_for_subsys) { val_str = get_id_name_str_from_line(subsys_vend_id, ln, &ln_str); if (val_str.size() > 0) { @@ -1880,6 +1882,12 @@ static rsmi_status_t get_dev_name_from_id(uint32_t dv_ind, char *name, if (val_str.size() > 0) { break; } + } else if (typ == NAME_STR_SUBSYS) { + // match the device id line + val_str = get_id_name_str_from_line(device_id, ln, &ln_str); + if (val_str.size() > 0) { + found_device_id_for_subsys = true; + } } } } else { // ln[0] != '\t'; Vendor line