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

Commit 86c19525 authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo
Browse files

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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent e7e0efcd
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -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;
}