perf evsel: Add has_callchain() helper to make code more compact/clear
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: 27de9b2bd996de0ca4079c42c81c85158e10145c Gitweb: https://git.kernel.org/tip/27de9b2bd996de0ca4079c42c81c85158e10145c Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Mon, 28 May 2018 16:00:29 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Tue, 5 Jun 2018 10:09:54 -0300
perf evsel: Add has_callchain() helper to make code more compact/clear
Its common to have the (evsel->attr.sample_type & PERF_SAMPLE_CALLCHAIN), so add an evsel__has_callchain(evsel) helper.
This will actually get more uses as we check that instead of symbol_conf.use_callchain in places where that produces the same result but makes this decision to be more fine grained, per evsel.
Cc Adrian Hunter <[email protected]>
Cc David Ahern <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Wang Nan <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/builtin-sched.c | 3 +-- tools/perf/builtin-script.c | 10 +++------- tools/perf/builtin-trace.c | 2 +- tools/perf/tests/parse-events.c | 4 ++-- tools/perf/util/evsel.c | 4 ++-- tools/perf/util/evsel.h | 5 +++++ tools/perf/util/hist.c | 2 +- tools/perf/util/session.c | 2 +- 8 files changed, 16 insertions(+), 16 deletions(-)
tools/perf/builtin-sched.c +1 -2
@@ -2933,8 +2933,7 @@ static int timehist_check_attr(struct perf_sched *sched,return -1 ; } -if (sched->show_callchain && - !(evsel->attr.sample_type &PERF_SAMPLE_CALLCHAIN )) { +if (sched->show_callchain && !evsel__has_callchain (evsel)) {pr_info ("Samples do not have callchains.\n" ); sched->show_callchain =0 ; symbol_conf.use_callchain =0 ;
tools/perf/builtin-script.c +3 -7
@@ -517,7 +517,7 @@ static int perf_session__check_output_opt(struct perf_session *session)evlist__for_each_entry (session->evlist, evsel) { not_pipe = true; -if (evsel->attr.sample_type &PERF_SAMPLE_CALLCHAIN ) { +if (evsel__has_callchain (evsel)) { use_callchain = true;break ; }
@@ -532,22 +532,18 @@ static int perf_session__check_output_opt(struct perf_session *session)*/ if (symbol_conf.use_callchain && !output[PERF_TYPE_TRACEPOINT ].user_set) { -struct perf_event_attr *attr; - j =PERF_TYPE_TRACEPOINT ;evlist__for_each_entry (session->evlist, evsel) {if (evsel->attr.type != j)continue ; - attr = &evsel->attr; - -if (attr->sample_type &PERF_SAMPLE_CALLCHAIN ) { +if (evsel__has_callchain (evsel)) { output[j].fields |=PERF_OUTPUT_IP ; output[j].fields |=PERF_OUTPUT_SYM ; output[j].fields |=PERF_OUTPUT_SYMOFFSET ; output[j].fields |=PERF_OUTPUT_DSO ; -set_print_ip_opts (attr); +set_print_ip_opts (&evsel->attr); goto out; } }
tools/perf/builtin-trace.c +1 -1
@@ -2491,7 +2491,7 @@ static int trace__run(struct trace *trace, int argc, const char **argv)* to override an explicitely set --max-stack global setting. */ evlist__for_each_entry (evlist, evsel) { -if ((evsel->attr.sample_type &PERF_SAMPLE_CALLCHAIN ) && +if (evsel__has_callchain (evsel) && evsel->attr.sample_max_stack ==0 ) evsel->attr.sample_max_stack = trace->max_stack; }
tools/perf/tests/parse-events.c +2 -2
@@ -499,7 +499,7 @@ static int test__checkevent_pmu_partial_time_callgraph(struct perf_evlist *evlis* while this test executes only parse events method. */ TEST_ASSERT_VAL ("wrong period" ,0 == evsel->attr.sample_period); -TEST_ASSERT_VAL ("wrong callgraph" , !(PERF_SAMPLE_CALLCHAIN & evsel->attr.sample_type)); +TEST_ASSERT_VAL ("wrong callgraph" , !evsel__has_callchain (evsel));TEST_ASSERT_VAL ("wrong time" , !(PERF_SAMPLE_TIME & evsel->attr.sample_type));/* cpu/config=2,call-graph=no,time=0,period=2000/ */
@@ -512,7 +512,7 @@ static int test__checkevent_pmu_partial_time_callgraph(struct perf_evlist *evlis* while this test executes only parse events method. */ TEST_ASSERT_VAL ("wrong period" ,0 == evsel->attr.sample_period); -TEST_ASSERT_VAL ("wrong callgraph" , !(PERF_SAMPLE_CALLCHAIN & evsel->attr.sample_type)); +TEST_ASSERT_VAL ("wrong callgraph" , !evsel__has_callchain (evsel));TEST_ASSERT_VAL ("wrong time" , !(PERF_SAMPLE_TIME & evsel->attr.sample_type));return 0 ;
tools/perf/util/evsel.c +2 -2
@@ -2197,7 +2197,7 @@ int perf_evsel__parse_sample(struct perf_evsel *evsel, union perf_event *event, } } -if (type &PERF_SAMPLE_CALLCHAIN ) { +if (evsel__has_callchain (evsel)) {const u64 max_callchain_nr =UINT64_MAX /sizeof (u64);OVERFLOW_CHECK_u64 (array);
@@ -2857,7 +2857,7 @@ int perf_evsel__open_strerror(struct perf_evsel *evsel, struct target *target,"Hint: Try again after reducing the number of events.\n" "Hint: Try increasing the limit with 'ulimit -n <limit>'");case ENOMEM : -if ((evsel->attr.sample_type &PERF_SAMPLE_CALLCHAIN ) !=0 && +if (evsel__has_callchain (evsel) &&access ("/proc/sys/kernel/perf_event_max_stack" ,F_OK ) ==0 )return scnprintf (msg, size, "Not enough memory to setup event with callchain.\n"
tools/perf/util/evsel.h +5 -0
@@ -459,6 +459,11 @@ static inline bool perf_evsel__has_branch_callstack(const struct perf_evsel *evsreturn evsel->attr.branch_sample_type &PERF_SAMPLE_BRANCH_CALL_STACK ; } +static inline bool evsel__has_callchain (const struct perf_evsel *evsel) +{ +return (evsel->attr.sample_type &PERF_SAMPLE_CALLCHAIN ) !=0 ; +} +typedef int (*attr__fprintf_f )(FILE *,const char *,const char *,void *); int perf_event_attr__fprintf(FILE *fp, struct perf_event_attr *attr,
tools/perf/util/hist.c +1 -1
@@ -1757,7 +1757,7 @@ void perf_evsel__output_resort(struct perf_evsel *evsel, struct ui_progress *probool use_callchain;if (evsel && symbol_conf.use_callchain && !symbol_conf.show_ref_callgraph) - use_callchain = evsel->attr.sample_type &PERF_SAMPLE_CALLCHAIN ; + use_callchain =evsel__has_callchain (evsel);else use_callchain = symbol_conf.use_callchain;
tools/perf/util/session.c +1 -1
@@ -1094,7 +1094,7 @@ static void dump_sample(struct perf_evsel *evsel, union perf_event *event, sample_type = evsel->attr.sample_type; -if (sample_type &PERF_SAMPLE_CALLCHAIN ) +if (evsel__has_callchain (evsel))callchain__printf (evsel, sample);if ((sample_type &PERF_SAMPLE_BRANCH_STACK ) && !perf_evsel__has_branch_callstack (evsel))