Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751867AbbHEHSi (ORCPT ); Wed, 5 Aug 2015 03:18:38 -0400 Received: from mx1.redhat.com ([209.132.183.28]:47936 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750980AbbHEHSh (ORCPT ); Wed, 5 Aug 2015 03:18:37 -0400 Date: Wed, 5 Aug 2015 09:18:31 +0200 From: Jiri Olsa To: Kan Liang Cc: acme@kernel.org, jolsa@kernel.org, namhyung@kernel.org, ak@linux.intel.com, linux-kernel@vger.kernel.org Subject: Re: [PATCH RFC V8 2/4] perf,tools: refine parse/config callchain functions Message-ID: <20150805071831.GB20530@krava.redhat.com> References: <1438677022-34296-1-git-send-email-kan.liang@intel.com> <1438677022-34296-3-git-send-email-kan.liang@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1438677022-34296-3-git-send-email-kan.liang@intel.com> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5973 Lines: 157 On Tue, Aug 04, 2015 at 04:30:20AM -0400, Kan Liang wrote: > From: Kan Liang > > Pass global callchain_param into parse_callchain_record_opt and > perf_evsel__config_callgraph as parameter. So we can reuse these > functions to parse/config local param for callchain. Acked-by: Jiri Olsa thanks, jirka > > Signed-off-by: Kan Liang > --- > tools/perf/builtin-record.c | 2 +- > tools/perf/util/callchain.c | 14 +++++++------- > tools/perf/util/callchain.h | 2 +- > tools/perf/util/evsel.c | 11 ++++++----- > 4 files changed, 15 insertions(+), 14 deletions(-) > > diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c > index f51131b..25cf6b4 100644 > --- a/tools/perf/builtin-record.c > +++ b/tools/perf/builtin-record.c > @@ -779,7 +779,7 @@ int record_parse_callchain_opt(const struct option *opt, > return 0; > } > > - ret = parse_callchain_record_opt(arg); > + ret = parse_callchain_record_opt(arg, &callchain_param); > if (!ret) > callchain_debug(); > > diff --git a/tools/perf/util/callchain.c b/tools/perf/util/callchain.c > index 9f643ee..931cca8 100644 > --- a/tools/perf/util/callchain.c > +++ b/tools/perf/util/callchain.c > @@ -53,7 +53,7 @@ static int get_stack_size(const char *str, unsigned long *_size) > } > #endif /* HAVE_DWARF_UNWIND_SUPPORT */ > > -int parse_callchain_record_opt(const char *arg) > +int parse_callchain_record_opt(const char *arg, struct callchain_param *param) > { > char *tok, *name, *saveptr = NULL; > char *buf; > @@ -73,7 +73,7 @@ int parse_callchain_record_opt(const char *arg) > /* Framepointer style */ > if (!strncmp(name, "fp", sizeof("fp"))) { > if (!strtok_r(NULL, ",", &saveptr)) { > - callchain_param.record_mode = CALLCHAIN_FP; > + param->record_mode = CALLCHAIN_FP; > ret = 0; > } else > pr_err("callchain: No more arguments " > @@ -86,20 +86,20 @@ int parse_callchain_record_opt(const char *arg) > const unsigned long default_stack_dump_size = 8192; > > ret = 0; > - callchain_param.record_mode = CALLCHAIN_DWARF; > - callchain_param.dump_size = default_stack_dump_size; > + param->record_mode = CALLCHAIN_DWARF; > + param->dump_size = default_stack_dump_size; > > tok = strtok_r(NULL, ",", &saveptr); > if (tok) { > unsigned long size = 0; > > ret = get_stack_size(tok, &size); > - callchain_param.dump_size = size; > + param->dump_size = size; > } > #endif /* HAVE_DWARF_UNWIND_SUPPORT */ > } else if (!strncmp(name, "lbr", sizeof("lbr"))) { > if (!strtok_r(NULL, ",", &saveptr)) { > - callchain_param.record_mode = CALLCHAIN_LBR; > + param->record_mode = CALLCHAIN_LBR; > ret = 0; > } else > pr_err("callchain: No more arguments " > @@ -219,7 +219,7 @@ int perf_callchain_config(const char *var, const char *value) > var += sizeof("call-graph.") - 1; > > if (!strcmp(var, "record-mode")) > - return parse_callchain_record_opt(value); > + return parse_callchain_record_opt(value, &callchain_param); > #ifdef HAVE_DWARF_UNWIND_SUPPORT > if (!strcmp(var, "dump-size")) { > unsigned long size = 0; > diff --git a/tools/perf/util/callchain.h b/tools/perf/util/callchain.h > index 679c2c6..68a32c2 100644 > --- a/tools/perf/util/callchain.h > +++ b/tools/perf/util/callchain.h > @@ -177,7 +177,7 @@ int fill_callchain_info(struct addr_location *al, struct callchain_cursor_node * > bool hide_unresolved); > > extern const char record_callchain_help[]; > -int parse_callchain_record_opt(const char *arg); > +int parse_callchain_record_opt(const char *arg, struct callchain_param *param); > int parse_callchain_report_opt(const char *arg); > int perf_callchain_config(const char *var, const char *value); > > diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c > index 7febfe2..f572f46 100644 > --- a/tools/perf/util/evsel.c > +++ b/tools/perf/util/evsel.c > @@ -545,14 +545,15 @@ int perf_evsel__group_desc(struct perf_evsel *evsel, char *buf, size_t size) > > static void > perf_evsel__config_callgraph(struct perf_evsel *evsel, > - struct record_opts *opts) > + struct record_opts *opts, > + struct callchain_param *param) > { > bool function = perf_evsel__is_function_event(evsel); > struct perf_event_attr *attr = &evsel->attr; > > perf_evsel__set_sample_bit(evsel, CALLCHAIN); > > - if (callchain_param.record_mode == CALLCHAIN_LBR) { > + if (param->record_mode == CALLCHAIN_LBR) { > if (!opts->branch_stack) { > if (attr->exclude_user) { > pr_warning("LBR callstack option is only available " > @@ -568,12 +569,12 @@ perf_evsel__config_callgraph(struct perf_evsel *evsel, > "Falling back to framepointers.\n"); > } > > - if (callchain_param.record_mode == CALLCHAIN_DWARF) { > + if (param->record_mode == CALLCHAIN_DWARF) { > if (!function) { > perf_evsel__set_sample_bit(evsel, REGS_USER); > perf_evsel__set_sample_bit(evsel, STACK_USER); > attr->sample_regs_user = PERF_REGS_MASK; > - attr->sample_stack_user = callchain_param.dump_size; > + attr->sample_stack_user = param->dump_size; > attr->exclude_callchain_user = 1; > } else { > pr_info("Cannot use DWARF unwind for function trace event," > @@ -714,7 +715,7 @@ void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts) > evsel->attr.exclude_callchain_user = 1; > > if (callchain_param.enabled && !evsel->no_aux_samples) > - perf_evsel__config_callgraph(evsel, opts); > + perf_evsel__config_callgraph(evsel, opts, &callchain_param); > > if (opts->sample_intr_regs) { > attr->sample_regs_intr = PERF_REGS_MASK; > -- > 1.8.3.1 > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/