perf evlist: Use atomic.h for the perf_mmap refcount
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: 7143849a5d6a5c623d81790d92f0033507c5b14f Gitweb: http://git.kernel.org/tip/7143849a5d6a5c623d81790d92f0033507c5b14f Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Fri, 15 May 2015 15:45:16 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Fri, 15 May 2015 15:45:16 -0300
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 <[email protected]>
Cc Borislav Petkov <[email protected]>
Cc David Ahern <[email protected]>
Cc Don Zickus <[email protected]>
Cc Frederic Weisbecker <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Stephane Eranian <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/util/evlist.c | 12 ++++++------ tools/perf/util/evlist.h | 3 ++- 2 files changed, 8 insertions(+), 7 deletions(-)
tools/perf/util/evlist.c +6 -6
@@ -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,
tools/perf/util/evlist.h +2 -1
@@ -1,6 +1,7 @@#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 )));