mirror of https://gitee.com/openkylin/linux.git
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:
parent
e7e0efcdb8
commit
86c19525b7
|
@ -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)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
atomic_set(&cs->refcnt, 0);
|
||||||
|
|
||||||
return cs;
|
return cs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue