From 0c82a9d57748ac70fcc3c873d5e95a8aabe258e5 Mon Sep 17 00:00:00 2001 From: "Bill(Shuzhou) Liu" Date: Fri, 24 Mar 2023 15:36:30 -0500 Subject: [PATCH 1/2] 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 --- src/rocm_smi.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/rocm_smi.cc b/src/rocm_smi.cc index 44d8d907eb..8c3b710ee7 100755 --- a/src/rocm_smi.cc +++ b/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 From 58c83eb379f72e7033b661ddf71f1e82ef00cd58 Mon Sep 17 00:00:00 2001 From: "Bill(Shuzhou) Liu" Date: Mon, 27 Mar 2023 09:27:38 -0500 Subject: [PATCH 2/2] Increase the max BDF ID length Increase the max length from 256 to 512. Change-Id: I3114f7ce6852aafa9dfec0186f27c1121c939c69 --- src/rocm_smi_main.cc | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/rocm_smi_main.cc b/src/rocm_smi_main.cc index 16cd336e2a..52c8227c53 100755 --- a/src/rocm_smi_main.cc +++ b/src/rocm_smi_main.cc @@ -259,16 +259,17 @@ static bool bdfid_from_path(const std::string in_name, uint64_t *bdfid) { // 1 = not a good bdfid found static uint32_t ConstructBDFID(std::string path, uint64_t *bdfid) { assert(bdfid != nullptr); - char tpath[256] = {'\0'}; + const unsigned int MAX_BDF_LENGTH = 512; + char tpath[MAX_BDF_LENGTH] = {'\0'}; ssize_t ret; - memset(tpath,0,256); + memset(tpath,0,MAX_BDF_LENGTH); - ret = readlink(path.c_str(), tpath, 256); + ret = readlink(path.c_str(), tpath, MAX_BDF_LENGTH); assert(ret > 0); - assert(ret < 256); + assert(ret < MAX_BDF_LENGTH); - if (ret <= 0 || ret >= 256) { + if (ret <= 0 || ret >= MAX_BDF_LENGTH) { return 1; }