[6/7] perf tools: Remove 'overwrite' concept from code level

Message ID 20171113013809.212417-7-wangnan0@huawei.com
State New
Headers show
Series
  • perf tools: Clarify overwrite and backward, bugfix
Related show

Commit Message

Wang Nan Nov. 13, 2017, 1:38 a.m.
Since all 'overwrite' usage are cleaned and no one really use a readonly main
ringbuffer, remove 'overwrite' from function arguments and evlist. The concept
of 'overwrite' and 'write_backward' are cleanner than before:

  1. In code level, there's no 'overwrite' concept. Each evlist has two
     ringbuffer groups. One is read-write/forward, another is readonly/backward.
     Don't support read-write/backward and readonly/forward.

  2. In user interface, we keep '--overwrite' and translate it into write_backward
     in each event.

Signed-off-by: Wang Nan <wangnan0@huawei.com>

---
 tools/perf/arch/x86/tests/perf-time-to-tsc.c |  2 +-
 tools/perf/builtin-kvm.c                     |  2 +-
 tools/perf/builtin-record.c                  |  4 ++--
 tools/perf/builtin-top.c                     |  2 +-
 tools/perf/builtin-trace.c                   |  2 +-
 tools/perf/tests/backward-ring-buffer.c      |  2 +-
 tools/perf/tests/bpf.c                       |  2 +-
 tools/perf/tests/code-reading.c              |  2 +-
 tools/perf/tests/keep-tracking.c             |  2 +-
 tools/perf/tests/mmap-basic.c                |  2 +-
 tools/perf/tests/openat-syscall-tp-fields.c  |  2 +-
 tools/perf/tests/perf-record.c               |  2 +-
 tools/perf/tests/sw-clock.c                  |  2 +-
 tools/perf/tests/switch-tracking.c           |  2 +-
 tools/perf/tests/task-exit.c                 |  2 +-
 tools/perf/util/evlist.c                     | 14 ++++++--------
 tools/perf/util/evlist.h                     |  6 ++----
 tools/perf/util/mmap.c                       |  6 +++---
 tools/perf/util/mmap.h                       |  2 +-
 tools/perf/util/python.c                     | 10 +++++-----
 20 files changed, 33 insertions(+), 37 deletions(-)

-- 
2.10.1

Comments

Jiri Olsa Nov. 13, 2017, 11:52 a.m. | #1
On Mon, Nov 13, 2017 at 01:38:08AM +0000, Wang Nan wrote:

SNIP

>  size_t perf_mmap__mmap_len(struct perf_mmap *map);

> diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c

> index c129e99..ece33b4 100644

> --- a/tools/perf/util/python.c

> +++ b/tools/perf/util/python.c

> @@ -856,14 +856,14 @@ static PyObject *pyrf_evlist__mmap(struct pyrf_evlist *pevlist,

>  				   PyObject *args, PyObject *kwargs)

>  {

>  	struct perf_evlist *evlist = &pevlist->evlist;

> -	static char *kwlist[] = { "pages", "overwrite", NULL };


unlikely, but there might be already some users of this..

I think the best would be to keep the "overwrite" here and
don't use it.. maybe warn or update docs, if there's any ;-)

jirka

> -	int pages = 128, overwrite = false;

> +	static char *kwlist[] = { "pages", NULL };

> +	int pages = 128;

>  

> -	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ii", kwlist,

> -					 &pages, &overwrite))

> +	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|i", kwlist,

> +					 &pages))

>  		return NULL;

>  

