perf tools: Use atomic.h for the map_groups refcount
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: 848cbd2562bb85953884be72b3bdbee0b2f32474 Gitweb: http://git.kernel.org/tip/848cbd2562bb85953884be72b3bdbee0b2f32474 Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Fri, 15 May 2015 15:20:44 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Fri, 15 May 2015 15:20:44 -0300
perf tools: Use atomic.h for the map_groups refcount
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/tests/thread-mg-share.c | 12 ++++++------ tools/perf/util/map.c | 4 ++-- tools/perf/util/map.h | 6 ++++-- 3 files changed, 12 insertions(+), 10 deletions(-)
tools/perf/tests/thread-mg-share.c +6 -6
@@ -43,7 +43,7 @@ int test__thread_mg_share(void) leader && t1 && t2 && t3 && other); mg = leader->mg; -TEST_ASSERT_EQUAL ("wrong refcnt" , mg->refcnt,4 ); +TEST_ASSERT_EQUAL ("wrong refcnt" ,atomic_read (&mg->refcnt),4 );/* test the map groups pointer is shared */ TEST_ASSERT_VAL ("map groups don't match" , mg == t1->mg);
@@ -71,25 +71,25 @@ int test__thread_mg_share(void)machine__remove_thread (machine, other_leader); other_mg = other->mg; -TEST_ASSERT_EQUAL ("wrong refcnt" , other_mg->refcnt,2 ); +TEST_ASSERT_EQUAL ("wrong refcnt" ,atomic_read (&other_mg->refcnt),2 );TEST_ASSERT_VAL ("map groups don't match" , other_mg == other_leader->mg);/* release thread group */ thread__put (leader); -TEST_ASSERT_EQUAL ("wrong refcnt" , mg->refcnt,3 ); +TEST_ASSERT_EQUAL ("wrong refcnt" ,atomic_read (&mg->refcnt),3 );thread__put (t1); -TEST_ASSERT_EQUAL ("wrong refcnt" , mg->refcnt,2 ); +TEST_ASSERT_EQUAL ("wrong refcnt" ,atomic_read (&mg->refcnt),2 );thread__put (t2); -TEST_ASSERT_EQUAL ("wrong refcnt" , mg->refcnt,1 ); +TEST_ASSERT_EQUAL ("wrong refcnt" ,atomic_read (&mg->refcnt),1 );thread__put (t3);/* release other group */ thread__put (other_leader); -TEST_ASSERT_EQUAL ("wrong refcnt" , other_mg->refcnt,1 ); +TEST_ASSERT_EQUAL ("wrong refcnt" ,atomic_read (&other_mg->refcnt),1 );thread__put (other);
tools/perf/util/map.c +2 -2
@@ -426,7 +426,7 @@ void map_groups__init(struct map_groups *mg, struct machine *machine)INIT_LIST_HEAD (&mg->removed_maps[i]); } mg->machine = machine; - mg->refcnt =1 ; +atomic_set (&mg->refcnt,1 ); }static void maps__delete (struct rb_root *maps)
@@ -494,7 +494,7 @@ void map_groups__delete(struct map_groups *mg)void map_groups__put (struct map_groups *mg) { -if (--mg->refcnt ==0 ) +if (mg &&atomic_dec_and_test (&mg->refcnt))map_groups__delete (mg); }
tools/perf/util/map.h +4 -2
@@ -1,6 +1,7 @@#ifndef __PERF_MAP_H#define __PERF_MAP_H +#include <linux/atomic.h> #include <linux/compiler.h> #include <linux/list.h> #include <linux/rbtree.h>
@@ -61,7 +62,7 @@ struct map_groups {struct rb_root maps[MAP__NR_TYPES ];struct list_head removed_maps[MAP__NR_TYPES ];struct machine *machine; -int refcnt; +atomic_t refcnt; };struct map_groups *map_groups__new (struct machine *machine);
@@ -70,7 +71,8 @@ bool map_groups__empty(struct map_groups *mg);static inline struct map_groups *map_groups__get (struct map_groups *mg) { - ++mg->refcnt; +if (mg) +atomic_inc (&mg->refcnt);return mg; }