perf comm: Use atomic.h for refcounting
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: 86c19525b7e953217e5ad2b5496029b1ac6fe26b Gitweb: http://git.kernel.org/tip/86c19525b7e953217e5ad2b5496029b1ac6fe26b Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Tue, 19 May 2015 19:07:42 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Wed, 27 May 2015 12:21:43 -0300
perf comm: Use atomic.h for refcounting
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/comm.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)
tools/perf/util/comm.c +9 -4
@@ -2,24 +2,27 @@#include "util.h" #include <stdlib.h> #include <stdio.h> +#include <linux/atomic.h> struct comm_str {char *str;struct rb_node rb_node; -int ref; +atomic_t refcnt; };/* Should perhaps be moved to struct machine */ static struct rb_root comm_str_root; -static void comm_str__get (struct comm_str *cs) +static struct comm_str *comm_str__get (struct comm_str *cs) { - cs->ref++; +if (cs) +atomic_inc (&cs->refcnt); +return cs; }static void comm_str__put (struct comm_str *cs) { -if (!--cs->ref) { +if (cs &&atomic_dec_and_test (&cs->refcnt)) {rb_erase (&cs->rb_node, &comm_str_root);zfree (&cs->str);free (cs);
@@ -40,6 +43,8 @@ static struct comm_str *comm_str__alloc(const char *str)return NULL ; } +atomic_set (&cs->refcnt,0 ); +return cs; }