perf tests: Show refcounting broken expectations in thread-mg-share test
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: 8f1960138baf8a6c139917ecbc032e7916d109ef Gitweb: http://git.kernel.org/tip/8f1960138baf8a6c139917ecbc032e7916d109ef Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Mon, 11 May 2015 16:30:20 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Tue, 12 May 2015 09:59:51 -0300
perf tests: Show refcounting broken expectations in thread-mg-share test
To help understand the failure.
[acme@zoo linux]$ perf test -v 30
30: Test thread mg sharing :
--- start ---
test child forked, pid 12275
FAILED tests/thread-mg-share.c:68 wrong refcnt (4 != 3) test child finished with -1 ---- end ---- Test thread mg sharing: FAILED! [acme@zoo linux]$
This is under investigation, the thread__delete() calls were replaced with thread__put(), and those cause mismatches because now we need to be more judicious with the thread lifetime management.
I.e. previously the thread__delete() would drop the map_group refcount, but now since thread__put doesn't call thread__delete() necessarily. because we have other refcount holders, the map_group refcount will not be as we expected when this test was implemented.
Will be fixed soon...
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/tests.h | 9 +++++++++ tools/perf/tests/thread-mg-share.c | 12 ++++++------ 2 files changed, 15 insertions(+), 6 deletions(-)
tools/perf/tests/tests.h +9 -0
@@ -9,6 +9,15 @@ do { \ } \ } while (0) +#define TEST_ASSERT_EQUAL (text, val, expected) \ +do { \ + if (val != expected) { \ + pr_debug("FAILED %s:%d %s (%d != %d)\n", \ + __FILE__, __LINE__, text, val, expected); \ + return -1; \ + } \ +} while (0) +enum {TEST_OK =0 ,TEST_FAIL =-1 ,
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_VAL ("wrong refcnt" , mg->refcnt ==4 ); +TEST_ASSERT_EQUAL ("wrong refcnt" , mg->refcnt,4 );/* test the map groups pointer is shared */ TEST_ASSERT_VAL ("map groups don't match" , mg == t1->mg);
@@ -59,25 +59,25 @@ int test__thread_mg_share(void)TEST_ASSERT_VAL ("failed to find other leader" , other_leader); other_mg = other->mg; -TEST_ASSERT_VAL ("wrong refcnt" , other_mg->refcnt ==2 ); +TEST_ASSERT_EQUAL ("wrong refcnt" , 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_VAL ("wrong refcnt" , mg->refcnt ==3 ); +TEST_ASSERT_EQUAL ("wrong refcnt" , mg->refcnt,3 );thread__put (t1); -TEST_ASSERT_VAL ("wrong refcnt" , mg->refcnt ==2 ); +TEST_ASSERT_EQUAL ("wrong refcnt" , mg->refcnt,2 );thread__put (t2); -TEST_ASSERT_VAL ("wrong refcnt" , mg->refcnt ==1 ); +TEST_ASSERT_EQUAL ("wrong refcnt" , mg->refcnt,1 );thread__put (t3);/* release other group */ thread__put (other_leader); -TEST_ASSERT_VAL ("wrong refcnt" , other_mg->refcnt ==1 ); +TEST_ASSERT_EQUAL ("wrong refcnt" , other_mg->refcnt,1 );thread__put (other);