From e7f6630951501cc8bd25fffaa95cff95e5c55d6d Mon Sep 17 00:00:00 2001 From: Danny Auble <da@schedmd.com> Date: Tue, 8 Aug 2017 16:56:38 -0600 Subject: [PATCH] Continuation of last commit. No code change, just moving existing code into a switch ready to handle multiple options. Bug 4034 --- .../knl_generic/node_features_knl_generic.c | 144 +++++++++++++----- 1 file changed, 105 insertions(+), 39 deletions(-) diff --git a/src/plugins/node_features/knl_generic/node_features_knl_generic.c b/src/plugins/node_features/knl_generic/node_features_knl_generic.c index 5c7a1d47142..dd4d272b19d 100644 --- a/src/plugins/node_features/knl_generic/node_features_knl_generic.c +++ b/src/plugins/node_features/knl_generic/node_features_knl_generic.c @@ -912,6 +912,7 @@ extern void node_features_p_node_state(char **avail_modes, char **current_mode) char *avail_states = NULL, *cur_state = NULL; char *resp_msg, *argv[10], *avail_sep = "", *cur_sep = "", *tok; int status = 0; + int len; if (!syscfg_path || !avail_modes || !current_mode) return; @@ -928,11 +929,21 @@ extern void node_features_p_node_state(char **avail_modes, char **current_mode) return; } - argv[0] = "syscfg"; - argv[1] = "/d"; - argv[2] = "BIOSSETTINGS"; - argv[3] = "Cluster Mode"; - argv[4] = NULL; + switch (knl_system_type) { + case KNL_SYSTEM_TYPE_INTEL: + argv[0] = "syscfg"; + argv[1] = "/d"; + argv[2] = "BIOSSETTINGS"; + argv[3] = "Cluster Mode"; + argv[4] = NULL; + break; + default: + /* This should never happen */ + error("%s: Unknown SystemType. %d", __func__, knl_system_type); + *avail_modes = NULL; + *current_mode = NULL; + return; + } resp_msg = _run_script(syscfg_path, argv, &status); if (!WIFEXITED(status) || (WEXITSTATUS(status) != 0)) { error("%s: syscfg (get cluster mode) status:%u response:%s", @@ -941,10 +952,19 @@ extern void node_features_p_node_state(char **avail_modes, char **current_mode) if (resp_msg == NULL) { info("%s: syscfg returned no information", __func__); } else { + tok = NULL; _log_script_argv(argv, resp_msg); - tok = strstr(resp_msg, "Current Value : "); + switch (knl_system_type) { + case KNL_SYSTEM_TYPE_INTEL: + tok = strstr(resp_msg, "Current Value : "); + len = 16; + break; + default: + /* already handled above, should never get here */ + break; + } if (tok) { - tok += 16; + tok += len; if (!strncasecmp(tok, "All2All", 3)) { cur_state = xstrdup("a2a"); cur_sep = ","; @@ -985,11 +1005,18 @@ extern void node_features_p_node_state(char **avail_modes, char **current_mode) xfree(resp_msg); } - argv[0] = "syscfg"; - argv[1] = "/d"; - argv[2] = "BIOSSETTINGS"; - argv[3] = "Memory Mode"; - argv[4] = NULL; + switch (knl_system_type) { + case KNL_SYSTEM_TYPE_INTEL: + argv[0] = "syscfg"; + argv[1] = "/d"; + argv[2] = "BIOSSETTINGS"; + argv[3] = "Memory Mode"; + argv[4] = NULL; + break; + default: + /* already handled above, should never get here */ + break; + } resp_msg = _run_script(syscfg_path, argv, &status); if (!WIFEXITED(status) || (WEXITSTATUS(status) != 0)) { error("%s: syscfg (get memory mode) status:%u response:%s", @@ -998,10 +1025,19 @@ extern void node_features_p_node_state(char **avail_modes, char **current_mode) if (resp_msg == NULL) { info("%s: syscfg returned no information", __func__); } else { + tok = NULL; _log_script_argv(argv, resp_msg); - tok = strstr(resp_msg, "Current Value : "); + switch (knl_system_type) { + case KNL_SYSTEM_TYPE_INTEL: + tok = strstr(resp_msg, "Current Value : "); + len = 16; + break; + default: + /* already handled above, should never get here */ + break; + } if (tok) { - tok += 16; + tok += len; if (!strncasecmp(tok, "Cache", 3)) { xstrfmtcat(cur_state, "%s%s", cur_sep, "cache"); } else if (!strncasecmp(tok, "Flat", 3)) { @@ -1074,7 +1110,7 @@ extern int node_features_p_job_valid(char *job_features) strchr(job_features, '|') || strchr(job_features, '*')) return ESLURM_INVALID_KNL; - + job_mcdram = _knl_mcdram_parse(job_features, "&,"); mcdram_cnt = _knl_mcdram_bits_cnt(job_mcdram); if (mcdram_cnt > 1) /* Multiple MCDRAM options */ @@ -1198,11 +1234,19 @@ extern int node_features_p_node_set(char *active_features) } /* Identify available Cluster/NUMA modes */ - argv[0] = "syscfg"; - argv[1] = "/d"; - argv[2] = "BIOSSETTINGS"; - argv[3] = "Cluster Mode"; - argv[4] = NULL; + switch (knl_system_type) { + case KNL_SYSTEM_TYPE_INTEL: + argv[0] = "syscfg"; + argv[1] = "/d"; + argv[2] = "BIOSSETTINGS"; + argv[3] = "Cluster Mode"; + argv[4] = NULL; + break; + default: + /* This should never happen */ + error("%s: Unknown SystemType. %d", __func__, knl_system_type); + return SLURM_ERROR; + } resp_msg = _run_script(syscfg_path, argv, &status); if (!WIFEXITED(status) || (WEXITSTATUS(status) != 0)) { error("%s: syscfg (get cluster mode) status:%u response:%s", @@ -1231,13 +1275,20 @@ extern int node_features_p_node_set(char *active_features) /* Reset current Cluster/NUMA mode */ if (numa_mode) { - argv[0] = "syscfg"; - argv[1] = "/bcs"; - argv[2] = ""; - argv[3] = "BIOSSETTINGS"; - argv[4] = "Cluster Mode"; - argv[5] = numa_mode; - argv[6] = NULL; + switch (knl_system_type) { + case KNL_SYSTEM_TYPE_INTEL: + argv[0] = "syscfg"; + argv[1] = "/bcs"; + argv[2] = ""; + argv[3] = "BIOSSETTINGS"; + argv[4] = "Cluster Mode"; + argv[5] = numa_mode; + argv[6] = NULL; + break; + default: + /* already handled above, should never get here */ + break; + } resp_msg = _run_script(syscfg_path, argv, &status); if (!WIFEXITED(status) || (WEXITSTATUS(status) != 0)) { error("%s: syscfg (set cluster mode) status:%u response:%s", @@ -1251,11 +1302,18 @@ extern int node_features_p_node_set(char *active_features) } /* Identify available Memory/MCDRAM modes */ - argv[0] = "syscfg"; - argv[1] = "/d"; - argv[2] = "BIOSSETTINGS"; - argv[3] = "Memory Mode"; - argv[4] = NULL; + switch (knl_system_type) { + case KNL_SYSTEM_TYPE_INTEL: + argv[0] = "syscfg"; + argv[1] = "/d"; + argv[2] = "BIOSSETTINGS"; + argv[3] = "Memory Mode"; + argv[4] = NULL; + break; + default: + /* already handled above, should never get here */ + break; + } resp_msg = _run_script(syscfg_path, argv, &status); if (!WIFEXITED(status) || (WEXITSTATUS(status) != 0)) { error("%s: syscfg (get memory mode) status:%u response:%s", @@ -1284,13 +1342,21 @@ extern int node_features_p_node_set(char *active_features) /* Reset current Memory/MCDRAM mode */ if (mcdram_mode) { - argv[0] = "syscfg"; - argv[1] = "/bcs"; - argv[2] = ""; - argv[3] = "BIOSSETTINGS"; - argv[4] = "Memory Mode"; - argv[5] = mcdram_mode; - argv[6] = NULL; + switch (knl_system_type) { + case KNL_SYSTEM_TYPE_INTEL: + argv[0] = "syscfg"; + argv[1] = "/bcs"; + argv[2] = ""; + argv[3] = "BIOSSETTINGS"; + argv[4] = "Memory Mode"; + argv[5] = mcdram_mode; + argv[6] = NULL; + break; + default: + /* already handled above, should never get here */ + break; + } + resp_msg = _run_script(syscfg_path, argv, &status); if (!WIFEXITED(status) || (WEXITSTATUS(status) != 0)) { error("%s: syscfg (set memory mode) status:%u response:%s", -- GitLab