On Tue, Aug 04, 2015 at 04:30:20AM -0400, Kan Liang wrote: > From: Kan Liang <kan.li...@intel.com> > > 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 <jo...@kernel.org> thanks, jirka > > Signed-off-by: Kan Liang <kan.li...@intel.com> > --- > 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 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/