From: Jiri Olsa <jolsa@redhat.com>
To: Kan Liang <kan.liang@intel.com>
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
Date: Wed, 5 Aug 2015 09:18:31 +0200 [thread overview]
Message-ID: <20150805071831.GB20530@krava.redhat.com> (raw)
In-Reply-To: <1438677022-34296-3-git-send-email-kan.liang@intel.com>
On Tue, Aug 04, 2015 at 04:30:20AM -0400, Kan Liang wrote:
> From: Kan Liang <kan.liang@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 <jolsa@kernel.org>
thanks,
jirka
>
> Signed-off-by: Kan Liang <kan.liang@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
>
next prev parent reply other threads:[~2015-08-05 7:18 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-04 8:30 [PATCH RFC V8 0/4] per event callgraph and time support Kan Liang
2015-08-04 8:30 ` [PATCH RFC V8 1/4] perf,tools: per-event " Kan Liang
2015-08-05 7:18 ` Jiri Olsa
2015-08-06 7:02 ` [tip:perf/core] perf tools: Per-event " tip-bot for Kan Liang
2015-08-04 8:30 ` [PATCH RFC V8 2/4] perf,tools: refine parse/config callchain functions Kan Liang
2015-08-05 7:18 ` Jiri Olsa [this message]
2015-08-06 7:03 ` [tip:perf/core] perf tools: Refine parse/ config " tip-bot for Kan Liang
2015-08-04 8:30 ` [PATCH RFC V8 3/4] perf,tools: per-event callgraph support Kan Liang
2015-08-05 7:21 ` Jiri Olsa
2015-08-05 7:28 ` Jiri Olsa
2015-08-05 15:45 ` Liang, Kan
2015-08-06 18:55 ` Arnaldo Carvalho de Melo
2015-08-04 8:30 ` [PATCH RFC V8 4/4] perf,tests: Add tests to callgraph and time parse Kan Liang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150805071831.GB20530@krava.redhat.com \
--to=jolsa@redhat.com \
--cc=acme@kernel.org \
--cc=ak@linux.intel.com \
--cc=jolsa@kernel.org \
--cc=kan.liang@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=namhyung@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.