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.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Arnaldo Carvalho de Melo 2015-05-19 19:07:42 -03:00
Родитель e7e0efcdb8
Коммит 86c19525b7
1 изменённых файлов: 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;
}