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 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; }