perf tests: Fix map_groups refcount test
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: 8b00f46951bed1edd9c5cb9d9adb62d28bbe7623 Gitweb: http://git.kernel.org/tip/8b00f46951bed1edd9c5cb9d9adb62d28bbe7623 Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Mon, 11 May 2015 18:13:14 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Tue, 12 May 2015 09:59:52 -0300
perf tests: Fix map_groups refcount test
When introducing reference counting for struct thread instances I forgot to remove the synthetic threads from the machine's rbtree so that it then the threads would have just one reference and thus the thread__put() replacing the thread__delete() really turns into a thread__delete() (thread->refcnt == 1 at thread__put() time) and thus drop the thread->mg refcount, as expected by the this test.
Fix it by calling machine__remove_thread() (the counterpart of machine__findnew_thread()) on all the synthetic threads after the checks that involves the rbtree were done.
Before:
# perf test -v mg 30: Test thread mg sharing : --- start --- test child forked, pid 26995 FAILED tests/thread-mg-share.c:68 wrong refcnt (4 != 3) test child finished with -1 ---- end ---- Test thread mg sharing: FAILED! #
After:
# perf test mg 30: Test thread mg sharing: Ok #
Fixes b91fc39f4ad7 ("perf machine: Protect the machine->threads with a rwlock")
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 | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-)
tools/perf/tests/thread-mg-share.c +12 -5
@@ -58,6 +58,18 @@ int test__thread_mg_share(void) other_leader =machine__find_thread (machine,4 ,4 );TEST_ASSERT_VAL ("failed to find other leader" , other_leader); +/* +* Ok, now that all the rbtree related operations were done, +* lets remove all of them from there so that we can do the +* refcounting tests. +*/ +machine__remove_thread (machine, leader); +machine__remove_thread (machine, t1); +machine__remove_thread (machine, t2); +machine__remove_thread (machine, t3); +machine__remove_thread (machine, other); +machine__remove_thread (machine, other_leader); + other_mg = other->mg;TEST_ASSERT_EQUAL ("wrong refcnt" , other_mg->refcnt,2 );
@@ -81,11 +93,6 @@ int test__thread_mg_share(void)thread__put (other); -/* -* Cannot call machine__delete_threads(machine) now, -* because we've already released all the threads. -*/ -machines__exit (&machines);return 0 ; }