* [PATCH v2 1/2] selftests/powerpc: Skip earlier in alignment_handler test
@ 2018-07-31 12:08 Michael Ellerman
2018-07-31 12:08 ` [PATCH v2 2/2] selftests/powerpc: Add more version checks to " Michael Ellerman
2018-08-08 14:26 ` [v2, 1/2] selftests/powerpc: Skip earlier in " Michael Ellerman
0 siblings, 2 replies; 4+ messages in thread
From: Michael Ellerman @ 2018-07-31 12:08 UTC (permalink / raw)
To: linuxppc-dev; +Cc: mikey, andrew.donnellan
Currently the alignment_handler test prints "Can't open /dev/fb0"
about 80 times per run, which is a little annoying.
Refactor it to check earlier if it can open /dev/fb0 and skip if not,
this results in each test printing something like:
test: test_alignment_handler_vsx_206
tags: git_version:v4.18-rc3-134-gfb21a48904aa
[SKIP] Test skipped on line 291
skip: test_alignment_handler_vsx_206
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Acked-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
.../powerpc/alignment/alignment_handler.c | 40 +++++++++++++++++++---
1 file changed, 35 insertions(+), 5 deletions(-)
v2: Unchanged.
diff --git a/tools/testing/selftests/powerpc/alignment/alignment_handler.c b/tools/testing/selftests/powerpc/alignment/alignment_handler.c
index 0f2698f9fd6d..0eddd16af49f 100644
--- a/tools/testing/selftests/powerpc/alignment/alignment_handler.c
+++ b/tools/testing/selftests/powerpc/alignment/alignment_handler.c
@@ -40,6 +40,7 @@
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
+#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -191,7 +192,7 @@ int test_memcmp(void *s1, void *s2, int n, int offset, char *test_name)
*/
int do_test(char *test_name, void (*test_func)(char *, char *))
{
- int offset, width, fd, rc = 0, r;
+ int offset, width, fd, rc, r;
void *mem0, *mem1, *ci0, *ci1;
printf("\tDoing %s:\t", test_name);
@@ -199,8 +200,8 @@ int do_test(char *test_name, void (*test_func)(char *, char *))
fd = open("/dev/fb0", O_RDWR);
if (fd < 0) {
printf("\n");
- perror("Can't open /dev/fb0");
- SKIP_IF(1);
+ perror("Can't open /dev/fb0 now?");
+ return 1;
}
ci0 = mmap(NULL, bufsize, PROT_WRITE, MAP_SHARED,
@@ -226,6 +227,7 @@ int do_test(char *test_name, void (*test_func)(char *, char *))
return rc;
}
+ rc = 0;
/* offset = 0 no alignment fault, so skip */
for (offset = 1; offset < 16; offset++) {
width = 16; /* vsx == 16 bytes */
@@ -244,32 +246,50 @@ int do_test(char *test_name, void (*test_func)(char *, char *))
r |= test_memcpy(mem1, mem0, width, offset, test_func);
if (r && !debug) {
printf("FAILED: Got signal");
+ rc = 1;
break;
}
r |= test_memcmp(mem1, ci1, width, offset, test_name);
- rc |= r;
if (r && !debug) {
printf("FAILED: Wrong Data");
+ rc = 1;
break;
}
}
- if (!r)
+
+ if (rc == 0)
printf("PASSED");
+
printf("\n");
munmap(ci0, bufsize);
munmap(ci1, bufsize);
free(mem0);
free(mem1);
+ close(fd);
return rc;
}
+static bool can_open_fb0(void)
+{
+ int fd;
+
+ fd = open("/dev/fb0", O_RDWR);
+ if (fd < 0)
+ return false;
+
+ close(fd);
+ return true;
+}
+
int test_alignment_handler_vsx_206(void)
{
int rc = 0;
+ SKIP_IF(!can_open_fb0());
+
printf("VSX: 2.06B\n");
LOAD_VSX_XFORM_TEST(lxvd2x);
LOAD_VSX_XFORM_TEST(lxvw4x);
@@ -285,6 +305,8 @@ int test_alignment_handler_vsx_207(void)
{
int rc = 0;
+ SKIP_IF(!can_open_fb0());
+
printf("VSX: 2.07B\n");
LOAD_VSX_XFORM_TEST(lxsspx);
LOAD_VSX_XFORM_TEST(lxsiwax);
@@ -298,6 +320,8 @@ int test_alignment_handler_vsx_300(void)
{
int rc = 0;
+ SKIP_IF(!can_open_fb0());
+
SKIP_IF(!have_hwcap2(PPC_FEATURE2_ARCH_3_00));
printf("VSX: 3.00B\n");
LOAD_VMX_DFORM_TEST(lxsd);
@@ -328,6 +352,8 @@ int test_alignment_handler_integer(void)
{
int rc = 0;
+ SKIP_IF(!can_open_fb0());
+
printf("Integer\n");
LOAD_DFORM_TEST(lbz);
LOAD_DFORM_TEST(lbzu);
@@ -383,6 +409,8 @@ int test_alignment_handler_vmx(void)
{
int rc = 0;
+ SKIP_IF(!can_open_fb0());
+
printf("VMX\n");
LOAD_VMX_XFORM_TEST(lvx);
@@ -408,6 +436,8 @@ int test_alignment_handler_fp(void)
{
int rc = 0;
+ SKIP_IF(!can_open_fb0());
+
printf("Floating point\n");
LOAD_FLOAT_DFORM_TEST(lfd);
LOAD_FLOAT_XFORM_TEST(lfdx);
--
2.14.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v2 2/2] selftests/powerpc: Add more version checks to alignment_handler test
2018-07-31 12:08 [PATCH v2 1/2] selftests/powerpc: Skip earlier in alignment_handler test Michael Ellerman
@ 2018-07-31 12:08 ` Michael Ellerman
2018-08-01 0:16 ` Andrew Donnellan
2018-08-08 14:26 ` [v2, 1/2] selftests/powerpc: Skip earlier in " Michael Ellerman
1 sibling, 1 reply; 4+ messages in thread
From: Michael Ellerman @ 2018-07-31 12:08 UTC (permalink / raw)
To: linuxppc-dev; +Cc: mikey, andrew.donnellan
The alignment_handler is documented to only work on Power8/Power9, but
we can make it run on older CPUs by guarding more of the tests with
feature checks.
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
.../powerpc/alignment/alignment_handler.c | 67 +++++++++++++++++++---
1 file changed, 59 insertions(+), 8 deletions(-)
v2: Don't incorrectly duplicate any of the tests, as noticed by @ajd.
diff --git a/tools/testing/selftests/powerpc/alignment/alignment_handler.c b/tools/testing/selftests/powerpc/alignment/alignment_handler.c
index 0eddd16af49f..169a8b9719fb 100644
--- a/tools/testing/selftests/powerpc/alignment/alignment_handler.c
+++ b/tools/testing/selftests/powerpc/alignment/alignment_handler.c
@@ -49,6 +49,8 @@
#include <setjmp.h>
#include <signal.h>
+#include <asm/cputable.h>
+
#include "utils.h"
int bufsize;
@@ -289,6 +291,7 @@ int test_alignment_handler_vsx_206(void)
int rc = 0;
SKIP_IF(!can_open_fb0());
+ SKIP_IF(!have_hwcap(PPC_FEATURE_ARCH_2_06));
printf("VSX: 2.06B\n");
LOAD_VSX_XFORM_TEST(lxvd2x);
@@ -306,6 +309,7 @@ int test_alignment_handler_vsx_207(void)
int rc = 0;
SKIP_IF(!can_open_fb0());
+ SKIP_IF(!have_hwcap2(PPC_FEATURE2_ARCH_2_07));
printf("VSX: 2.07B\n");
LOAD_VSX_XFORM_TEST(lxsspx);
@@ -380,7 +384,6 @@ int test_alignment_handler_integer(void)
LOAD_DFORM_TEST(ldu);
LOAD_XFORM_TEST(ldx);
LOAD_XFORM_TEST(ldux);
- LOAD_XFORM_TEST(ldbrx);
LOAD_DFORM_TEST(lmw);
STORE_DFORM_TEST(stb);
STORE_XFORM_TEST(stbx);
@@ -400,8 +403,23 @@ int test_alignment_handler_integer(void)
STORE_XFORM_TEST(stdx);
STORE_DFORM_TEST(stdu);
STORE_XFORM_TEST(stdux);
- STORE_XFORM_TEST(stdbrx);
STORE_DFORM_TEST(stmw);
+
+ return rc;
+}
+
+int test_alignment_handler_integer_206(void)
+{
+ int rc = 0;
+
+ SKIP_IF(!can_open_fb0());
+ SKIP_IF(!have_hwcap(PPC_FEATURE_ARCH_2_06));
+
+ printf("Integer: 2.06\n");
+
+ LOAD_XFORM_TEST(ldbrx);
+ STORE_XFORM_TEST(stdbrx);
+
return rc;
}
@@ -410,6 +428,7 @@ int test_alignment_handler_vmx(void)
int rc = 0;
SKIP_IF(!can_open_fb0());
+ SKIP_IF(!have_hwcap(PPC_FEATURE_HAS_ALTIVEC));
printf("VMX\n");
LOAD_VMX_XFORM_TEST(lvx);
@@ -441,20 +460,14 @@ int test_alignment_handler_fp(void)
printf("Floating point\n");
LOAD_FLOAT_DFORM_TEST(lfd);
LOAD_FLOAT_XFORM_TEST(lfdx);
- LOAD_FLOAT_DFORM_TEST(lfdp);
- LOAD_FLOAT_XFORM_TEST(lfdpx);
LOAD_FLOAT_DFORM_TEST(lfdu);
LOAD_FLOAT_XFORM_TEST(lfdux);
LOAD_FLOAT_DFORM_TEST(lfs);
LOAD_FLOAT_XFORM_TEST(lfsx);
LOAD_FLOAT_DFORM_TEST(lfsu);
LOAD_FLOAT_XFORM_TEST(lfsux);
- LOAD_FLOAT_XFORM_TEST(lfiwzx);
- LOAD_FLOAT_XFORM_TEST(lfiwax);
STORE_FLOAT_DFORM_TEST(stfd);
STORE_FLOAT_XFORM_TEST(stfdx);
- STORE_FLOAT_DFORM_TEST(stfdp);
- STORE_FLOAT_XFORM_TEST(stfdpx);
STORE_FLOAT_DFORM_TEST(stfdu);
STORE_FLOAT_XFORM_TEST(stfdux);
STORE_FLOAT_DFORM_TEST(stfs);
@@ -466,6 +479,38 @@ int test_alignment_handler_fp(void)
return rc;
}
+int test_alignment_handler_fp_205(void)
+{
+ int rc = 0;
+
+ SKIP_IF(!can_open_fb0());
+ SKIP_IF(!have_hwcap(PPC_FEATURE_ARCH_2_05));
+
+ printf("Floating point: 2.05\n");
+
+ LOAD_FLOAT_DFORM_TEST(lfdp);
+ LOAD_FLOAT_XFORM_TEST(lfdpx);
+ LOAD_FLOAT_XFORM_TEST(lfiwax);
+ STORE_FLOAT_DFORM_TEST(stfdp);
+ STORE_FLOAT_XFORM_TEST(stfdpx);
+
+ return rc;
+}
+
+int test_alignment_handler_fp_206(void)
+{
+ int rc = 0;
+
+ SKIP_IF(!can_open_fb0());
+ SKIP_IF(!have_hwcap(PPC_FEATURE_ARCH_2_06));
+
+ printf("Floating point: 2.06\n");
+
+ LOAD_FLOAT_XFORM_TEST(lfiwzx);
+
+ return rc;
+}
+
void usage(char *prog)
{
printf("Usage: %s [options]\n", prog);
@@ -513,9 +558,15 @@ int main(int argc, char *argv[])
"test_alignment_handler_vsx_300");
rc |= test_harness(test_alignment_handler_integer,
"test_alignment_handler_integer");
+ rc |= test_harness(test_alignment_handler_integer_206,
+ "test_alignment_handler_integer_206");
rc |= test_harness(test_alignment_handler_vmx,
"test_alignment_handler_vmx");
rc |= test_harness(test_alignment_handler_fp,
"test_alignment_handler_fp");
+ rc |= test_harness(test_alignment_handler_fp_205,
+ "test_alignment_handler_fp_205");
+ rc |= test_harness(test_alignment_handler_fp_206,
+ "test_alignment_handler_fp_206");
return rc;
}
--
2.14.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2 2/2] selftests/powerpc: Add more version checks to alignment_handler test
2018-07-31 12:08 ` [PATCH v2 2/2] selftests/powerpc: Add more version checks to " Michael Ellerman
@ 2018-08-01 0:16 ` Andrew Donnellan
0 siblings, 0 replies; 4+ messages in thread
From: Andrew Donnellan @ 2018-08-01 0:16 UTC (permalink / raw)
To: Michael Ellerman, linuxppc-dev; +Cc: mikey
On 31/07/18 22:08, Michael Ellerman wrote:
> The alignment_handler is documented to only work on Power8/Power9, but
> we can make it run on older CPUs by guarding more of the tests with
> feature checks.
>
> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Looks good to me.
Reviewed-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
> ---
> .../powerpc/alignment/alignment_handler.c | 67 +++++++++++++++++++---
> 1 file changed, 59 insertions(+), 8 deletions(-)
>
> v2: Don't incorrectly duplicate any of the tests, as noticed by @ajd.
>
> diff --git a/tools/testing/selftests/powerpc/alignment/alignment_handler.c b/tools/testing/selftests/powerpc/alignment/alignment_handler.c
> index 0eddd16af49f..169a8b9719fb 100644
> --- a/tools/testing/selftests/powerpc/alignment/alignment_handler.c
> +++ b/tools/testing/selftests/powerpc/alignment/alignment_handler.c
> @@ -49,6 +49,8 @@
> #include <setjmp.h>
> #include <signal.h>
>
> +#include <asm/cputable.h>
> +
> #include "utils.h"
>
> int bufsize;
> @@ -289,6 +291,7 @@ int test_alignment_handler_vsx_206(void)
> int rc = 0;
>
> SKIP_IF(!can_open_fb0());
> + SKIP_IF(!have_hwcap(PPC_FEATURE_ARCH_2_06));
>
> printf("VSX: 2.06B\n");
> LOAD_VSX_XFORM_TEST(lxvd2x);
> @@ -306,6 +309,7 @@ int test_alignment_handler_vsx_207(void)
> int rc = 0;
>
> SKIP_IF(!can_open_fb0());
> + SKIP_IF(!have_hwcap2(PPC_FEATURE2_ARCH_2_07));
>
> printf("VSX: 2.07B\n");
> LOAD_VSX_XFORM_TEST(lxsspx);
> @@ -380,7 +384,6 @@ int test_alignment_handler_integer(void)
> LOAD_DFORM_TEST(ldu);
> LOAD_XFORM_TEST(ldx);
> LOAD_XFORM_TEST(ldux);
> - LOAD_XFORM_TEST(ldbrx);
> LOAD_DFORM_TEST(lmw);
> STORE_DFORM_TEST(stb);
> STORE_XFORM_TEST(stbx);
> @@ -400,8 +403,23 @@ int test_alignment_handler_integer(void)
> STORE_XFORM_TEST(stdx);
> STORE_DFORM_TEST(stdu);
> STORE_XFORM_TEST(stdux);
> - STORE_XFORM_TEST(stdbrx);
> STORE_DFORM_TEST(stmw);
> +
> + return rc;
> +}
> +
> +int test_alignment_handler_integer_206(void)
> +{
> + int rc = 0;
> +
> + SKIP_IF(!can_open_fb0());
> + SKIP_IF(!have_hwcap(PPC_FEATURE_ARCH_2_06));
> +
> + printf("Integer: 2.06\n");
> +
> + LOAD_XFORM_TEST(ldbrx);
> + STORE_XFORM_TEST(stdbrx);
> +
> return rc;
> }
>
> @@ -410,6 +428,7 @@ int test_alignment_handler_vmx(void)
> int rc = 0;
>
> SKIP_IF(!can_open_fb0());
> + SKIP_IF(!have_hwcap(PPC_FEATURE_HAS_ALTIVEC));
>
> printf("VMX\n");
> LOAD_VMX_XFORM_TEST(lvx);
> @@ -441,20 +460,14 @@ int test_alignment_handler_fp(void)
> printf("Floating point\n");
> LOAD_FLOAT_DFORM_TEST(lfd);
> LOAD_FLOAT_XFORM_TEST(lfdx);
> - LOAD_FLOAT_DFORM_TEST(lfdp);
> - LOAD_FLOAT_XFORM_TEST(lfdpx);
> LOAD_FLOAT_DFORM_TEST(lfdu);
> LOAD_FLOAT_XFORM_TEST(lfdux);
> LOAD_FLOAT_DFORM_TEST(lfs);
> LOAD_FLOAT_XFORM_TEST(lfsx);
> LOAD_FLOAT_DFORM_TEST(lfsu);
> LOAD_FLOAT_XFORM_TEST(lfsux);
> - LOAD_FLOAT_XFORM_TEST(lfiwzx);
> - LOAD_FLOAT_XFORM_TEST(lfiwax);
> STORE_FLOAT_DFORM_TEST(stfd);
> STORE_FLOAT_XFORM_TEST(stfdx);
> - STORE_FLOAT_DFORM_TEST(stfdp);
> - STORE_FLOAT_XFORM_TEST(stfdpx);
> STORE_FLOAT_DFORM_TEST(stfdu);
> STORE_FLOAT_XFORM_TEST(stfdux);
> STORE_FLOAT_DFORM_TEST(stfs);
> @@ -466,6 +479,38 @@ int test_alignment_handler_fp(void)
> return rc;
> }
>
> +int test_alignment_handler_fp_205(void)
> +{
> + int rc = 0;
> +
> + SKIP_IF(!can_open_fb0());
> + SKIP_IF(!have_hwcap(PPC_FEATURE_ARCH_2_05));
> +
> + printf("Floating point: 2.05\n");
> +
> + LOAD_FLOAT_DFORM_TEST(lfdp);
> + LOAD_FLOAT_XFORM_TEST(lfdpx);
> + LOAD_FLOAT_XFORM_TEST(lfiwax);
> + STORE_FLOAT_DFORM_TEST(stfdp);
> + STORE_FLOAT_XFORM_TEST(stfdpx);
> +
> + return rc;
> +}
> +
> +int test_alignment_handler_fp_206(void)
> +{
> + int rc = 0;
> +
> + SKIP_IF(!can_open_fb0());
> + SKIP_IF(!have_hwcap(PPC_FEATURE_ARCH_2_06));
> +
> + printf("Floating point: 2.06\n");
> +
> + LOAD_FLOAT_XFORM_TEST(lfiwzx);
> +
> + return rc;
> +}
> +
> void usage(char *prog)
> {
> printf("Usage: %s [options]\n", prog);
> @@ -513,9 +558,15 @@ int main(int argc, char *argv[])
> "test_alignment_handler_vsx_300");
> rc |= test_harness(test_alignment_handler_integer,
> "test_alignment_handler_integer");
> + rc |= test_harness(test_alignment_handler_integer_206,
> + "test_alignment_handler_integer_206");
> rc |= test_harness(test_alignment_handler_vmx,
> "test_alignment_handler_vmx");
> rc |= test_harness(test_alignment_handler_fp,
> "test_alignment_handler_fp");
> + rc |= test_harness(test_alignment_handler_fp_205,
> + "test_alignment_handler_fp_205");
> + rc |= test_harness(test_alignment_handler_fp_206,
> + "test_alignment_handler_fp_206");
> return rc;
> }
>
--
Andrew Donnellan OzLabs, ADL Canberra
andrew.donnellan@au1.ibm.com IBM Australia Limited
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [v2, 1/2] selftests/powerpc: Skip earlier in alignment_handler test
2018-07-31 12:08 [PATCH v2 1/2] selftests/powerpc: Skip earlier in alignment_handler test Michael Ellerman
2018-07-31 12:08 ` [PATCH v2 2/2] selftests/powerpc: Add more version checks to " Michael Ellerman
@ 2018-08-08 14:26 ` Michael Ellerman
1 sibling, 0 replies; 4+ messages in thread
From: Michael Ellerman @ 2018-08-08 14:26 UTC (permalink / raw)
To: Michael Ellerman, linuxppc-dev; +Cc: mikey, andrew.donnellan
On Tue, 2018-07-31 at 12:08:41 UTC, Michael Ellerman wrote:
> Currently the alignment_handler test prints "Can't open /dev/fb0"
> about 80 times per run, which is a little annoying.
>
> Refactor it to check earlier if it can open /dev/fb0 and skip if not,
> this results in each test printing something like:
>
> test: test_alignment_handler_vsx_206
> tags: git_version:v4.18-rc3-134-gfb21a48904aa
> [SKIP] Test skipped on line 291
> skip: test_alignment_handler_vsx_206
>
> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
> Acked-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Series applied to powerpc next.
https://git.kernel.org/powerpc/c/edba42cd14dbb0cc8b48cf786b006a
cheers
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-08-08 14:26 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-31 12:08 [PATCH v2 1/2] selftests/powerpc: Skip earlier in alignment_handler test Michael Ellerman
2018-07-31 12:08 ` [PATCH v2 2/2] selftests/powerpc: Add more version checks to " Michael Ellerman
2018-08-01 0:16 ` Andrew Donnellan
2018-08-08 14:26 ` [v2, 1/2] selftests/powerpc: Skip earlier in " Michael Ellerman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).