Re: [PATCH 1/7] perf script: Do not call perf_event__preprocess_sample() twice)
On 03/12/13 20:23, Arnaldo Carvalho de Melo wrote: > Em Tue, Dec 03, 2013 at 09:23:04AM +0200, Adrian Hunter escreveu: >> perf_event__preprocess_sample() is called in >> process_sample_event(). Instead of calling it >> again in perf_evsel__print_ip(), pass though >> the resultant addr_location. > > >> +++ b/tools/perf/util/session.c >> @@ -1487,11 +1487,12 @@ struct perf_evsel >> *perf_session__find_first_evtype(struct perf_session *session, >> return NULL; >> } >> >> -void perf_evsel__print_ip(struct perf_evsel *evsel, union perf_event *event, >> +void perf_evsel__print_ip(struct perf_evsel *evsel, >> + union perf_event *event __maybe_unused, > > Why do we have to keep this parameter? You are right - it is not needed. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 1/7] perf script: Do not call perf_event__preprocess_sample() twice)
On 03/12/13 20:23, Arnaldo Carvalho de Melo wrote: Em Tue, Dec 03, 2013 at 09:23:04AM +0200, Adrian Hunter escreveu: perf_event__preprocess_sample() is called in process_sample_event(). Instead of calling it again in perf_evsel__print_ip(), pass though the resultant addr_location. SNIP +++ b/tools/perf/util/session.c @@ -1487,11 +1487,12 @@ struct perf_evsel *perf_session__find_first_evtype(struct perf_session *session, return NULL; } -void perf_evsel__print_ip(struct perf_evsel *evsel, union perf_event *event, +void perf_evsel__print_ip(struct perf_evsel *evsel, + union perf_event *event __maybe_unused, Why do we have to keep this parameter? You are right - it is not needed. -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 1/7] perf script: Do not call perf_event__preprocess_sample() twice)
Em Tue, Dec 03, 2013 at 09:23:04AM +0200, Adrian Hunter escreveu: > perf_event__preprocess_sample() is called in > process_sample_event(). Instead of calling it > again in perf_evsel__print_ip(), pass though > the resultant addr_location. > +++ b/tools/perf/util/session.c > @@ -1487,11 +1487,12 @@ struct perf_evsel > *perf_session__find_first_evtype(struct perf_session *session, > return NULL; > } > > -void perf_evsel__print_ip(struct perf_evsel *evsel, union perf_event *event, > +void perf_evsel__print_ip(struct perf_evsel *evsel, > + union perf_event *event __maybe_unused, Why do we have to keep this parameter? - Arnaldo -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 1/7] perf script: Do not call perf_event__preprocess_sample() twice)
Em Tue, Dec 03, 2013 at 09:23:04AM +0200, Adrian Hunter escreveu: perf_event__preprocess_sample() is called in process_sample_event(). Instead of calling it again in perf_evsel__print_ip(), pass though the resultant addr_location. SNIP +++ b/tools/perf/util/session.c @@ -1487,11 +1487,12 @@ struct perf_evsel *perf_session__find_first_evtype(struct perf_session *session, return NULL; } -void perf_evsel__print_ip(struct perf_evsel *evsel, union perf_event *event, +void perf_evsel__print_ip(struct perf_evsel *evsel, + union perf_event *event __maybe_unused, Why do we have to keep this parameter? - Arnaldo -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH 1/7] perf script: Do not call perf_event__preprocess_sample() twice)
perf_event__preprocess_sample() is called in process_sample_event(). Instead of calling it again in perf_evsel__print_ip(), pass though the resultant addr_location. Signed-off-by: Adrian Hunter --- tools/perf/builtin-script.c | 11 ++- tools/perf/util/session.c | 33 - tools/perf/util/session.h | 3 ++- 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 952dce9..5b865a9 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -414,7 +414,8 @@ static void print_sample_bts(union perf_event *event, struct perf_sample *sample, struct perf_evsel *evsel, struct machine *machine, -struct thread *thread) +struct thread *thread, +struct addr_location *al) { struct perf_event_attr *attr = >attr; @@ -424,7 +425,7 @@ static void print_sample_bts(union perf_event *event, printf(" "); else printf("\n"); - perf_evsel__print_ip(evsel, event, sample, machine, + perf_evsel__print_ip(evsel, event, sample, machine, al, output[attr->type].print_ip_opts, PERF_MAX_STACK_DEPTH); } @@ -443,7 +444,7 @@ static void print_sample_bts(union perf_event *event, static void process_event(union perf_event *event, struct perf_sample *sample, struct perf_evsel *evsel, struct machine *machine, struct thread *thread, - struct addr_location *al __maybe_unused) + struct addr_location *al) { struct perf_event_attr *attr = >attr; @@ -458,7 +459,7 @@ static void process_event(union perf_event *event, struct perf_sample *sample, } if (is_bts_event(attr)) { - print_sample_bts(event, sample, evsel, machine, thread); + print_sample_bts(event, sample, evsel, machine, thread, al); return; } @@ -474,7 +475,7 @@ static void process_event(union perf_event *event, struct perf_sample *sample, else printf("\n"); - perf_evsel__print_ip(evsel, event, sample, machine, + perf_evsel__print_ip(evsel, event, sample, machine, al, output[attr->type].print_ip_opts, PERF_MAX_STACK_DEPTH); } diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index 4ce146b..bc821b3 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c @@ -1487,11 +1487,12 @@ struct perf_evsel *perf_session__find_first_evtype(struct perf_session *session, return NULL; } -void perf_evsel__print_ip(struct perf_evsel *evsel, union perf_event *event, +void perf_evsel__print_ip(struct perf_evsel *evsel, + union perf_event *event __maybe_unused, struct perf_sample *sample, struct machine *machine, - unsigned int print_opts, unsigned int stack_depth) + struct addr_location *al, unsigned int print_opts, + unsigned int stack_depth) { - struct addr_location al; struct callchain_cursor_node *node; int print_ip = print_opts & PRINT_IP_OPT_IP; int print_sym = print_opts & PRINT_IP_OPT_SYM; @@ -1500,15 +1501,10 @@ void perf_evsel__print_ip(struct perf_evsel *evsel, union perf_event *event, int print_oneline = print_opts & PRINT_IP_OPT_ONELINE; char s = print_oneline ? ' ' : '\t'; - if (perf_event__preprocess_sample(event, machine, , sample) < 0) { - error("problem processing %d event, skipping it.\n", - event->header.type); - return; - } - if (symbol_conf.use_callchain && sample->callchain) { + struct addr_location node_al; - if (machine__resolve_callchain(machine, evsel, al.thread, + if (machine__resolve_callchain(machine, evsel, al->thread, sample, NULL, NULL, PERF_MAX_STACK_DEPTH) != 0) { if (verbose) @@ -1517,6 +1513,9 @@ void perf_evsel__print_ip(struct perf_evsel *evsel, union perf_event *event, } callchain_cursor_commit(_cursor); + if (print_symoffset) + node_al = *al; + while (stack_depth) { node = callchain_cursor_current(_cursor); if (!node) @@ -1531,9 +1530,9 @@ void perf_evsel__print_ip(struct perf_evsel
[PATCH 1/7] perf script: Do not call perf_event__preprocess_sample() twice)
perf_event__preprocess_sample() is called in process_sample_event(). Instead of calling it again in perf_evsel__print_ip(), pass though the resultant addr_location. Signed-off-by: Adrian Hunter adrian.hun...@intel.com --- tools/perf/builtin-script.c | 11 ++- tools/perf/util/session.c | 33 - tools/perf/util/session.h | 3 ++- 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 952dce9..5b865a9 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -414,7 +414,8 @@ static void print_sample_bts(union perf_event *event, struct perf_sample *sample, struct perf_evsel *evsel, struct machine *machine, -struct thread *thread) +struct thread *thread, +struct addr_location *al) { struct perf_event_attr *attr = evsel-attr; @@ -424,7 +425,7 @@ static void print_sample_bts(union perf_event *event, printf( ); else printf(\n); - perf_evsel__print_ip(evsel, event, sample, machine, + perf_evsel__print_ip(evsel, event, sample, machine, al, output[attr-type].print_ip_opts, PERF_MAX_STACK_DEPTH); } @@ -443,7 +444,7 @@ static void print_sample_bts(union perf_event *event, static void process_event(union perf_event *event, struct perf_sample *sample, struct perf_evsel *evsel, struct machine *machine, struct thread *thread, - struct addr_location *al __maybe_unused) + struct addr_location *al) { struct perf_event_attr *attr = evsel-attr; @@ -458,7 +459,7 @@ static void process_event(union perf_event *event, struct perf_sample *sample, } if (is_bts_event(attr)) { - print_sample_bts(event, sample, evsel, machine, thread); + print_sample_bts(event, sample, evsel, machine, thread, al); return; } @@ -474,7 +475,7 @@ static void process_event(union perf_event *event, struct perf_sample *sample, else printf(\n); - perf_evsel__print_ip(evsel, event, sample, machine, + perf_evsel__print_ip(evsel, event, sample, machine, al, output[attr-type].print_ip_opts, PERF_MAX_STACK_DEPTH); } diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index 4ce146b..bc821b3 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c @@ -1487,11 +1487,12 @@ struct perf_evsel *perf_session__find_first_evtype(struct perf_session *session, return NULL; } -void perf_evsel__print_ip(struct perf_evsel *evsel, union perf_event *event, +void perf_evsel__print_ip(struct perf_evsel *evsel, + union perf_event *event __maybe_unused, struct perf_sample *sample, struct machine *machine, - unsigned int print_opts, unsigned int stack_depth) + struct addr_location *al, unsigned int print_opts, + unsigned int stack_depth) { - struct addr_location al; struct callchain_cursor_node *node; int print_ip = print_opts PRINT_IP_OPT_IP; int print_sym = print_opts PRINT_IP_OPT_SYM; @@ -1500,15 +1501,10 @@ void perf_evsel__print_ip(struct perf_evsel *evsel, union perf_event *event, int print_oneline = print_opts PRINT_IP_OPT_ONELINE; char s = print_oneline ? ' ' : '\t'; - if (perf_event__preprocess_sample(event, machine, al, sample) 0) { - error(problem processing %d event, skipping it.\n, - event-header.type); - return; - } - if (symbol_conf.use_callchain sample-callchain) { + struct addr_location node_al; - if (machine__resolve_callchain(machine, evsel, al.thread, + if (machine__resolve_callchain(machine, evsel, al-thread, sample, NULL, NULL, PERF_MAX_STACK_DEPTH) != 0) { if (verbose) @@ -1517,6 +1513,9 @@ void perf_evsel__print_ip(struct perf_evsel *evsel, union perf_event *event, } callchain_cursor_commit(callchain_cursor); + if (print_symoffset) + node_al = *al; + while (stack_depth) { node = callchain_cursor_current(callchain_cursor); if (!node) @@ -1531,9 +1530,9 @@ void