Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7143849a authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo
Browse files

perf evlist: Use atomic.h for the perf_mmap refcount

Now that we have atomic.h, we should convert all of the existing
refcounts to use it.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Don Zickus <dzickus@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-qhpv2etncj3hfofgj1aitkyv@git.kernel.org


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 59a51c1d
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -700,14 +700,14 @@ static bool perf_mmap__empty(struct perf_mmap *md)

static void perf_evlist__mmap_get(struct perf_evlist *evlist, int idx)
{
	++evlist->mmap[idx].refcnt;
	atomic_inc(&evlist->mmap[idx].refcnt);
}

static void perf_evlist__mmap_put(struct perf_evlist *evlist, int idx)
{
	BUG_ON(evlist->mmap[idx].refcnt == 0);
	BUG_ON(atomic_read(&evlist->mmap[idx].refcnt) == 0);

	if (--evlist->mmap[idx].refcnt == 0)
	if (atomic_dec_and_test(&evlist->mmap[idx].refcnt))
		__perf_evlist__munmap(evlist, idx);
}

@@ -721,7 +721,7 @@ void perf_evlist__mmap_consume(struct perf_evlist *evlist, int idx)
		perf_mmap__write_tail(md, old);
	}

	if (md->refcnt == 1 && perf_mmap__empty(md))
	if (atomic_read(&md->refcnt) == 1 && perf_mmap__empty(md))
		perf_evlist__mmap_put(evlist, idx);
}

@@ -758,7 +758,7 @@ static void __perf_evlist__munmap(struct perf_evlist *evlist, int idx)
	if (evlist->mmap[idx].base != NULL) {
		munmap(evlist->mmap[idx].base, evlist->mmap_len);
		evlist->mmap[idx].base = NULL;
		evlist->mmap[idx].refcnt = 0;
		atomic_set(&evlist->mmap[idx].refcnt, 0);
	}
	auxtrace_mmap__munmap(&evlist->mmap[idx].auxtrace_mmap);
}
@@ -807,7 +807,7 @@ static int __perf_evlist__mmap(struct perf_evlist *evlist, int idx,
	 * evlist layer can't just drop it when filtering events in
	 * perf_evlist__filter_pollfd().
	 */
	evlist->mmap[idx].refcnt = 2;
	atomic_set(&evlist->mmap[idx].refcnt, 2);
	evlist->mmap[idx].prev = 0;
	evlist->mmap[idx].mask = mp->mask;
	evlist->mmap[idx].base = mmap(NULL, evlist->mmap_len, mp->prot,
+2 −1
Original line number Diff line number Diff line
#ifndef __PERF_EVLIST_H
#define __PERF_EVLIST_H 1

#include <linux/atomic.h>
#include <linux/list.h>
#include <api/fd/array.h>
#include <stdio.h>
@@ -27,7 +28,7 @@ struct record_opts;
struct perf_mmap {
	void		 *base;
	int		 mask;
	int		 refcnt;
	atomic_t	 refcnt;
	u64		 prev;
	struct auxtrace_mmap auxtrace_mmap;
	char		 event_copy[PERF_SAMPLE_MAX_SIZE] __attribute__((aligned(8)));