From 07acb18e6495d04da78854ac06d3faf3aacb486e Mon Sep 17 00:00:00 2001 From: Arlin Davis Date: Mon, 6 Oct 2014 12:50:09 -0700 Subject: [PATCH] mcm: provide CPU family/model attribute on both host and mic sides Signed-off-by: Arlin Davis --- dapl/openib_common/util.c | 70 +++++++++++++++++++++++++++++++-------- 1 file changed, 57 insertions(+), 13 deletions(-) diff --git a/dapl/openib_common/util.c b/dapl/openib_common/util.c index ad59f8f..e735655 100644 --- a/dapl/openib_common/util.c +++ b/dapl/openib_common/util.c @@ -231,6 +231,46 @@ retry: } #endif +#ifdef _OPENIB_MCM_ +static int cpuinfo_atoi(const char *v_str) +{ + char r_buf[500]; + char *f_path = "/proc/cpuinfo"; + char *token = ":"; + int i, ii, fd, len, v_len, r_len; + int val = 0; + + fd = open(f_path, O_RDONLY); + if (fd < 0) + return val; + + v_len = strlen(v_str); + r_len = sizeof(r_buf) - 1; + len = read(fd, r_buf, r_len); + + if (len < 1) + return val; + + /* get value pattern followed by : followed by value */ + for (i=0; i < len; i++) { + for (ii=0; ii < v_len && i < len; ii++, i++) { + if ((v_str[ii] == r_buf[i]) && (ii == v_len-1)) + for (; i < len; i++) { + if (!strncmp(&r_buf[i], token, 1)) { + val = atoi(&r_buf[i+1]); + i = len; + } + } + else if (v_str[ii] != r_buf[i]) + break; + } + } + + close(fd); + return val; +} +#endif + enum ibv_mtu dapl_ib_mtu(int mtu) { switch (mtu) { @@ -423,13 +463,19 @@ DAT_RETURN dapls_ib_query_hca(IN DAPL_HCA * hca_ptr, hca_ptr->ib_trans.na.mode = "PROXY"; else hca_ptr->ib_trans.na.mode = "DIRECT"; - hca_ptr->ib_trans.na.read = "FALSE"; - if (!hca_ptr->ib_trans.pr_attr.cpu_family && hca_ptr->ib_trans.self.node) { - dapli_mix_get_attr(&hca_ptr->ib_trans, &hca_ptr->ib_trans.pr_attr); + hca_ptr->ib_trans.na.read = "FALSE"; + sprintf(hca_ptr->ib_trans.ver_str, "%d", DAT_MIX_VER); + + if (!hca_ptr->ib_trans.pr_attr.cpu_family) { + if (hca_ptr->ib_trans.self.node) { + dapli_mix_get_attr(&hca_ptr->ib_trans, &hca_ptr->ib_trans.pr_attr); + } else { + hca_ptr->ib_trans.pr_attr.cpu_family = cpuinfo_atoi("cpu family"); + hca_ptr->ib_trans.pr_attr.cpu_model = cpuinfo_atoi("model"); + } sprintf(hca_ptr->ib_trans.fam_str, "%d", hca_ptr->ib_trans.pr_attr.cpu_family); sprintf(hca_ptr->ib_trans.mod_str, "%d", hca_ptr->ib_trans.pr_attr.cpu_model); - sprintf(hca_ptr->ib_trans.ver_str, "%d", DAT_MIX_VER); } #else hca_ptr->ib_trans.na.mode = "DIRECT"; @@ -786,7 +832,7 @@ DAT_NAMED_ATTR ib_attrs[] = { { "DAT_IB_PROXY_VERSION", "UNKNOWN"} , -#endif +#endif /* _OPENIB_MCM_, end of list */ #endif }; @@ -795,7 +841,6 @@ DAT_NAMED_ATTR ib_attrs[] = { void dapls_query_provider_specific_attr(IN DAPL_IA * ia_ptr, IN DAT_PROVIDER_ATTR * attr_ptr) { - attr_ptr->num_provider_specific_attr = SPEC_ATTR_SIZE(ib_attrs); attr_ptr->provider_specific_attr = ib_attrs; @@ -810,13 +855,12 @@ void dapls_query_provider_specific_attr(IN DAPL_IA * ia_ptr, ib_attrs[5].value = ia_ptr->hca_ptr->ib_trans.na.mtu; ib_attrs[6].value = ia_ptr->hca_ptr->ib_trans.na.port; #ifdef _OPENIB_MCM_ - if (ia_ptr->hca_ptr->ib_trans.self.node) { /* only on MIC */ - int i = attr_ptr->num_provider_specific_attr; - ib_attrs[i-3].value = ia_ptr->hca_ptr->ib_trans.fam_str; - ib_attrs[i-2].value = ia_ptr->hca_ptr->ib_trans.mod_str; - ib_attrs[i-1].value = ia_ptr->hca_ptr->ib_trans.ver_str; - } else - attr_ptr->num_provider_specific_attr -= 3; +{ + int i = attr_ptr->num_provider_specific_attr; + ib_attrs[i-3].value = ia_ptr->hca_ptr->ib_trans.fam_str; + ib_attrs[i-2].value = ia_ptr->hca_ptr->ib_trans.mod_str; + ib_attrs[i-1].value = ia_ptr->hca_ptr->ib_trans.ver_str; +} #endif } -- 2.46.0