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 <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-quzeuy3jwsyod6e06o39cl6y@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent e7e0efcd
...@@ -2,24 +2,27 @@ ...@@ -2,24 +2,27 @@
#include "util.h" #include "util.h"
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <linux/atomic.h>
struct comm_str { struct comm_str {
char *str; char *str;
struct rb_node rb_node; struct rb_node rb_node;
int ref; atomic_t refcnt;
}; };
/* Should perhaps be moved to struct machine */ /* Should perhaps be moved to struct machine */
static struct rb_root comm_str_root; 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) 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); rb_erase(&cs->rb_node, &comm_str_root);
zfree(&cs->str); zfree(&cs->str);
free(cs); free(cs);
...@@ -40,6 +43,8 @@ static struct comm_str *comm_str__alloc(const char *str) ...@@ -40,6 +43,8 @@ static struct comm_str *comm_str__alloc(const char *str)
return NULL; return NULL;
} }
atomic_set(&cs->refcnt, 0);
return cs; return cs;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment