From: Ira Weiny <[email protected]> Date: Mon, 25 Apr 2011 12:39:12 -0700 Subject: [PATCH 02/5] infiniband-diags: ibqueryerrors; add ibcheckerrors like summary
ibcheckerrors reports a summary of nodes checked, node errors, port checked, and port errors. Track and print same as a summary. Signed-off-by: Ira Weiny <[email protected]> --- src/ibqueryerrors.c | 49 +++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 43 insertions(+), 6 deletions(-) diff --git a/src/ibqueryerrors.c b/src/ibqueryerrors.c index 68957fe..e0a328b 100644 --- a/src/ibqueryerrors.c +++ b/src/ibqueryerrors.c @@ -89,14 +89,26 @@ static char *threshold_file = DEF_THRES_FILE; /* define a "packet" with threshold values in it */ uint8_t thresholds[1204] = { 0 }; +char * threshold_str = NULL; static void set_thres(char *name, uint32_t val) { int f; + int n; + char tmp[256]; for (f = IB_PC_FIRST_F; f <= IB_PC_LAST_F; f++) { if (strcmp(name, mad_field_name(f)) == 0) { mad_encode_field(thresholds, f, &val); - printf("[%s = %u]", name, val); + snprintf(tmp, 255, "[%s = %u]", name, val); + threshold_str = realloc(threshold_str, + strlen(threshold_str)+strlen(tmp)+1); + if (!threshold_str) { + fprintf(stderr, "Failed to allocate memory: " + "%s\n", strerror(errno)); + exit(1); + } + n = strlen(threshold_str); + strcpy(threshold_str+n, tmp); } } } @@ -109,11 +121,19 @@ static void set_thresholds(char *threshold_file) char *p_prefix, *p_last; char *name; char *val_str; + char str[64]; if (!thresf) return; - printf("Thresholds: "); + snprintf(str, 63, "Thresholds: "); + threshold_str = malloc(strlen(str)+1); + if (!threshold_str) { + fprintf(stderr, "Failed to allocate memory: %s\n", + strerror(errno)); + exit(1); + } + strcpy(threshold_str, str); while (fgets(buf, sizeof buf, thresf) != NULL) { p_prefix = strtok_r(buf, "\n", &p_last); if (!p_prefix) @@ -128,7 +148,6 @@ static void set_thresholds(char *threshold_file) val = strtoul(val_str, NULL, 0); set_thres(name, val); } - printf("\n"); fclose(thresf); } @@ -275,12 +294,22 @@ static int suppress(enum MAD_FIELDS field) static void report_suppressed(void) { int i = 0; - printf("Suppressing:"); + printf("## Suppresed:"); for (i = 0; i < sup_total; i++) printf(" %s", mad_field_name(suppressed_fields[i])); printf("\n"); } +static void print_summary(void) +{ + printf("\n## Summary: %d nodes checked, %d bad nodes found\n", + summary.nodes_checked, summary.bad_nodes); + printf("## %d ports checked, %d ports have errors beyond threshold\n", + summary.ports_checked, summary.bad_ports); + printf("## %s\n", threshold_str); + report_suppressed(); +} + static int query_and_dump(char *buf, size_t size, ib_portid_t * portid, ibnd_node_t * node, char *node_name, int portnum, const char *attr_name, uint16_t attr_id, @@ -374,6 +403,7 @@ static int print_results(ib_portid_t * portid, char *node_name, printf("Errors for 0x%" PRIx64 " \"%s\"\n", node->guid, node_name); *header_printed = 1; + summary.bad_nodes++; } if (portnum == 0xFF) @@ -384,6 +414,8 @@ static int print_results(ib_portid_t * portid, char *node_name, node->guid, portnum, str); if (portnum != 0xFF && port_config) print_port_config(node_name, node, portnum); + + summary.bad_ports++; } return (n); } @@ -515,8 +547,10 @@ void print_node(ibnd_node_t * node, void *user_data) (cap_mask & 0x100)) { all_port_sup = 1; if (!print_port(&portid, cap_mask, node_name, node, - 0xFF, &header_printed)) + 0xFF, &header_printed)) { + summary.ports_checked += node->numports; goto clear; + } } for (p = startport; p <= node->numports; p++) { @@ -529,12 +563,14 @@ void print_node(ibnd_node_t * node, void *user_data) print_port(&portid, cap_mask, node_name, node, p, &header_printed); + summary.ports_checked++; if (!all_port_sup) clear_port(&portid, cap_mask, node_name, p); } } clear: + summary.nodes_checked++; if (all_port_sup) clear_port(&portid, cap_mask, node_name, 0xFF); @@ -746,7 +782,6 @@ int main(int argc, char **argv) } } - report_suppressed(); set_thresholds(threshold_file); if (node_guid_str) { @@ -775,6 +810,8 @@ int main(int argc, char **argv) } else ibnd_iter_nodes(fabric, print_node, NULL); + print_summary(); + destroy_fabric: ibnd_destroy_fabric(fabric); -- 1.7.1 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