> -	if (perf_evlist__mmap(evlist, pages, overwrite) < 0) {

> +	if (perf_evlist__mmap(evlist, pages) < 0) {

>  		PyErr_SetFromErrno(PyExc_OSError);

>  		return NULL;

>  	}

> -- 

> 2.10.1

>
Liang, Kan Nov. 13, 2017, 3:07 p.m. | #2
> Since all 'overwrite' usage are cleaned and no one really use a readonly main

> ringbuffer, remove 'overwrite' from function arguments and evlist. The

> concept

> of 'overwrite' and 'write_backward' are cleanner than before:

> 

>   1. In code level, there's no 'overwrite' concept. Each evlist has two

>      ringbuffer groups. One is read-write/forward, another is

> readonly/backward.

>      Don't support read-write/backward and readonly/forward.

> 

>   2. In user interface, we keep '--overwrite' and translate it into

> write_backward

>      in each event.

> 

> Signed-off-by: Wang Nan <wangnan0@huawei.com>

> ---

>  tools/perf/arch/x86/tests/perf-time-to-tsc.c |  2 +-

>  tools/perf/builtin-kvm.c                     |  2 +-

>  tools/perf/builtin-record.c                  |  4 ++--

>  tools/perf/builtin-top.c                     |  2 +-

>  tools/perf/builtin-trace.c                   |  2 +-

>  tools/perf/tests/backward-ring-buffer.c      |  2 +-

>  tools/perf/tests/bpf.c                       |  2 +-

>  tools/perf/tests/code-reading.c              |  2 +-

>  tools/perf/tests/keep-tracking.c             |  2 +-

>  tools/perf/tests/mmap-basic.c                |  2 +-

>  tools/perf/tests/openat-syscall-tp-fields.c  |  2 +-

>  tools/perf/tests/perf-record.c               |  2 +-

>  tools/perf/tests/sw-clock.c                  |  2 +-

>  tools/perf/tests/switch-tracking.c           |  2 +-

>  tools/perf/tests/task-exit.c                 |  2 +-

>  tools/perf/util/evlist.c                     | 14 ++++++--------

>  tools/perf/util/evlist.h                     |  6 ++----

>  tools/perf/util/mmap.c                       |  6 +++---

>  tools/perf/util/mmap.h                       |  2 +-

>  tools/perf/util/python.c                     | 10 +++++-----

>  20 files changed, 33 insertions(+), 37 deletions(-)

> 

> diff --git a/tools/perf/arch/x86/tests/perf-time-to-tsc.c

> b/tools/perf/arch/x86/tests/perf-time-to-tsc.c

> index 5dd7efb..c7ea843 100644

> --- a/tools/perf/arch/x86/tests/perf-time-to-tsc.c

> +++ b/tools/perf/arch/x86/tests/perf-time-to-tsc.c

> @@ -83,7 +83,7 @@ int test__perf_time_to_tsc(struct test *test

> __maybe_unused, int subtest __maybe

> 

>  	CHECK__(perf_evlist__open(evlist));

> 

> -	CHECK__(perf_evlist__mmap(evlist, UINT_MAX, false));

> +	CHECK__(perf_evlist__mmap(evlist, UINT_MAX));

> 

>  	pc = evlist->mmap[0].base;

>  	ret = perf_read_tsc_conversion(pc, &tc);

> diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c

> index 0af4c09..e3e2a80 100644

> --- a/tools/perf/builtin-kvm.c

> +++ b/tools/perf/builtin-kvm.c

> @@ -1043,7 +1043,7 @@ static int kvm_live_open_events(struct

> perf_kvm_stat *kvm)

>  		goto out;

>  	}

> 

> -	if (perf_evlist__mmap(evlist, kvm->opts.mmap_pages, false) < 0) {

> +	if (perf_evlist__mmap(evlist, kvm->opts.mmap_pages) < 0) {

>  		ui__error("Failed to mmap the events: %s\n",

>  			  str_error_r(errno, sbuf, sizeof(sbuf)));

>  		perf_evlist__close(evlist);

> diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c

> index f4d9fc5..b3ef33f 100644

> --- a/tools/perf/builtin-record.c

> +++ b/tools/perf/builtin-record.c

> @@ -300,7 +300,7 @@ static int record__mmap_evlist(struct record *rec,

>  	struct record_opts *opts = &rec->opts;

>  	char msg[512];

> 

> -	if (perf_evlist__mmap_ex(evlist, opts->mmap_pages, false,

> +	if (perf_evlist__mmap_ex(evlist, opts->mmap_pages,

>  				 opts->auxtrace_mmap_pages,

>  				 opts->auxtrace_snapshot_mode) < 0) {

>  		if (errno == EPERM) {

> @@ -481,7 +481,7 @@ static int record__mmap_read_evlist(struct record

> *rec, struct perf_evlist *evli

>  		struct auxtrace_mmap *mm = &maps[i].auxtrace_mmap;

> 

>  		if (maps[i].base) {

> -			if (perf_mmap__push(&maps[i], evlist->overwrite,

> backward, rec, record__pushfn) != 0) {

> +			if (perf_mmap__push(&maps[i], backward, rec,

> record__pushfn) != 0) {

>  				rc = -1;

>  				goto out;

>  			}

> diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c

> index 477a869..83d2ae2 100644

> --- a/tools/perf/builtin-top.c

> +++ b/tools/perf/builtin-top.c

> @@ -902,7 +902,7 @@ static int perf_top__start_counters(struct perf_top

> *top)

>  		}

>  	}

> 

> -	if (perf_evlist__mmap(evlist, opts->mmap_pages, false) < 0) {

> +	if (perf_evlist__mmap(evlist, opts->mmap_pages) < 0) {

>  		ui__error("Failed to mmap with %d (%s)\n",

>  			    errno, str_error_r(errno, msg, sizeof(msg)));

>  		goto out_err;

> diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c

> index c373f9a..c3f2f98 100644

> --- a/tools/perf/builtin-trace.c

> +++ b/tools/perf/builtin-trace.c

> @@ -2404,7 +2404,7 @@ static int trace__run(struct trace *trace, int argc,

> const char **argv)

>  	if (err < 0)

>  		goto out_error_apply_filters;

> 

> -	err = perf_evlist__mmap(evlist, trace->opts.mmap_pages, false);

> +	err = perf_evlist__mmap(evlist, trace->opts.mmap_pages);

>  	if (err < 0)

>  		goto out_error_mmap;

> 

> diff --git a/tools/perf/tests/backward-ring-buffer.c

> b/tools/perf/tests/backward-ring-buffer.c

> index 992c917..bdebcf9 100644

> --- a/tools/perf/tests/backward-ring-buffer.c

> +++ b/tools/perf/tests/backward-ring-buffer.c

> @@ -58,7 +58,7 @@ static int do_test(struct perf_evlist *evlist, int

> mmap_pages,

>  	int err;

>  	char sbuf[STRERR_BUFSIZE];

> 

> -	err = perf_evlist__mmap(evlist, mmap_pages, false);

> +	err = perf_evlist__mmap(evlist, mmap_pages);

>  	if (err < 0) {

>  		pr_debug("perf_evlist__mmap: %s\n",

>  			 str_error_r(errno, sbuf, sizeof(sbuf)));

> diff --git a/tools/perf/tests/bpf.c b/tools/perf/tests/bpf.c

> index 34c22cd..c433dd3 100644

> --- a/tools/perf/tests/bpf.c

> +++ b/tools/perf/tests/bpf.c

> @@ -167,7 +167,7 @@ static int do_test(struct bpf_object *obj, int

> (*func)(void),

>  		goto out_delete_evlist;

>  	}

> 

> -	err = perf_evlist__mmap(evlist, opts.mmap_pages, false);

> +	err = perf_evlist__mmap(evlist, opts.mmap_pages);

>  	if (err < 0) {

>  		pr_debug("perf_evlist__mmap: %s\n",

>  			 str_error_r(errno, sbuf, sizeof(sbuf)));

> diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-reading.c

> index 466a462..b6c813e 100644

> --- a/tools/perf/tests/code-reading.c

> +++ b/tools/perf/tests/code-reading.c

> @@ -638,7 +638,7 @@ static int do_test_code_reading(bool try_kcore)

>  		break;

>  	}

> 

> -	ret = perf_evlist__mmap(evlist, UINT_MAX, false);

> +	ret = perf_evlist__mmap(evlist, UINT_MAX);

>  	if (ret < 0) {

>  		pr_debug("perf_evlist__mmap failed\n");

>  		goto out_put;

> diff --git a/tools/perf/tests/keep-tracking.c b/tools/perf/tests/keep-tracking.c

> index 7394286..b282916 100644

> --- a/tools/perf/tests/keep-tracking.c

> +++ b/tools/perf/tests/keep-tracking.c

> @@ -94,7 +94,7 @@ int test__keep_tracking(struct test *test

> __maybe_unused, int subtest __maybe_un

>  		goto out_err;

>  	}

> 

> -	CHECK__(perf_evlist__mmap(evlist, UINT_MAX, false));

> +	CHECK__(perf_evlist__mmap(evlist, UINT_MAX));

> 

>  	/*

>  	 * First, test that a 'comm' event can be found when the event is

> diff --git a/tools/perf/tests/mmap-basic.c b/tools/perf/tests/mmap-basic.c

> index 667d696..f43d862 100644

> --- a/tools/perf/tests/mmap-basic.c

> +++ b/tools/perf/tests/mmap-basic.c

> @@ -93,7 +93,7 @@ int test__basic_mmap(struct test *test

> __maybe_unused, int subtest __maybe_unuse

>  		expected_nr_events[i] = 1 + rand() % 127;

>  	}

> 

> -	if (perf_evlist__mmap(evlist, 128, false) < 0) {

> +	if (perf_evlist__mmap(evlist, 128) < 0) {

>  		pr_debug("failed to mmap events: %d (%s)\n", errno,

>  			 str_error_r(errno, sbuf, sizeof(sbuf)));

>  		goto out_delete_evlist;

> diff --git a/tools/perf/tests/openat-syscall-tp-fields.c

> b/tools/perf/tests/openat-syscall-tp-fields.c

> index b6ee1c4..f68d818 100644

> --- a/tools/perf/tests/openat-syscall-tp-fields.c

> +++ b/tools/perf/tests/openat-syscall-tp-fields.c

> @@ -63,7 +63,7 @@ int test__syscall_openat_tp_fields(struct test *test

> __maybe_unused, int subtest

>  		goto out_delete_evlist;

>  	}

> 

> -	err = perf_evlist__mmap(evlist, UINT_MAX, false);

> +	err = perf_evlist__mmap(evlist, UINT_MAX);

>  	if (err < 0) {

>  		pr_debug("perf_evlist__mmap: %s\n",

>  			 str_error_r(errno, sbuf, sizeof(sbuf)));

> diff --git a/tools/perf/tests/perf-record.c b/tools/perf/tests/perf-record.c

> index 19b6500..f9fbd8b 100644

> --- a/tools/perf/tests/perf-record.c

> +++ b/tools/perf/tests/perf-record.c

> @@ -140,7 +140,7 @@ int test__PERF_RECORD(struct test *test

> __maybe_unused, int subtest __maybe_unus

>  	 * fds in the same CPU to be injected in the same mmap ring buffer

>  	 * (using ioctl(PERF_EVENT_IOC_SET_OUTPUT)).

>  	 */

> -	err = perf_evlist__mmap(evlist, opts.mmap_pages, false);

> +	err = perf_evlist__mmap(evlist, opts.mmap_pages);

>  	if (err < 0) {

>  		pr_debug("perf_evlist__mmap: %s\n",

>  			 str_error_r(errno, sbuf, sizeof(sbuf)));

> diff --git a/tools/perf/tests/sw-clock.c b/tools/perf/tests/sw-clock.c

> index c468e6c..fd01b24 100644

> --- a/tools/perf/tests/sw-clock.c

> +++ b/tools/perf/tests/sw-clock.c

> @@ -77,7 +77,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids

> clock_id)

>  		goto out_delete_evlist;

>  	}

> 

> -	err = perf_evlist__mmap(evlist, 128, false);

> +	err = perf_evlist__mmap(evlist, 128);

>  	if (err < 0) {

>  		pr_debug("failed to mmap event: %d (%s)\n", errno,

>  			 str_error_r(errno, sbuf, sizeof(sbuf)));

> diff --git a/tools/perf/tests/switch-tracking.c b/tools/perf/tests/switch-

> tracking.c

> index 2acd785..9fee2a0 100644

> --- a/tools/perf/tests/switch-tracking.c

> +++ b/tools/perf/tests/switch-tracking.c

> @@ -448,7 +448,7 @@ int test__switch_tracking(struct test *test

> __maybe_unused, int subtest __maybe_

>  		goto out;

>  	}

> 

> -	err = perf_evlist__mmap(evlist, UINT_MAX, false);

> +	err = perf_evlist__mmap(evlist, UINT_MAX);

>  	if (err) {

>  		pr_debug("perf_evlist__mmap failed!\n");

>  		goto out_err;

> diff --git a/tools/perf/tests/task-exit.c b/tools/perf/tests/task-exit.c

> index 4fb6609..4ba5a27 100644

> --- a/tools/perf/tests/task-exit.c

> +++ b/tools/perf/tests/task-exit.c

> @@ -96,7 +96,7 @@ int test__task_exit(struct test *test __maybe_unused,

> int subtest __maybe_unused

>  		goto out_delete_evlist;

>  	}

> 

> -	if (perf_evlist__mmap(evlist, 128, false) < 0) {

> +	if (perf_evlist__mmap(evlist, 128) < 0) {

>  		pr_debug("failed to mmap events: %d (%s)\n", errno,

>  			 str_error_r(errno, sbuf, sizeof(sbuf)));

>  		goto out_delete_evlist;

> diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c

> index 4c5daba..4948d3d 100644

> --- a/tools/perf/util/evlist.c

> +++ b/tools/perf/util/evlist.c

> @@ -711,7 +711,7 @@ union perf_event

> *perf_evlist__mmap_read_forward(struct perf_evlist *evlist, int

>  	 * No need for read-write ring buffer: kernel stop outputting when

>  	 * it hit md->prev (perf_mmap__consume()).

>  	 */

> -	return perf_mmap__read_forward(md, evlist->overwrite);

> +	return perf_mmap__read_forward(md, false);


If we remove the 'overwrite' in forward, I think 'check_messup' is useless. 
It's better to remove it as well.

>  }

> 

>  union perf_event *perf_evlist__mmap_read_backward(struct perf_evlist

> *evlist, int idx)

> @@ -738,7 +738,7 @@ void perf_evlist__mmap_read_catchup(struct

> perf_evlist *evlist, int idx)

> 

>  void perf_evlist__mmap_consume(struct perf_evlist *evlist, int idx)

>  {

> -	perf_mmap__consume(&evlist->mmap[idx], evlist->overwrite);

> +	perf_mmap__consume(&evlist->mmap[idx], false);


I think we still need to remove 'overwrite' in the implementation of
perf_mmap__consume.


There are too many generic functions are changed in this patch.
I think it's better to split into several patches.
It's better to have one generic function changed in one patch.

Thanks,
Kan

>  }

> 

>  static void perf_evlist__munmap_nofree(struct perf_evlist *evlist)

> @@ -1058,14 +1058,14 @@ int perf_evlist__parse_mmap_pages(const

> struct option *opt, const char *str,

>   * Return: %0 on success, negative error code otherwise.

>   */

>  int perf_evlist__mmap_ex(struct perf_evlist *evlist, unsigned int pages,

> -			 bool overwrite, unsigned int auxtrace_pages,

> +			 unsigned int auxtrace_pages,

>  			 bool auxtrace_overwrite)

>  {

>  	struct perf_evsel *evsel;

>  	const struct cpu_map *cpus = evlist->cpus;

>  	const struct thread_map *threads = evlist->threads;

>  	struct mmap_params mp = {

> -		.prot = PROT_READ | (overwrite ? 0 : PROT_WRITE),

> +		.prot = PROT_READ | PROT_WRITE,

>  	};

> 

>  	if (!evlist->mmap)

> @@ -1076,7 +1076,6 @@ int perf_evlist__mmap_ex(struct perf_evlist *evlist,

> unsigned int pages,

>  	if (evlist->pollfd.entries == NULL && perf_evlist__alloc_pollfd(evlist) <

> 0)

>  		return -ENOMEM;

> 

> -	evlist->overwrite = overwrite;

>  	evlist->mmap_len = perf_evlist__mmap_size(pages);

>  	pr_debug("mmap size %zuB\n", evlist->mmap_len);

>  	mp.mask = evlist->mmap_len - page_size - 1;

> @@ -1097,10 +1096,9 @@ int perf_evlist__mmap_ex(struct perf_evlist

> *evlist, unsigned int pages,

>  	return perf_evlist__mmap_per_cpu(evlist, &mp);

>  }

> 

> -int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages,

> -		      bool overwrite)

> +int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages)

>  {

> -	return perf_evlist__mmap_ex(evlist, pages, overwrite, 0, false);

> +	return perf_evlist__mmap_ex(evlist, pages, 0, false);

>  }

> 

>  int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target)

> diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h

> index 8c433e9..1dd3291 100644

> --- a/tools/perf/util/evlist.h

> +++ b/tools/perf/util/evlist.h

> @@ -30,7 +30,6 @@ struct perf_evlist {

>  	int		 nr_entries;

>  	int		 nr_groups;

>  	int		 nr_mmaps;

> -	bool		 overwrite;

>  	bool		 enabled;

>  	bool		 has_user_cpus;

>  	size_t		 mmap_len;

> @@ -168,10 +167,9 @@ int perf_evlist__parse_mmap_pages(const struct

> option *opt,

>  unsigned long perf_event_mlock_kb_in_pages(void);

> 

>  int perf_evlist__mmap_ex(struct perf_evlist *evlist, unsigned int pages,

> -			 bool overwrite, unsigned int auxtrace_pages,

> +			 unsigned int auxtrace_pages,

>  			 bool auxtrace_overwrite);

> -int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages,

> -		      bool overwrite);

> +int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages);

>  void perf_evlist__munmap(struct perf_evlist *evlist);

> 

>  size_t perf_evlist__mmap_size(unsigned long pages);

> diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c

> index 9fe5f9c..703ed41 100644

> --- a/tools/perf/util/mmap.c

> +++ b/tools/perf/util/mmap.c

> @@ -299,7 +299,7 @@ static int rb_find_range(void *data, int mask, u64

> head, u64 old,

>  	return backward_rb_find_range(data, mask, head, start, end);

>  }

> 

> -int perf_mmap__push(struct perf_mmap *md, bool overwrite, bool

> backward,

> +int perf_mmap__push(struct perf_mmap *md, bool backward,

>  		    void *to, int push(void *to, void *buf, size_t size))

>  {

>  	u64 head = perf_mmap__read_head(md);

> @@ -321,7 +321,7 @@ int perf_mmap__push(struct perf_mmap *md, bool

> overwrite, bool backward,

>  		WARN_ONCE(1, "failed to keep up with mmap data. (warn

> only once)\n");

> 

>  		md->prev = head;

> -		perf_mmap__consume(md, overwrite || backward);

> +		perf_mmap__consume(md, backward);

>  		return 0;

>  	}

> 

> @@ -346,7 +346,7 @@ int perf_mmap__push(struct perf_mmap *md, bool

> overwrite, bool backward,

>  	}

> 

>  	md->prev = head;

> -	perf_mmap__consume(md, overwrite || backward);

> +	perf_mmap__consume(md, backward);

>  out:

>  	return rc;

>  }

> diff --git a/tools/perf/util/mmap.h b/tools/perf/util/mmap.h

> index efd78b8..2c3d291 100644

> --- a/tools/perf/util/mmap.h

> +++ b/tools/perf/util/mmap.h

> @@ -89,7 +89,7 @@ static inline void perf_mmap__write_tail(struct

> perf_mmap *md, u64 tail)

>  union perf_event *perf_mmap__read_forward(struct perf_mmap *map,

> bool check_messup);

>  union perf_event *perf_mmap__read_backward(struct perf_mmap *map);

> 

> -int perf_mmap__push(struct perf_mmap *md, bool overwrite, bool

> backward,

> +int perf_mmap__push(struct perf_mmap *md, bool backward,

>  		    void *to, int push(void *to, void *buf, size_t size));

> 

>  size_t perf_mmap__mmap_len(struct perf_mmap *map);

> diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c

> index c129e99..ece33b4 100644

> --- a/tools/perf/util/python.c

> +++ b/tools/perf/util/python.c

> @@ -856,14 +856,14 @@ static PyObject *pyrf_evlist__mmap(struct

> pyrf_evlist *pevlist,

>  				   PyObject *args, PyObject *kwargs)

>  {

>  	struct perf_evlist *evlist = &pevlist->evlist;

> -	static char *kwlist[] = { "pages", "overwrite", NULL };

> -	int pages = 128, overwrite = false;

> +	static char *kwlist[] = { "pages", NULL };

> +	int pages = 128;

> 

> -	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ii", kwlist,

> -					 &pages, &overwrite))

> +	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|i", kwlist,

> +					 &pages))

>  		return NULL;

> 

> -	if (perf_evlist__mmap(evlist, pages, overwrite) < 0) {

> +	if (perf_evlist__mmap(evlist, pages) < 0) {

>  		PyErr_SetFromErrno(PyExc_OSError);

>  		return NULL;

>  	}

> --

> 2.10.1

Patch

diff --git a/tools/perf/arch/x86/tests/perf-time-to-tsc.c b/tools/perf/arch/x86/tests/perf-time-to-tsc.c
index 5dd7efb..c7ea843 100644
--- a/tools/perf/arch/x86/tests/perf-time-to-tsc.c
+++ b/tools/perf/arch/x86/tests/perf-time-to-tsc.c
@@ -83,7 +83,7 @@  int test__perf_time_to_tsc(struct test *test __maybe_unused, int subtest __maybe
 
 	CHECK__(perf_evlist__open(evlist));
 
-	CHECK__(perf_evlist__mmap(evlist, UINT_MAX, false));
+	CHECK__(perf_evlist__mmap(evlist, UINT_MAX));
 
 	pc = evlist->mmap[0].base;
 	ret = perf_read_tsc_conversion(pc, &tc);
diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c
index 0af4c09..e3e2a80 100644
--- a/tools/perf/builtin-kvm.c
+++ b/tools/perf/builtin-kvm.c
@@ -1043,7 +1043,7 @@  static int kvm_live_open_events(struct perf_kvm_stat *kvm)
 		goto out;
 	}
 
-	if (perf_evlist__mmap(evlist, kvm->opts.mmap_pages, false) < 0) {
+	if (perf_evlist__mmap(evlist, kvm->opts.mmap_pages) < 0) {
 		ui__error("Failed to mmap the events: %s\n",
 			  str_error_r(errno, sbuf, sizeof(sbuf)));
 		perf_evlist__close(evlist);
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index f4d9fc5..b3ef33f 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -300,7 +300,7 @@  static int record__mmap_evlist(struct record *rec,
 	struct record_opts *opts = &rec->opts;
 	char msg[512];
 
-	if (perf_evlist__mmap_ex(evlist, opts->mmap_pages, false,
+	if (perf_evlist__mmap_ex(evlist, opts->mmap_pages,
 				 opts->auxtrace_mmap_pages,
 				 opts->auxtrace_snapshot_mode) < 0) {
 		if (errno == EPERM) {
@@ -481,7 +481,7 @@  static int record__mmap_read_evlist(struct record *rec, struct perf_evlist *evli
 		struct auxtrace_mmap *mm = &maps[i].auxtrace_mmap;
 
 		if (maps[i].base) {
-			if (perf_mmap__push(&maps[i], evlist->overwrite, backward, rec, record__pushfn) != 0) {
+			if (perf_mmap__push(&maps[i], backward, rec, record__pushfn) != 0) {
 				rc = -1;
 				goto out;
 			}
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
index 477a869..83d2ae2 100644
--- a/tools/perf/builtin-top.c
+++ b/tools/perf/builtin-top.c
@@ -902,7 +902,7 @@  static int perf_top__start_counters(struct perf_top *top)
 		}
 	}
 
-	if (perf_evlist__mmap(evlist, opts->mmap_pages, false) < 0) {
+	if (perf_evlist__mmap(evlist, opts->mmap_pages) < 0) {
 		ui__error("Failed to mmap with %d (%s)\n",
 			    errno, str_error_r(errno, msg, sizeof(msg)));
 		goto out_err;
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index c373f9a..c3f2f98 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -2404,7 +2404,7 @@  static int trace__run(struct trace *trace, int argc, const char **argv)
 	if (err < 0)
 		goto out_error_apply_filters;
 
-	err = perf_evlist__mmap(evlist, trace->opts.mmap_pages, false);
+	err = perf_evlist__mmap(evlist, trace->opts.mmap_pages);
 	if (err < 0)
 		goto out_error_mmap;
 
diff --git a/tools/perf/tests/backward-ring-buffer.c b/tools/perf/tests/backward-ring-buffer.c
index 992c917..bdebcf9 100644
--- a/tools/perf/tests/backward-ring-buffer.c
+++ b/tools/perf/tests/backward-ring-buffer.c
@@ -58,7 +58,7 @@  static int do_test(struct perf_evlist *evlist, int mmap_pages,
 	int err;
 	char sbuf[STRERR_BUFSIZE];
 
-	err = perf_evlist__mmap(evlist, mmap_pages, false);
+	err = perf_evlist__mmap(evlist, mmap_pages);
 	if (err < 0) {
 		pr_debug("perf_evlist__mmap: %s\n",
 			 str_error_r(errno, sbuf, sizeof(sbuf)));
diff --git a/tools/perf/tests/bpf.c b/tools/perf/tests/bpf.c
index 34c22cd..c433dd3 100644
--- a/tools/perf/tests/bpf.c
+++ b/tools/perf/tests/bpf.c
@@ -167,7 +167,7 @@  static int do_test(struct bpf_object *obj, int (*func)(void),
 		goto out_delete_evlist;
 	}
 
-	err = perf_evlist__mmap(evlist, opts.mmap_pages, false);
+	err = perf_evlist__mmap(evlist, opts.mmap_pages);
 	if (err < 0) {
 		pr_debug("perf_evlist__mmap: %s\n",
 			 str_error_r(errno, sbuf, sizeof(sbuf)));
diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-reading.c
index 466a462..b6c813e 100644
--- a/tools/perf/tests/code-reading.c
+++ b/tools/perf/tests/code-reading.c
@@ -638,7 +638,7 @@  static int do_test_code_reading(bool try_kcore)
 		break;
 	}
 
-	ret = perf_evlist__mmap(evlist, UINT_MAX, false);
+	ret = perf_evlist__mmap(evlist, UINT_MAX);
 	if (ret < 0) {
 		pr_debug("perf_evlist__mmap failed\n");
 		goto out_put;
diff --git a/tools/perf/tests/keep-tracking.c b/tools/perf/tests/keep-tracking.c
index 7394286..b282916 100644
--- a/tools/perf/tests/keep-tracking.c
+++ b/tools/perf/tests/keep-tracking.c
@@ -94,7 +94,7 @@  int test__keep_tracking(struct test *test __maybe_unused, int subtest __maybe_un
 		goto out_err;
 	}
 
-	CHECK__(perf_evlist__mmap(evlist, UINT_MAX, false));
+	CHECK__(perf_evlist__mmap(evlist, UINT_MAX));
 
 	/*
 	 * First, test that a 'comm' event can be found when the event is
diff --git a/tools/perf/tests/mmap-basic.c b/tools/perf/tests/mmap-basic.c
index 667d696..f43d862 100644
--- a/tools/perf/tests/mmap-basic.c
+++ b/tools/perf/tests/mmap-basic.c
@@ -93,7 +93,7 @@  int test__basic_mmap(struct test *test __maybe_unused, int subtest __maybe_unuse
 		expected_nr_events[i] = 1 + rand() % 127;
 	}
 
-	if (perf_evlist__mmap(evlist, 128, false) < 0) {
+	if (perf_evlist__mmap(evlist, 128) < 0) {
 		pr_debug("failed to mmap events: %d (%s)\n", errno,
 			 str_error_r(errno, sbuf, sizeof(sbuf)));
 		goto out_delete_evlist;
diff --git a/tools/perf/tests/openat-syscall-tp-fields.c b/tools/perf/tests/openat-syscall-tp-fields.c
index b6ee1c4..f68d818 100644
--- a/tools/perf/tests/openat-syscall-tp-fields.c
+++ b/tools/perf/tests/openat-syscall-tp-fields.c
@@ -63,7 +63,7 @@  int test__syscall_openat_tp_fields(struct test *test __maybe_unused, int subtest
 		goto out_delete_evlist;
 	}
 
-	err = perf_evlist__mmap(evlist, UINT_MAX, false);
+	err = perf_evlist__mmap(evlist, UINT_MAX);
 	if (err < 0) {
 		pr_debug("perf_evlist__mmap: %s\n",
 			 str_error_r(errno, sbuf, sizeof(sbuf)));
diff --git a/tools/perf/tests/perf-record.c b/tools/perf/tests/perf-record.c
index 19b6500..f9fbd8b 100644
--- a/tools/perf/tests/perf-record.c
+++ b/tools/perf/tests/perf-record.c
@@ -140,7 +140,7 @@  int test__PERF_RECORD(struct test *test __maybe_unused, int subtest __maybe_unus
 	 * fds in the same CPU to be injected in the same mmap ring buffer
 	 * (using ioctl(PERF_EVENT_IOC_SET_OUTPUT)).
 	 */
-	err = perf_evlist__mmap(evlist, opts.mmap_pages, false);
+	err = perf_evlist__mmap(evlist, opts.mmap_pages);
 	if (err < 0) {
 		pr_debug("perf_evlist__mmap: %s\n",
 			 str_error_r(errno, sbuf, sizeof(sbuf)));
diff --git a/tools/perf/tests/sw-clock.c b/tools/perf/tests/sw-clock.c
index c468e6c..fd01b24 100644
--- a/tools/perf/tests/sw-clock.c
+++ b/tools/perf/tests/sw-clock.c
@@ -77,7 +77,7 @@  static int __test__sw_clock_freq(enum perf_sw_ids clock_id)
 		goto out_delete_evlist;
 	}
 
-	err = perf_evlist__mmap(evlist, 128, false);
+	err = perf_evlist__mmap(evlist, 128);
 	if (err < 0) {
 		pr_debug("failed to mmap event: %d (%s)\n", errno,
 			 str_error_r(errno, sbuf, sizeof(sbuf)));
diff --git a/tools/perf/tests/switch-tracking.c b/tools/perf/tests/switch-tracking.c
index 2acd785..9fee2a0 100644
--- a/tools/perf/tests/switch-tracking.c
+++ b/tools/perf/tests/switch-tracking.c
@@ -448,7 +448,7 @@  int test__switch_tracking(struct test *test __maybe_unused, int subtest __maybe_
 		goto out;
 	}
 
-	err = perf_evlist__mmap(evlist, UINT_MAX, false);
+	err = perf_evlist__mmap(evlist, UINT_MAX);
 	if (err) {
 		pr_debug("perf_evlist__mmap failed!\n");
 		goto out_err;
diff --git a/tools/perf/tests/task-exit.c b/tools/perf/tests/task-exit.c
index 4fb6609..4ba5a27 100644
--- a/tools/perf/tests/task-exit.c
+++ b/tools/perf/tests/task-exit.c
@@ -96,7 +96,7 @@  int test__task_exit(struct test *test __maybe_unused, int subtest __maybe_unused
 		goto out_delete_evlist;
 	}
 
-	if (perf_evlist__mmap(evlist, 128, false) < 0) {
+	if (perf_evlist__mmap(evlist, 128) < 0) {
 		pr_debug("failed to mmap events: %d (%s)\n", errno,
 			 str_error_r(errno, sbuf, sizeof(sbuf)));
 		goto out_delete_evlist;
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 4c5daba..4948d3d 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -711,7 +711,7 @@  union perf_event *perf_evlist__mmap_read_forward(struct perf_evlist *evlist, int
 	 * No need for read-write ring buffer: kernel stop outputting when
 	 * it hit md->prev (perf_mmap__consume()).
 	 */
-	return perf_mmap__read_forward(md, evlist->overwrite);
+	return perf_mmap__read_forward(md, false);
 }
 
 union perf_event *perf_evlist__mmap_read_backward(struct perf_evlist *evlist, int idx)
@@ -738,7 +738,7 @@  void perf_evlist__mmap_read_catchup(struct perf_evlist *evlist, int idx)
 
 void perf_evlist__mmap_consume(struct perf_evlist *evlist, int idx)
 {
-	perf_mmap__consume(&evlist->mmap[idx], evlist->overwrite);
+	perf_mmap__consume(&evlist->mmap[idx], false);
 }
 
 static void perf_evlist__munmap_nofree(struct perf_evlist *evlist)
@@ -1058,14 +1058,14 @@  int perf_evlist__parse_mmap_pages(const struct option *opt, const char *str,
  * Return: %0 on success, negative error code otherwise.
  */
 int perf_evlist__mmap_ex(struct perf_evlist *evlist, unsigned int pages,
-			 bool overwrite, unsigned int auxtrace_pages,
+			 unsigned int auxtrace_pages,
 			 bool auxtrace_overwrite)
 {
 	struct perf_evsel *evsel;
 	const struct cpu_map *cpus = evlist->cpus;
 	const struct thread_map *threads = evlist->threads;
 	struct mmap_params mp = {
-		.prot = PROT_READ | (overwrite ? 0 : PROT_WRITE),
+		.prot = PROT_READ | PROT_WRITE,
 	};
 
 	if (!evlist->mmap)
@@ -1076,7 +1076,6 @@  int perf_evlist__mmap_ex(struct perf_evlist *evlist, unsigned int pages,
 	if (evlist->pollfd.entries == NULL && perf_evlist__alloc_pollfd(evlist) < 0)
 		return -ENOMEM;
 
-	evlist->overwrite = overwrite;
 	evlist->mmap_len = perf_evlist__mmap_size(pages);
 	pr_debug("mmap size %zuB\n", evlist->mmap_len);
 	mp.mask = evlist->mmap_len - page_size - 1;
@@ -1097,10 +1096,9 @@  int perf_evlist__mmap_ex(struct perf_evlist *evlist, unsigned int pages,
 	return perf_evlist__mmap_per_cpu(evlist, &mp);
 }
 
-int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages,
-		      bool overwrite)
+int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages)
 {
-	return perf_evlist__mmap_ex(evlist, pages, overwrite, 0, false);
+	return perf_evlist__mmap_ex(evlist, pages, 0, false);
 }
 
 int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target)
diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
index 8c433e9..1dd3291 100644
--- a/tools/perf/util/evlist.h
+++ b/tools/perf/util/evlist.h
@@ -30,7 +30,6 @@  struct perf_evlist {
 	int		 nr_entries;
 	int		 nr_groups;
 	int		 nr_mmaps;
-	bool		 overwrite;
 	bool		 enabled;
 	bool		 has_user_cpus;
 	size_t		 mmap_len;
@@ -168,10 +167,9 @@  int perf_evlist__parse_mmap_pages(const struct option *opt,
 unsigned long perf_event_mlock_kb_in_pages(void);
 
 int perf_evlist__mmap_ex(struct perf_evlist *evlist, unsigned int pages,
-			 bool overwrite, unsigned int auxtrace_pages,
+			 unsigned int auxtrace_pages,
 			 bool auxtrace_overwrite);
-int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages,
-		      bool overwrite);
+int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages);
 void perf_evlist__munmap(struct perf_evlist *evlist);
 
 size_t perf_evlist__mmap_size(unsigned long pages);
diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c
index 9fe5f9c..703ed41 100644
--- a/tools/perf/util/mmap.c
+++ b/tools/perf/util/mmap.c
@@ -299,7 +299,7 @@  static int rb_find_range(void *data, int mask, u64 head, u64 old,
 	return backward_rb_find_range(data, mask, head, start, end);
 }
 
-int perf_mmap__push(struct perf_mmap *md, bool overwrite, bool backward,
+int perf_mmap__push(struct perf_mmap *md, bool backward,
 		    void *to, int push(void *to, void *buf, size_t size))
 {
 	u64 head = perf_mmap__read_head(md);
@@ -321,7 +321,7 @@  int perf_mmap__push(struct perf_mmap *md, bool overwrite, bool backward,
 		WARN_ONCE(1, "failed to keep up with mmap data. (warn only once)\n");
 
 		md->prev = head;
-		perf_mmap__consume(md, overwrite || backward);
+		perf_mmap__consume(md, backward);
 		return 0;
 	}
 
@@ -346,7 +346,7 @@  int perf_mmap__push(struct perf_mmap *md, bool overwrite, bool backward,
 	}
 
 	md->prev = head;
-	perf_mmap__consume(md, overwrite || backward);
+	perf_mmap__consume(md, backward);
 out:
 	return rc;
 }
diff --git a/tools/perf/util/mmap.h b/tools/perf/util/mmap.h
index efd78b8..2c3d291 100644
--- a/tools/perf/util/mmap.h
+++ b/tools/perf/util/mmap.h
@@ -89,7 +89,7 @@  static inline void perf_mmap__write_tail(struct perf_mmap *md, u64 tail)
 union perf_event *perf_mmap__read_forward(struct perf_mmap *map, bool check_messup);
 union perf_event *perf_mmap__read_backward(struct perf_mmap *map);
 
-int perf_mmap__push(struct perf_mmap *md, bool overwrite, bool backward,
+int perf_mmap__push(struct perf_mmap *md, bool backward,
 		    void *to, int push(void *to, void *buf, size_t size));
 
 size_t perf_mmap__mmap_len(struct perf_mmap *map);
diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c
index c129e99..ece33b4 100644
--- a/tools/perf/util/python.c
+++ b/tools/perf/util/python.c
@@ -856,14 +856,14 @@  static PyObject *pyrf_evlist__mmap(struct pyrf_evlist *pevlist,
 				   PyObject *args, PyObject *kwargs)
 {
 	struct perf_evlist *evlist = &pevlist->evlist;
-	static char *kwlist[] = { "pages", "overwrite", NULL };
-	int pages = 128, overwrite = false;
+	static char *kwlist[] = { "pages", NULL };
+	int pages = 128;
 
-	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ii", kwlist,
-					 &pages, &overwrite))
+	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|i", kwlist,
+					 &pages))
 		return NULL;
 
-	if (perf_evlist__mmap(evlist, pages, overwrite) < 0) {
+	if (perf_evlist__mmap(evlist, pages) < 0) {
 		PyErr_SetFromErrno(PyExc_OSError);
 		return NULL;
 	}