mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
perf utils: Check verbose flag properly
It now can have negative value to suppress the message entirely. So it needs to check it being positive. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: kernel-team@lge.com Link: http://lkml.kernel.org/r/20170217081742.17417-3-namhyung@kernel.org [ Adjust fuzz on tools/perf/util/pmu.c, add > 0 checks in many other places ] Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
80df198820
commit
bb963e1650
@ -744,7 +744,7 @@ static void data_process(void)
|
||||
|
||||
first = false;
|
||||
|
||||
if (verbose || data__files_cnt > 2)
|
||||
if (verbose > 0 || data__files_cnt > 2)
|
||||
data__fprintf();
|
||||
|
||||
/* Don't sort callchain for perf diff */
|
||||
|
@ -42,8 +42,8 @@ static int parse_record_events(const struct option *opt,
|
||||
|
||||
fprintf(stderr, "%-13s%-*s%s\n",
|
||||
e->tag,
|
||||
verbose ? 25 : 0,
|
||||
verbose ? perf_mem_events__name(j) : "",
|
||||
verbose > 0 ? 25 : 0,
|
||||
verbose > 0 ? perf_mem_events__name(j) : "",
|
||||
e->supported ? ": available" : "");
|
||||
}
|
||||
exit(0);
|
||||
|
@ -432,7 +432,7 @@ static int record__open(struct record *rec)
|
||||
try_again:
|
||||
if (perf_evsel__open(pos, pos->cpus, pos->threads) < 0) {
|
||||
if (perf_evsel__fallback(pos, errno, msg, sizeof(msg))) {
|
||||
if (verbose)
|
||||
if (verbose > 0)
|
||||
ui__warning("%s\n", msg);
|
||||
goto try_again;
|
||||
}
|
||||
|
@ -1009,7 +1009,7 @@ repeat:
|
||||
* providing it only in verbose mode not to bloat too
|
||||
* much struct symbol.
|
||||
*/
|
||||
if (verbose) {
|
||||
if (verbose > 0) {
|
||||
/*
|
||||
* XXX: Need to provide a less kludgy way to ask for
|
||||
* more space per symbol, the u32 is for the index on
|
||||
|
@ -460,7 +460,7 @@ static struct task_desc *register_pid(struct perf_sched *sched,
|
||||
BUG_ON(!sched->tasks);
|
||||
sched->tasks[task->nr] = task;
|
||||
|
||||
if (verbose)
|
||||
if (verbose > 0)
|
||||
printf("registered task #%ld, PID %ld (%s)\n", sched->nr_tasks, pid, comm);
|
||||
|
||||
return task;
|
||||
@ -794,7 +794,7 @@ replay_wakeup_event(struct perf_sched *sched,
|
||||
const u32 pid = perf_evsel__intval(evsel, sample, "pid");
|
||||
struct task_desc *waker, *wakee;
|
||||
|
||||
if (verbose) {
|
||||
if (verbose > 0) {
|
||||
printf("sched_wakeup event %p\n", evsel);
|
||||
|
||||
printf(" ... pid %d woke up %s/%d\n", sample->tid, comm, pid);
|
||||
@ -822,7 +822,7 @@ static int replay_switch_event(struct perf_sched *sched,
|
||||
int cpu = sample->cpu;
|
||||
s64 delta;
|
||||
|
||||
if (verbose)
|
||||
if (verbose > 0)
|
||||
printf("sched_switch event %p\n", evsel);
|
||||
|
||||
if (cpu >= MAX_CPUS || cpu < 0)
|
||||
@ -870,7 +870,7 @@ static int replay_fork_event(struct perf_sched *sched,
|
||||
goto out_put;
|
||||
}
|
||||
|
||||
if (verbose) {
|
||||
if (verbose > 0) {
|
||||
printf("fork event\n");
|
||||
printf("... parent: %s/%d\n", thread__comm_str(parent), parent->tid);
|
||||
printf("... child: %s/%d\n", thread__comm_str(child), child->tid);
|
||||
@ -1573,7 +1573,7 @@ static int map_switch_event(struct perf_sched *sched, struct perf_evsel *evsel,
|
||||
|
||||
timestamp__scnprintf_usec(timestamp, stimestamp, sizeof(stimestamp));
|
||||
color_fprintf(stdout, color, " %12s secs ", stimestamp);
|
||||
if (new_shortname || (verbose && sched_in->tid)) {
|
||||
if (new_shortname || (verbose > 0 && sched_in->tid)) {
|
||||
const char *pid_color = color;
|
||||
|
||||
if (thread__has_color(sched_in))
|
||||
@ -2050,7 +2050,7 @@ static void save_task_callchain(struct perf_sched *sched,
|
||||
|
||||
if (thread__resolve_callchain(thread, cursor, evsel, sample,
|
||||
NULL, NULL, sched->max_stack + 2) != 0) {
|
||||
if (verbose)
|
||||
if (verbose > 0)
|
||||
error("Failed to resolve callchain. Skipping\n");
|
||||
|
||||
return;
|
||||
|
@ -573,7 +573,7 @@ try_again:
|
||||
if (errno == EINVAL || errno == ENOSYS ||
|
||||
errno == ENOENT || errno == EOPNOTSUPP ||
|
||||
errno == ENXIO) {
|
||||
if (verbose)
|
||||
if (verbose > 0)
|
||||
ui__warning("%s event is not supported by the kernel.\n",
|
||||
perf_evsel__name(counter));
|
||||
counter->supported = false;
|
||||
@ -582,7 +582,7 @@ try_again:
|
||||
!(counter->leader->nr_members > 1))
|
||||
continue;
|
||||
} else if (perf_evsel__fallback(counter, errno, msg, sizeof(msg))) {
|
||||
if (verbose)
|
||||
if (verbose > 0)
|
||||
ui__warning("%s\n", msg);
|
||||
goto try_again;
|
||||
}
|
||||
@ -2539,7 +2539,7 @@ int cmd_stat(int argc, const char **argv, const char *prefix __maybe_unused)
|
||||
|
||||
status = 0;
|
||||
for (run_idx = 0; forever || run_idx < run_count; run_idx++) {
|
||||
if (run_count != 1 && verbose)
|
||||
if (run_count != 1 && verbose > 0)
|
||||
fprintf(output, "[ perf stat: executing run #%d ... ]\n",
|
||||
run_idx + 1);
|
||||
|
||||
|
@ -871,7 +871,7 @@ try_again:
|
||||
if (perf_evsel__open(counter, top->evlist->cpus,
|
||||
top->evlist->threads) < 0) {
|
||||
if (perf_evsel__fallback(counter, errno, msg, sizeof(msg))) {
|
||||
if (verbose)
|
||||
if (verbose > 0)
|
||||
ui__warning("%s\n", msg);
|
||||
goto try_again;
|
||||
}
|
||||
|
@ -1399,7 +1399,7 @@ static struct syscall *trace__syscall_info(struct trace *trace,
|
||||
return &trace->syscalls.table[id];
|
||||
|
||||
out_cant_read:
|
||||
if (verbose) {
|
||||
if (verbose > 0) {
|
||||
fprintf(trace->output, "Problems reading syscall %d", id);
|
||||
if (id <= trace->syscalls.max && trace->syscalls.table[id].name != NULL)
|
||||
fprintf(trace->output, "(%s)", trace->syscalls.table[id].name);
|
||||
@ -1801,10 +1801,10 @@ static void print_location(FILE *f, struct perf_sample *sample,
|
||||
bool print_dso, bool print_sym)
|
||||
{
|
||||
|
||||
if ((verbose || print_dso) && al->map)
|
||||
if ((verbose > 0 || print_dso) && al->map)
|
||||
fprintf(f, "%s@", al->map->dso->long_name);
|
||||
|
||||
if ((verbose || print_sym) && al->sym)
|
||||
if ((verbose > 0 || print_sym) && al->sym)
|
||||
fprintf(f, "%s+0x%" PRIx64, al->sym->name,
|
||||
al->addr - al->sym->start);
|
||||
else if (al->map)
|
||||
|
@ -49,7 +49,7 @@ static char *mapfile(const char *fn, size_t *size)
|
||||
int err;
|
||||
int fd = open(fn, O_RDONLY);
|
||||
|
||||
if (fd < 0 && verbose && fn) {
|
||||
if (fd < 0 && verbose > 0 && fn) {
|
||||
pr_err("Error opening events file '%s': %s\n", fn,
|
||||
strerror(errno));
|
||||
}
|
||||
|
@ -144,7 +144,7 @@ static int run_dir(const char *d, const char *perf)
|
||||
int vcnt = min(verbose, (int) sizeof(v) - 1);
|
||||
char cmd[3*PATH_MAX];
|
||||
|
||||
if (verbose)
|
||||
if (verbose > 0)
|
||||
vcnt++;
|
||||
|
||||
snprintf(cmd, 3*PATH_MAX, PYTHON " %s/attr.py -d %s/attr/ -p %s %.*s",
|
||||
|
@ -299,7 +299,7 @@ static int run_test(struct test *test, int subtest)
|
||||
if (!dont_fork) {
|
||||
pr_debug("test child forked, pid %d\n", getpid());
|
||||
|
||||
if (!verbose) {
|
||||
if (verbose <= 0) {
|
||||
int nullfd = open("/dev/null", O_WRONLY);
|
||||
|
||||
if (nullfd >= 0) {
|
||||
|
@ -599,7 +599,7 @@ static int do_test_code_reading(bool try_kcore)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (verbose) {
|
||||
if (verbose > 0) {
|
||||
char errbuf[512];
|
||||
perf_evlist__strerror_open(evlist, errno, errbuf, sizeof(errbuf));
|
||||
pr_debug("perf_evlist__open() failed!\n%s\n", errbuf);
|
||||
|
@ -19,7 +19,7 @@ static int fdarray__fprintf_prefix(struct fdarray *fda, const char *prefix, FILE
|
||||
{
|
||||
int printed = 0;
|
||||
|
||||
if (!verbose)
|
||||
if (verbose <= 0)
|
||||
return 0;
|
||||
|
||||
printed += fprintf(fp, "\n%s: ", prefix);
|
||||
|
@ -76,7 +76,7 @@ test_llvm__fetch_bpf_obj(void **p_obj_buf,
|
||||
* Skip this test if user's .perfconfig doesn't set [llvm] section
|
||||
* and clang is not found in $PATH, and this is not perf test -v
|
||||
*/
|
||||
if (!force && (verbose == 0 &&
|
||||
if (!force && (verbose <= 0 &&
|
||||
!llvm_param.user_set_param &&
|
||||
llvm__search_clang())) {
|
||||
pr_debug("No clang and no verbosive, skip this test\n");
|
||||
|
@ -1808,7 +1808,7 @@ static void debug_warn(const char *warn, va_list params)
|
||||
{
|
||||
char msg[1024];
|
||||
|
||||
if (!verbose)
|
||||
if (verbose <= 0)
|
||||
return;
|
||||
|
||||
vsnprintf(msg, sizeof(msg), warn, params);
|
||||
|
@ -172,13 +172,13 @@ int test__PERF_RECORD(int subtest __maybe_unused)
|
||||
|
||||
err = perf_evlist__parse_sample(evlist, event, &sample);
|
||||
if (err < 0) {
|
||||
if (verbose)
|
||||
if (verbose > 0)
|
||||
perf_event__fprintf(event, stderr);
|
||||
pr_debug("Couldn't parse sample\n");
|
||||
goto out_delete_evlist;
|
||||
}
|
||||
|
||||
if (verbose) {
|
||||
if (verbose > 0) {
|
||||
pr_info("%" PRIu64" %d ", sample.time, sample.cpu);
|
||||
perf_event__fprintf(event, stderr);
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ int test__python_use(int subtest __maybe_unused)
|
||||
int ret;
|
||||
|
||||
if (asprintf(&cmd, "echo \"import sys ; sys.path.append('%s'); import perf\" | %s %s",
|
||||
PYTHONPATH, PYTHON, verbose ? "" : "2> /dev/null") < 0)
|
||||
PYTHONPATH, PYTHON, verbose > 0 ? "" : "2> /dev/null") < 0)
|
||||
return -1;
|
||||
|
||||
ret = system(cmd) ? -1 : 0;
|
||||
|
@ -109,7 +109,7 @@ int test__thread_map_remove(int subtest __maybe_unused)
|
||||
TEST_ASSERT_VAL("failed to allocate thread_map",
|
||||
threads);
|
||||
|
||||
if (verbose)
|
||||
if (verbose > 0)
|
||||
thread_map__fprintf(threads, stderr);
|
||||
|
||||
TEST_ASSERT_VAL("failed to remove thread",
|
||||
@ -117,7 +117,7 @@ int test__thread_map_remove(int subtest __maybe_unused)
|
||||
|
||||
TEST_ASSERT_VAL("thread_map count != 1", threads->nr == 1);
|
||||
|
||||
if (verbose)
|
||||
if (verbose > 0)
|
||||
thread_map__fprintf(threads, stderr);
|
||||
|
||||
TEST_ASSERT_VAL("failed to remove thread",
|
||||
@ -125,7 +125,7 @@ int test__thread_map_remove(int subtest __maybe_unused)
|
||||
|
||||
TEST_ASSERT_VAL("thread_map count != 0", threads->nr == 0);
|
||||
|
||||
if (verbose)
|
||||
if (verbose > 0)
|
||||
thread_map__fprintf(threads, stderr);
|
||||
|
||||
TEST_ASSERT_VAL("failed to not remove thread",
|
||||
|
@ -168,7 +168,7 @@ next_pair:
|
||||
err = -1;
|
||||
}
|
||||
|
||||
if (!verbose)
|
||||
if (verbose <= 0)
|
||||
goto out;
|
||||
|
||||
header_printed = false;
|
||||
|
@ -73,7 +73,7 @@ static int map_browser__run(struct map_browser *browser)
|
||||
|
||||
if (ui_browser__show(&browser->b, browser->map->dso->long_name,
|
||||
"Press ESC to exit, %s / to search",
|
||||
verbose ? "" : "restart with -v to use") < 0)
|
||||
verbose > 0 ? "" : "restart with -v to use") < 0)
|
||||
return -1;
|
||||
|
||||
while (1) {
|
||||
@ -81,7 +81,7 @@ static int map_browser__run(struct map_browser *browser)
|
||||
|
||||
switch (key) {
|
||||
case '/':
|
||||
if (verbose)
|
||||
if (verbose > 0)
|
||||
map_browser__search(browser);
|
||||
default:
|
||||
break;
|
||||
@ -117,7 +117,7 @@ int map__browse(struct map *map)
|
||||
|
||||
if (maxaddr < pos->end)
|
||||
maxaddr = pos->end;
|
||||
if (verbose) {
|
||||
if (verbose > 0) {
|
||||
u32 *idx = symbol__browser_index(pos);
|
||||
*idx = mb.b.nr_entries;
|
||||
}
|
||||
|
@ -648,7 +648,7 @@ unsigned int hists__sort_list_width(struct hists *hists)
|
||||
ret += fmt->width(fmt, &dummy_hpp, hists);
|
||||
}
|
||||
|
||||
if (verbose && hists__has(hists, sym)) /* Addr + origin */
|
||||
if (verbose > 0 && hists__has(hists, sym)) /* Addr + origin */
|
||||
ret += 3 + BITS_PER_LONG / 4;
|
||||
|
||||
return ret;
|
||||
|
@ -1768,7 +1768,7 @@ int symbol__annotate_printf(struct symbol *sym, struct map *map,
|
||||
printf("%-*.*s----\n",
|
||||
graph_dotted_len, graph_dotted_len, graph_dotted_line);
|
||||
|
||||
if (verbose)
|
||||
if (verbose > 0)
|
||||
symbol__annotate_hits(sym, evsel);
|
||||
|
||||
list_for_each_entry(pos, ¬es->src->source, node) {
|
||||
|
@ -1058,7 +1058,7 @@ int dso__name_len(const struct dso *dso)
|
||||
{
|
||||
if (!dso)
|
||||
return strlen("[unknown]");
|
||||
if (verbose)
|
||||
if (verbose > 0)
|
||||
return dso->long_name_len;
|
||||
|
||||
return dso->short_name_len;
|
||||
|
@ -69,7 +69,7 @@ void hists__calc_col_len(struct hists *hists, struct hist_entry *h)
|
||||
*/
|
||||
if (h->ms.sym) {
|
||||
symlen = h->ms.sym->namelen + 4;
|
||||
if (verbose)
|
||||
if (verbose > 0)
|
||||
symlen += BITS_PER_LONG / 4 + 2 + 3;
|
||||
hists__new_col_len(hists, HISTC_SYMBOL, symlen);
|
||||
} else {
|
||||
@ -93,7 +93,7 @@ void hists__calc_col_len(struct hists *hists, struct hist_entry *h)
|
||||
if (h->branch_info) {
|
||||
if (h->branch_info->from.sym) {
|
||||
symlen = (int)h->branch_info->from.sym->namelen + 4;
|
||||
if (verbose)
|
||||
if (verbose > 0)
|
||||
symlen += BITS_PER_LONG / 4 + 2 + 3;
|
||||
hists__new_col_len(hists, HISTC_SYMBOL_FROM, symlen);
|
||||
|
||||
@ -107,7 +107,7 @@ void hists__calc_col_len(struct hists *hists, struct hist_entry *h)
|
||||
|
||||
if (h->branch_info->to.sym) {
|
||||
symlen = (int)h->branch_info->to.sym->namelen + 4;
|
||||
if (verbose)
|
||||
if (verbose > 0)
|
||||
symlen += BITS_PER_LONG / 4 + 2 + 3;
|
||||
hists__new_col_len(hists, HISTC_SYMBOL_TO, symlen);
|
||||
|
||||
|
@ -745,7 +745,7 @@ static int pmu_resolve_param_term(struct parse_events_term *term,
|
||||
}
|
||||
}
|
||||
|
||||
if (verbose)
|
||||
if (verbose > 0)
|
||||
printf("Required parameter '%s' not specified\n", term->config);
|
||||
|
||||
return -1;
|
||||
@ -803,7 +803,7 @@ static int pmu_config_term(struct list_head *formats,
|
||||
|
||||
format = pmu_find_format(formats, term->config);
|
||||
if (!format) {
|
||||
if (verbose)
|
||||
if (verbose > 0)
|
||||
printf("Invalid event/parameter '%s'\n", term->config);
|
||||
if (err) {
|
||||
char *pmu_term = pmu_formats_string(formats);
|
||||
@ -847,7 +847,7 @@ static int pmu_config_term(struct list_head *formats,
|
||||
val = term->val.num;
|
||||
} else if (term->type_val == PARSE_EVENTS__TERM_TYPE_STR) {
|
||||
if (strcmp(term->val.str, "?")) {
|
||||
if (verbose) {
|
||||
if (verbose > 0) {
|
||||
pr_info("Invalid sysfs entry %s=%s\n",
|
||||
term->config, term->val.str);
|
||||
}
|
||||
@ -1232,7 +1232,7 @@ void print_pmu_events(const char *event_glob, bool name_only, bool quiet_flag,
|
||||
printf("%*s", 8, "[");
|
||||
wordwrap(aliases[j].desc, 8, columns, 0);
|
||||
printf("]\n");
|
||||
if (verbose)
|
||||
if (verbose > 0)
|
||||
printf("%*s%s/%s/\n", 8, "", aliases[j].pmu, aliases[j].str);
|
||||
} else
|
||||
printf(" %-50s [Kernel PMU event]\n", aliases[j].name);
|
||||
|
@ -594,7 +594,7 @@ static int find_perf_probe_point_from_dwarf(struct probe_trace_point *tp,
|
||||
pr_debug("try to find information at %" PRIx64 " in %s\n", addr,
|
||||
tp->module ? : "kernel");
|
||||
|
||||
dinfo = debuginfo_cache__open(tp->module, verbose == 0);
|
||||
dinfo = debuginfo_cache__open(tp->module, verbose <= 0);
|
||||
if (dinfo)
|
||||
ret = debuginfo__find_probe_point(dinfo,
|
||||
(unsigned long)addr, pp);
|
||||
|
@ -151,7 +151,7 @@ static int64_t _sort__dso_cmp(struct map *map_l, struct map *map_r)
|
||||
if (!dso_l || !dso_r)
|
||||
return cmp_null(dso_r, dso_l);
|
||||
|
||||
if (verbose) {
|
||||
if (verbose > 0) {
|
||||
dso_name_l = dso_l->long_name;
|
||||
dso_name_r = dso_r->long_name;
|
||||
} else {
|
||||
@ -172,8 +172,8 @@ static int _hist_entry__dso_snprintf(struct map *map, char *bf,
|
||||
size_t size, unsigned int width)
|
||||
{
|
||||
if (map && map->dso) {
|
||||
const char *dso_name = !verbose ? map->dso->short_name :
|
||||
map->dso->long_name;
|
||||
const char *dso_name = verbose > 0 ? map->dso->long_name :
|
||||
map->dso->short_name;
|
||||
return repsep_snprintf(bf, size, "%-*.*s", width, width, dso_name);
|
||||
}
|
||||
|
||||
@ -261,7 +261,7 @@ static int _hist_entry__sym_snprintf(struct map *map, struct symbol *sym,
|
||||
{
|
||||
size_t ret = 0;
|
||||
|
||||
if (verbose) {
|
||||
if (verbose > 0) {
|
||||
char o = map ? dso__symtab_origin(map->dso) : '!';
|
||||
ret += repsep_snprintf(bf, size, "%-#*llx %c ",
|
||||
BITS_PER_LONG / 4 + 2, ip, o);
|
||||
|
@ -344,7 +344,7 @@ int perf_stat_process_counter(struct perf_stat_config *config,
|
||||
for (i = 0; i < 3; i++)
|
||||
update_stats(&ps->res_stats[i], count[i]);
|
||||
|
||||
if (verbose) {
|
||||
if (verbose > 0) {
|
||||
fprintf(config->output, "%s: %" PRIu64 " %" PRIu64 " %" PRIu64 "\n",
|
||||
perf_evsel__name(counter), count[0], count[1], count[2]);
|
||||
}
|
||||
|
@ -213,7 +213,7 @@ static bool want_demangle(bool is_kernel_sym)
|
||||
|
||||
static char *demangle_sym(struct dso *dso, int kmodule, const char *elf_name)
|
||||
{
|
||||
int demangle_flags = verbose ? (DMGL_PARAMS | DMGL_ANSI) : DMGL_NO_OPTS;
|
||||
int demangle_flags = verbose > 0 ? (DMGL_PARAMS | DMGL_ANSI) : DMGL_NO_OPTS;
|
||||
char *demangled = NULL;
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user