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 <[email protected]>
> Signed-off-by: He Kuang <[email protected]>
> Cc: Arnaldo Carvalho de Melo <[email protected]>
> Cc: Jiri Olsa <[email protected]>
> Cc: Masami Hiramatsu <[email protected]>
> Cc: Namhyung Kim <[email protected]>
> Cc: Zefan Li <[email protected]>
> Cc: [email protected]
> ---
>  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

Reply via email to