There are many open calls to fprintf() for error logging. use pr_err() instead so that they can be treated at once (e.g. with -q option).
Also convert perror() to pr_err() + str_error_r(). Signed-off-by: Namhyung Kim <[email protected]> --- tools/perf/builtin-stat.c | 52 ++++++++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index f53f449d864d..ee7190da9b6e 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c @@ -555,7 +555,8 @@ static int __run_perf_stat(int argc, const char **argv) if (forks) { if (perf_evlist__prepare_workload(evsel_list, &target, argv, is_pipe, workload_exec_failed_signal) < 0) { - perror("failed to prepare workload"); + pr_err("failed to prepare workload: %s\n", + str_error_r(errno, msg, sizeof(msg))); return -1; } child_pid = evsel_list->workload.pid; @@ -608,14 +609,14 @@ static int __run_perf_stat(int argc, const char **argv) } if (perf_evlist__apply_filters(evsel_list, &counter)) { - error("failed to set filter \"%s\" on event %s with %d (%s)\n", + pr_err("failed to set filter \"%s\" on event %s with %d (%s)\n", counter->filter, perf_evsel__name(counter), errno, str_error_r(errno, msg, sizeof(msg))); return -1; } if (perf_evlist__apply_drv_configs(evsel_list, &counter, &err_term)) { - error("failed to set config \"%s\" on event %s with %d (%s)\n", + pr_err("failed to set config \"%s\" on event %s with %d (%s)\n", err_term->val.drv_cfg, perf_evsel__name(counter), errno, str_error_r(errno, msg, sizeof(msg))); return -1; @@ -1725,18 +1726,21 @@ static int perf_stat__get_core_cached(struct cpu_map *map, int idx) static int perf_stat_init_aggr_mode(void) { int nr; + char errbuf[STRERR_BUFSIZE]; switch (stat_config.aggr_mode) { case AGGR_SOCKET: if (cpu_map__build_socket_map(evsel_list->cpus, &aggr_map)) { - perror("cannot build socket map"); + pr_err("cannot build socket map: %s\n", + str_error_r(errno, errbuf, sizeof(errbuf))); return -1; } aggr_get_id = perf_stat__get_socket_cached; break; case AGGR_CORE: if (cpu_map__build_core_map(evsel_list->cpus, &aggr_map)) { - perror("cannot build core map"); + pr_err("cannot build core map: %s\n", + str_error_r(errno, errbuf, sizeof(errbuf))); return -1; } aggr_get_id = perf_stat__get_core_cached; @@ -1835,18 +1839,21 @@ static int perf_stat__get_core_file(struct cpu_map *map, int idx) static int perf_stat_init_aggr_mode_file(struct perf_stat *st) { struct perf_env *env = &st->session->header.env; + char errbuf[STRERR_BUFSIZE]; switch (stat_config.aggr_mode) { case AGGR_SOCKET: if (perf_env__build_socket_map(env, evsel_list->cpus, &aggr_map)) { - perror("cannot build socket map"); + pr_err("cannot build socket map: %s\n", + str_error_r(errno, errbuf, sizeof(errbuf))); return -1; } aggr_get_id = perf_stat__get_socket_file; break; case AGGR_CORE: if (perf_env__build_core_map(env, evsel_list->cpus, &aggr_map)) { - perror("cannot build core map"); + pr_err("cannot build core map: %s\n", + str_error_r(errno, errbuf, sizeof(errbuf))); return -1; } aggr_get_id = perf_stat__get_core_file; @@ -2042,7 +2049,7 @@ static int add_default_attributes(void) else err = parse_events(evsel_list, transaction_limited_attrs, NULL); if (err) { - fprintf(stderr, "Cannot set up transaction events\n"); + pr_err("Cannot set up transaction events\n"); return -1; } return 0; @@ -2075,14 +2082,13 @@ static int add_default_attributes(void) arch_topdown_group_warn(); err = parse_events(evsel_list, str, NULL); if (err) { - fprintf(stderr, - "Cannot set up top down events %s: %d\n", + pr_err("Cannot set up top down events %s: %d\n", str, err); free(str); return -1; } } else { - fprintf(stderr, "System does not support topdown\n"); + pr_err("System does not support topdown\n"); return -1; } free(str); @@ -2390,6 +2396,7 @@ int cmd_stat(int argc, const char **argv, const char *prefix __maybe_unused) FILE *output = stderr; unsigned int interval; const char * const stat_subcommands[] = { "record", "report" }; + char errbuf[STRERR_BUFSIZE]; setlocale(LC_ALL, ""); @@ -2426,24 +2433,24 @@ int cmd_stat(int argc, const char **argv, const char *prefix __maybe_unused) output = NULL; if (output_name && output_fd) { - fprintf(stderr, "cannot use both --output and --log-fd\n"); + pr_err("cannot use both --output and --log-fd\n"); parse_options_usage(stat_usage, stat_options, "o", 1); parse_options_usage(NULL, stat_options, "log-fd", 0); goto out; } if (metric_only && stat_config.aggr_mode == AGGR_THREAD) { - fprintf(stderr, "--metric-only is not supported with --per-thread\n"); + pr_err("--metric-only is not supported with --per-thread\n"); goto out; } if (metric_only && run_count > 1) { - fprintf(stderr, "--metric-only is not supported with -r\n"); + pr_err("--metric-only is not supported with -r\n"); goto out; } if (output_fd < 0) { - fprintf(stderr, "argument to --log-fd must be a > 0\n"); + pr_err("argument to --log-fd must be a > 0\n"); parse_options_usage(stat_usage, stat_options, "log-fd", 0); goto out; } @@ -2454,7 +2461,8 @@ int cmd_stat(int argc, const char **argv, const char *prefix __maybe_unused) output = fopen(output_name, mode); if (!output) { - perror("failed to create output file"); + pr_err("failed to create output file: %s\n", + str_error_r(errno, errbuf, sizeof(errbuf))); return -1; } clock_gettime(CLOCK_REALTIME, &tm); @@ -2463,7 +2471,8 @@ int cmd_stat(int argc, const char **argv, const char *prefix __maybe_unused) mode = append_file ? "a" : "w"; output = fdopen(output_fd, mode); if (!output) { - perror("Failed opening logfd"); + pr_err("Failed opening logfd: %s\n", + str_error_r(errno, errbuf, sizeof(errbuf))); return -errno; } } @@ -2476,7 +2485,7 @@ int cmd_stat(int argc, const char **argv, const char *prefix __maybe_unused) if (csv_output) { /* User explicitly passed -B? */ if (big_num_opt == 1) { - fprintf(stderr, "-B option not supported with -x\n"); + pr_err("-B option not supported with -x\n"); parse_options_usage(stat_usage, stat_options, "B", 1); parse_options_usage(NULL, stat_options, "x", 1); goto out; @@ -2497,7 +2506,7 @@ int cmd_stat(int argc, const char **argv, const char *prefix __maybe_unused) } if ((stat_config.aggr_mode == AGGR_THREAD) && !target__has_task(&target)) { - fprintf(stderr, "The --per-thread option is only available " + pr_err("The --per-thread option is only available " "when monitoring via -p -t options.\n"); parse_options_usage(NULL, stat_options, "p", 1); parse_options_usage(NULL, stat_options, "t", 1); @@ -2511,7 +2520,7 @@ int cmd_stat(int argc, const char **argv, const char *prefix __maybe_unused) if (((stat_config.aggr_mode != AGGR_GLOBAL && stat_config.aggr_mode != AGGR_THREAD) || nr_cgroups) && !target__has_cpu(&target)) { - fprintf(stderr, "both cgroup and no-aggregation " + pr_err("both cgroup and no-aggregation " "modes only available in system-wide mode\n"); parse_options_usage(stat_usage, stat_options, "G", 1); @@ -2531,7 +2540,8 @@ int cmd_stat(int argc, const char **argv, const char *prefix __maybe_unused) parse_options_usage(stat_usage, stat_options, "p", 1); parse_options_usage(NULL, stat_options, "t", 1); } else if (target__has_cpu(&target)) { - perror("failed to parse CPUs map"); + pr_err("failed to parse CPUs map: %s\n", + str_error_r(errno, errbuf, sizeof(errbuf))); parse_options_usage(stat_usage, stat_options, "C", 1); parse_options_usage(NULL, stat_options, "a", 1); } -- 2.11.0

