* [PATCH] Fixes for selftest tm-unavailable @ 2018-03-05 20:48 Gustavo Romero 2018-03-05 20:48 ` [PATCH] selftests/powerpc: Skip tm-unavailable if TM is not enabled Gustavo Romero 0 siblings, 1 reply; 5+ messages in thread From: Gustavo Romero @ 2018-03-05 20:48 UTC (permalink / raw) To: linuxppc-dev; +Cc: gromero, mpe, cyrilbur The recent fix by mpe for tm-trap [1] (thanks for fixing it! really sorry for the late reply, I got dragged away by the darn thingy) caught my attention to the fact that tm-unavailable needs a similar fix. Also before that on Feb. Cyril Bur proposed another small fix for the same selftest [2]. Since Cyril's change is not merged yet I decided to take Cyril's fix into account as well. Finally, I also noted that tm-unavailable is not using the test harness, thus I added it to tm-unavailable. [1] https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id=192b2e742c06af399e8eecb4a17265 [2] https://lists.ozlabs.org/pipermail/linuxppc-dev/2018-February/169111.html Gustavo Romero (1): selftests/powerpc: Skip tm-unavailable if TM is not enabled .../testing/selftests/powerpc/tm/tm-unavailable.c | 24 ++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) -- 2.7.4 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH] selftests/powerpc: Skip tm-unavailable if TM is not enabled 2018-03-05 20:48 [PATCH] Fixes for selftest tm-unavailable Gustavo Romero @ 2018-03-05 20:48 ` Gustavo Romero 2018-03-05 23:49 ` Cyril Bur 2018-03-14 9:28 ` Michael Ellerman 0 siblings, 2 replies; 5+ messages in thread From: Gustavo Romero @ 2018-03-05 20:48 UTC (permalink / raw) To: linuxppc-dev; +Cc: gromero, mpe, cyrilbur Some processor revisions do not support transactional memory, and additionally kernel support can be disabled. In either case the tm-unavailable test should be skipped, otherwise it will fail with a SIGILL. That commit also sets this selftest to be called through the test harness as it's done for other TM selftests. Finally, it avoids using "ping" as a thread name since it's ambiguous and can be confusing when shown, for instance, in a kernel backtrace log. Fixes: 77fad8bfb1d2 ("selftests/powerpc: Check FP/VEC on exception in TM") Signed-off-by: Gustavo Romero <gromero@linux.vnet.ibm.com> --- .../testing/selftests/powerpc/tm/tm-unavailable.c | 24 ++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/tools/testing/selftests/powerpc/tm/tm-unavailable.c b/tools/testing/selftests/powerpc/tm/tm-unavailable.c index e6a0fad..156c8e7 100644 --- a/tools/testing/selftests/powerpc/tm/tm-unavailable.c +++ b/tools/testing/selftests/powerpc/tm/tm-unavailable.c @@ -80,7 +80,7 @@ bool is_failure(uint64_t condition_reg) return ((condition_reg >> 28) & 0xa) == 0xa; } -void *ping(void *input) +void *tm_una_ping(void *input) { /* @@ -280,7 +280,7 @@ void *ping(void *input) } /* Thread to force context switch */ -void *pong(void *not_used) +void *tm_una_pong(void *not_used) { /* Wait thread get its name "pong". */ if (DEBUG) @@ -311,11 +311,11 @@ void test_fp_vec(int fp, int vec, pthread_attr_t *attr) do { int rc; - /* Bind 'ping' to CPU 0, as specified in 'attr'. */ - rc = pthread_create(&t0, attr, ping, (void *) &flags); + /* Bind to CPU 0, as specified in 'attr'. */ + rc = pthread_create(&t0, attr, tm_una_ping, (void *) &flags); if (rc) pr_err(rc, "pthread_create()"); - rc = pthread_setname_np(t0, "ping"); + rc = pthread_setname_np(t0, "tm_una_ping"); if (rc) pr_warn(rc, "pthread_setname_np"); rc = pthread_join(t0, &ret_value); @@ -333,13 +333,15 @@ void test_fp_vec(int fp, int vec, pthread_attr_t *attr) } } -int main(int argc, char **argv) +int tm_unavailable_test(void) { int rc, exception; /* FP = 0, VEC = 1, VSX = 2 */ pthread_t t1; pthread_attr_t attr; cpu_set_t cpuset; + SKIP_IF(!have_htm()); + /* Set only CPU 0 in the mask. Both threads will be bound to CPU 0. */ CPU_ZERO(&cpuset); CPU_SET(0, &cpuset); @@ -354,12 +356,12 @@ int main(int argc, char **argv) if (rc) pr_err(rc, "pthread_attr_setaffinity_np()"); - rc = pthread_create(&t1, &attr /* Bind 'pong' to CPU 0 */, pong, NULL); + rc = pthread_create(&t1, &attr /* Bind to CPU 0 */, tm_una_pong, NULL); if (rc) pr_err(rc, "pthread_create()"); /* Name it for systemtap convenience */ - rc = pthread_setname_np(t1, "pong"); + rc = pthread_setname_np(t1, "tm_una_pong"); if (rc) pr_warn(rc, "pthread_create()"); @@ -394,3 +396,9 @@ int main(int argc, char **argv) exit(0); } } + +int main(int argc, char **argv) +{ + test_harness_set_timeout(220); + return test_harness(tm_unavailable_test, "tm_unavailable_test"); +} -- 2.7.4 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] selftests/powerpc: Skip tm-unavailable if TM is not enabled 2018-03-05 20:48 ` [PATCH] selftests/powerpc: Skip tm-unavailable if TM is not enabled Gustavo Romero @ 2018-03-05 23:49 ` Cyril Bur 2018-03-06 20:24 ` Gustavo Romero 2018-03-14 9:28 ` Michael Ellerman 1 sibling, 1 reply; 5+ messages in thread From: Cyril Bur @ 2018-03-05 23:49 UTC (permalink / raw) To: Gustavo Romero, linuxppc-dev On Mon, 2018-03-05 at 15:48 -0500, Gustavo Romero wrote: > Some processor revisions do not support transactional memory, and > additionally kernel support can be disabled. In either case the > tm-unavailable test should be skipped, otherwise it will fail with > a SIGILL. > > That commit also sets this selftest to be called through the test > harness as it's done for other TM selftests. > > Finally, it avoids using "ping" as a thread name since it's > ambiguous and can be confusing when shown, for instance, > in a kernel backtrace log. > I spent more time than I care to admit looking at backtraces wondering how "ping" got in the mix ;). > Fixes: 77fad8bfb1d2 ("selftests/powerpc: Check FP/VEC on exception in TM") > Signed-off-by: Gustavo Romero <gromero@linux.vnet.ibm.com> Reviewed-by: Cyril Bur <cyrilbur@gmail.com> > --- > .../testing/selftests/powerpc/tm/tm-unavailable.c | 24 ++++++++++++++-------- > 1 file changed, 16 insertions(+), 8 deletions(-) > > diff --git a/tools/testing/selftests/powerpc/tm/tm-unavailable.c b/tools/testing/selftests/powerpc/tm/tm-unavailable.c > index e6a0fad..156c8e7 100644 > --- a/tools/testing/selftests/powerpc/tm/tm-unavailable.c > +++ b/tools/testing/selftests/powerpc/tm/tm-unavailable.c > @@ -80,7 +80,7 @@ bool is_failure(uint64_t condition_reg) > return ((condition_reg >> 28) & 0xa) == 0xa; > } > > -void *ping(void *input) > +void *tm_una_ping(void *input) > { > > /* > @@ -280,7 +280,7 @@ void *ping(void *input) > } > > /* Thread to force context switch */ > -void *pong(void *not_used) > +void *tm_una_pong(void *not_used) > { > /* Wait thread get its name "pong". */ > if (DEBUG) > @@ -311,11 +311,11 @@ void test_fp_vec(int fp, int vec, pthread_attr_t *attr) > do { > int rc; > > - /* Bind 'ping' to CPU 0, as specified in 'attr'. */ > - rc = pthread_create(&t0, attr, ping, (void *) &flags); > + /* Bind to CPU 0, as specified in 'attr'. */ > + rc = pthread_create(&t0, attr, tm_una_ping, (void *) &flags); > if (rc) > pr_err(rc, "pthread_create()"); > - rc = pthread_setname_np(t0, "ping"); > + rc = pthread_setname_np(t0, "tm_una_ping"); > if (rc) > pr_warn(rc, "pthread_setname_np"); > rc = pthread_join(t0, &ret_value); > @@ -333,13 +333,15 @@ void test_fp_vec(int fp, int vec, pthread_attr_t *attr) > } > } > > -int main(int argc, char **argv) > +int tm_unavailable_test(void) > { > int rc, exception; /* FP = 0, VEC = 1, VSX = 2 */ > pthread_t t1; > pthread_attr_t attr; > cpu_set_t cpuset; > > + SKIP_IF(!have_htm()); > + > /* Set only CPU 0 in the mask. Both threads will be bound to CPU 0. */ > CPU_ZERO(&cpuset); > CPU_SET(0, &cpuset); > @@ -354,12 +356,12 @@ int main(int argc, char **argv) > if (rc) > pr_err(rc, "pthread_attr_setaffinity_np()"); > > - rc = pthread_create(&t1, &attr /* Bind 'pong' to CPU 0 */, pong, NULL); > + rc = pthread_create(&t1, &attr /* Bind to CPU 0 */, tm_una_pong, NULL); > if (rc) > pr_err(rc, "pthread_create()"); > > /* Name it for systemtap convenience */ > - rc = pthread_setname_np(t1, "pong"); > + rc = pthread_setname_np(t1, "tm_una_pong"); > if (rc) > pr_warn(rc, "pthread_create()"); > > @@ -394,3 +396,9 @@ int main(int argc, char **argv) > exit(0); > } > } > + > +int main(int argc, char **argv) > +{ > + test_harness_set_timeout(220); > + return test_harness(tm_unavailable_test, "tm_unavailable_test"); > +} ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] selftests/powerpc: Skip tm-unavailable if TM is not enabled 2018-03-05 23:49 ` Cyril Bur @ 2018-03-06 20:24 ` Gustavo Romero 0 siblings, 0 replies; 5+ messages in thread From: Gustavo Romero @ 2018-03-06 20:24 UTC (permalink / raw) To: Cyril Bur, linuxppc-dev Hi Cyril, On 03/05/2018 08:49 PM, Cyril Bur wrote: > On Mon, 2018-03-05 at 15:48 -0500, Gustavo Romero wrote: >> Some processor revisions do not support transactional memory, and >> additionally kernel support can be disabled. In either case the >> tm-unavailable test should be skipped, otherwise it will fail with >> a SIGILL. >> >> That commit also sets this selftest to be called through the test >> harness as it's done for other TM selftests. >> >> Finally, it avoids using "ping" as a thread name since it's >> ambiguous and can be confusing when shown, for instance, >> in a kernel backtrace log. >> > > I spent more time than I care to admit looking at backtraces wondering > how "ping" got in the mix ;). heh sorry about that... :) >> Fixes: 77fad8bfb1d2 ("selftests/powerpc: Check FP/VEC on exception in TM") >> Signed-off-by: Gustavo Romero <gromero@linux.vnet.ibm.com> > > Reviewed-by: Cyril Bur <cyrilbur@gmail.com> Thanks for reviewing it. Cheers, Gustavo >> --- >> .../testing/selftests/powerpc/tm/tm-unavailable.c | 24 ++++++++++++++-------- >> 1 file changed, 16 insertions(+), 8 deletions(-) >> >> diff --git a/tools/testing/selftests/powerpc/tm/tm-unavailable.c b/tools/testing/selftests/powerpc/tm/tm-unavailable.c >> index e6a0fad..156c8e7 100644 >> --- a/tools/testing/selftests/powerpc/tm/tm-unavailable.c >> +++ b/tools/testing/selftests/powerpc/tm/tm-unavailable.c >> @@ -80,7 +80,7 @@ bool is_failure(uint64_t condition_reg) >> return ((condition_reg >> 28) & 0xa) == 0xa; >> } >> >> -void *ping(void *input) >> +void *tm_una_ping(void *input) >> { >> >> /* >> @@ -280,7 +280,7 @@ void *ping(void *input) >> } >> >> /* Thread to force context switch */ >> -void *pong(void *not_used) >> +void *tm_una_pong(void *not_used) >> { >> /* Wait thread get its name "pong". */ >> if (DEBUG) >> @@ -311,11 +311,11 @@ void test_fp_vec(int fp, int vec, pthread_attr_t *attr) >> do { >> int rc; >> >> - /* Bind 'ping' to CPU 0, as specified in 'attr'. */ >> - rc = pthread_create(&t0, attr, ping, (void *) &flags); >> + /* Bind to CPU 0, as specified in 'attr'. */ >> + rc = pthread_create(&t0, attr, tm_una_ping, (void *) &flags); >> if (rc) >> pr_err(rc, "pthread_create()"); >> - rc = pthread_setname_np(t0, "ping"); >> + rc = pthread_setname_np(t0, "tm_una_ping"); >> if (rc) >> pr_warn(rc, "pthread_setname_np"); >> rc = pthread_join(t0, &ret_value); >> @@ -333,13 +333,15 @@ void test_fp_vec(int fp, int vec, pthread_attr_t *attr) >> } >> } >> >> -int main(int argc, char **argv) >> +int tm_unavailable_test(void) >> { >> int rc, exception; /* FP = 0, VEC = 1, VSX = 2 */ >> pthread_t t1; >> pthread_attr_t attr; >> cpu_set_t cpuset; >> >> + SKIP_IF(!have_htm()); >> + >> /* Set only CPU 0 in the mask. Both threads will be bound to CPU 0. */ >> CPU_ZERO(&cpuset); >> CPU_SET(0, &cpuset); >> @@ -354,12 +356,12 @@ int main(int argc, char **argv) >> if (rc) >> pr_err(rc, "pthread_attr_setaffinity_np()"); >> >> - rc = pthread_create(&t1, &attr /* Bind 'pong' to CPU 0 */, pong, NULL); >> + rc = pthread_create(&t1, &attr /* Bind to CPU 0 */, tm_una_pong, NULL); >> if (rc) >> pr_err(rc, "pthread_create()"); >> >> /* Name it for systemtap convenience */ >> - rc = pthread_setname_np(t1, "pong"); >> + rc = pthread_setname_np(t1, "tm_una_pong"); >> if (rc) >> pr_warn(rc, "pthread_create()"); >> >> @@ -394,3 +396,9 @@ int main(int argc, char **argv) >> exit(0); >> } >> } >> + >> +int main(int argc, char **argv) >> +{ >> + test_harness_set_timeout(220); >> + return test_harness(tm_unavailable_test, "tm_unavailable_test"); >> +} > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: selftests/powerpc: Skip tm-unavailable if TM is not enabled 2018-03-05 20:48 ` [PATCH] selftests/powerpc: Skip tm-unavailable if TM is not enabled Gustavo Romero 2018-03-05 23:49 ` Cyril Bur @ 2018-03-14 9:28 ` Michael Ellerman 1 sibling, 0 replies; 5+ messages in thread From: Michael Ellerman @ 2018-03-14 9:28 UTC (permalink / raw) To: Gustavo Romero, linuxppc-dev; +Cc: cyrilbur, gromero On Mon, 2018-03-05 at 20:48:55 UTC, Gustavo Romero wrote: > Some processor revisions do not support transactional memory, and > additionally kernel support can be disabled. In either case the > tm-unavailable test should be skipped, otherwise it will fail with > a SIGILL. > > That commit also sets this selftest to be called through the test > harness as it's done for other TM selftests. > > Finally, it avoids using "ping" as a thread name since it's > ambiguous and can be confusing when shown, for instance, > in a kernel backtrace log. > > Fixes: 77fad8bfb1d2 ("selftests/powerpc: Check FP/VEC on exception in TM") > Signed-off-by: Gustavo Romero <gromero@linux.vnet.ibm.com> > Reviewed-by: Cyril Bur <cyrilbur@gmail.com> Applied to powerpc next, thanks. https://git.kernel.org/powerpc/c/b395e55b49ecd56ea28dc629f4ca4c cheers ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2018-03-14 9:28 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-03-05 20:48 [PATCH] Fixes for selftest tm-unavailable Gustavo Romero 2018-03-05 20:48 ` [PATCH] selftests/powerpc: Skip tm-unavailable if TM is not enabled Gustavo Romero 2018-03-05 23:49 ` Cyril Bur 2018-03-06 20:24 ` Gustavo Romero 2018-03-14 9:28 ` Michael Ellerman
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.