[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20160513130854.GI11346@kernel.org>
Date: Fri, 13 May 2016 10:08:54 -0300
From: Arnaldo Carvalho de Melo <acme@...nel.org>
To: Wang Nan <wangnan0@...wei.com>
Cc: arnaldo.melo@...il.com, linux-kernel@...r.kernel.org,
He Kuang <hekuang@...wei.com>,
Arnaldo Carvalho de Melo <acme@...hat.com>,
Jiri Olsa <jolsa@...nel.org>,
Masami Hiramatsu <masami.hiramatsu.pt@...achi.com>,
Namhyung Kim <namhyung@...nel.org>,
Zefan Li <lizefan@...wei.com>, pi3orama@....com
Subject: Re: [PATCH 09/17] perf tools: Detect avalibility of write_backward
Em Fri, May 13, 2016 at 07:56:06AM +0000, Wang Nan escreveu:
> Detect avalibility of write_backward and save the result into
> record_opts. With write_backward the start pointer of a ring
> buffer mapped read only can be found reliably.
We have perf_missing_features for that, please try to use it.
- Arnaldo
> Signed-off-by: Wang Nan <wangnan0@...wei.com>
> Signed-off-by: He Kuang <hekuang@...wei.com>
> Cc: Arnaldo Carvalho de Melo <acme@...hat.com>
> Cc: Jiri Olsa <jolsa@...nel.org>
> Cc: Masami Hiramatsu <masami.hiramatsu.pt@...achi.com>
> Cc: Namhyung Kim <namhyung@...nel.org>
> Cc: Zefan Li <lizefan@...wei.com>
> Cc: pi3orama@....com
> ---
> tools/perf/perf.h | 1 +
> tools/perf/util/record.c | 11 +++++++++++
> 2 files changed, 12 insertions(+)
>
> diff --git a/tools/perf/perf.h b/tools/perf/perf.h
> index cd8f1b1..c35bcfd 100644
> --- a/tools/perf/perf.h
> +++ b/tools/perf/perf.h
> @@ -72,6 +72,7 @@ struct record_opts {
> bool sample_transaction;
> unsigned initial_delay;
> bool use_clockid;
> + bool has_write_backward;
> clockid_t clockid;
> unsigned int proc_map_timeout;
> };
> diff --git a/tools/perf/util/record.c b/tools/perf/util/record.c
> index 481792c..bb871d8 100644
> --- a/tools/perf/util/record.c
> +++ b/tools/perf/util/record.c
> @@ -85,6 +85,11 @@ static void perf_probe_comm_exec(struct perf_evsel *evsel)
> evsel->attr.comm_exec = 1;
> }
>
> +static void perf_probe_write_backward(struct perf_evsel *evsel)
> +{
> + evsel->attr.write_backward = 1;
> +}
> +
> static void perf_probe_context_switch(struct perf_evsel *evsel)
> {
> evsel->attr.context_switch = 1;
> @@ -105,6 +110,11 @@ bool perf_can_record_switch_events(void)
> return perf_probe_api(perf_probe_context_switch);
> }
>
> +static bool perf_can_write_backward(void)
> +{
> + return perf_probe_api(perf_probe_write_backward);
> +}
> +
> bool perf_can_record_cpu_wide(void)
> {
> struct perf_event_attr attr = {
> @@ -236,6 +246,7 @@ static int record_opts__config_freq(struct record_opts *opts)
>
> int record_opts__config(struct record_opts *opts)
> {
> + opts->has_write_backward = perf_can_write_backward();
> return record_opts__config_freq(opts);
> }
>
> --
> 1.8.3.4
Powered by blists - more mailing lists