Messages in this thread | | | From | Namhyung Kim <> | Subject | Re: [PATCH 4/4] perf tools: Retry mapping buffers readonly on EACCES | Date | Fri, 14 Jun 2013 11:08:40 +0900 |
| |
Hi Robert,
On Fri, 31 May 2013 11:16:25 +0200, Robert Richter wrote: > From: Robert Richter <robert.richter@calxeda.com> > > Persistent event buffers may only be mmapped readonly. Thus, retry > mapping it readonly if mmap returns EACCES after trying to mmap > writable. > > Signed-off-by: Robert Richter <robert.richter@calxeda.com> > --- > tools/perf/builtin-record.c | 7 ++++++- > tools/perf/builtin-top.c | 8 ++++++-- > tools/perf/perf.h | 1 + > 3 files changed, 13 insertions(+), 3 deletions(-) > > diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c > index cdf58ec..916776d 100644 > --- a/tools/perf/builtin-record.c > +++ b/tools/perf/builtin-record.c > @@ -255,7 +255,12 @@ try_again: > goto out; > } > > - if (perf_evlist__mmap(evlist, opts->mmap_pages, false) < 0) { > +try_again2: > + if (perf_evlist__mmap(evlist, opts->mmap_pages, opts->mmap_ro) < 0) { > + if (!opts->mmap_ro && errno == EACCES) { > + opts->mmap_ro = true; > + goto try_again2; > + } > if (errno == EPERM) { > pr_err("Permission error mapping pages.\n" > "Consider increasing " > diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c > index 67bdb9f..2a5757d 100644 > --- a/tools/perf/builtin-top.c > +++ b/tools/perf/builtin-top.c > @@ -899,8 +899,12 @@ try_again: > goto out_err; > } > } > - > - if (perf_evlist__mmap(evlist, opts->mmap_pages, false) < 0) { > +try_again2: > + if (perf_evlist__mmap(evlist, opts->mmap_pages, opts->mmap_ro) < 0) { > + if (!opts->mmap_ro && errno == EACCES) { > + opts->mmap_ro = true; > + goto try_again2; > + } > ui__error("Failed to mmap with %d (%s)\n", > errno, strerror(errno)); > goto out_err;
You will need this also:
@@ -161,7 +161,8 @@ static int perf_record__mmap_read(struct perf_record *rec, } md->prev = old; - perf_mmap__write_tail(md, old); + if (!rec->opts.mmap_ro) + perf_mmap__write_tail(md, old); out: return rc;
-- Thanks, Namhyung
| |