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

