Commit edba42cd authored by Michael Ellerman's avatar Michael Ellerman

selftests/powerpc: Skip earlier in alignment_handler test

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: default avatarMichael Ellerman <mpe@ellerman.id.au>
Acked-by: default avatarAndrew Donnellan <andrew.donnellan@au1.ibm.com>
parent 78ee9946
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <fcntl.h> #include <fcntl.h>
#include <unistd.h> #include <unistd.h>
#include <stdbool.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
...@@ -191,7 +192,7 @@ int test_memcmp(void *s1, void *s2, int n, int offset, char *test_name) ...@@ -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 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; void *mem0, *mem1, *ci0, *ci1;
printf("\tDoing %s:\t", test_name); printf("\tDoing %s:\t", test_name);
...@@ -199,8 +200,8 @@ int do_test(char *test_name, void (*test_func)(char *, char *)) ...@@ -199,8 +200,8 @@ int do_test(char *test_name, void (*test_func)(char *, char *))
fd = open("/dev/fb0", O_RDWR); fd = open("/dev/fb0", O_RDWR);
if (fd < 0) { if (fd < 0) {
printf("\n"); printf("\n");
perror("Can't open /dev/fb0"); perror("Can't open /dev/fb0 now?");
SKIP_IF(1); return 1;
} }
ci0 = mmap(NULL, bufsize, PROT_WRITE, MAP_SHARED, ci0 = mmap(NULL, bufsize, PROT_WRITE, MAP_SHARED,
...@@ -226,6 +227,7 @@ int do_test(char *test_name, void (*test_func)(char *, char *)) ...@@ -226,6 +227,7 @@ int do_test(char *test_name, void (*test_func)(char *, char *))
return rc; return rc;
} }
rc = 0;
/* offset = 0 no alignment fault, so skip */ /* offset = 0 no alignment fault, so skip */
for (offset = 1; offset < 16; offset++) { for (offset = 1; offset < 16; offset++) {
width = 16; /* vsx == 16 bytes */ width = 16; /* vsx == 16 bytes */
...@@ -244,32 +246,50 @@ int do_test(char *test_name, void (*test_func)(char *, char *)) ...@@ -244,32 +246,50 @@ int do_test(char *test_name, void (*test_func)(char *, char *))
r |= test_memcpy(mem1, mem0, width, offset, test_func); r |= test_memcpy(mem1, mem0, width, offset, test_func);
if (r && !debug) { if (r && !debug) {
printf("FAILED: Got signal"); printf("FAILED: Got signal");
rc = 1;
break; break;
} }
r |= test_memcmp(mem1, ci1, width, offset, test_name); r |= test_memcmp(mem1, ci1, width, offset, test_name);
rc |= r;
if (r && !debug) { if (r && !debug) {
printf("FAILED: Wrong Data"); printf("FAILED: Wrong Data");
rc = 1;
break; break;
} }
} }
if (!r)
if (rc == 0)
printf("PASSED"); printf("PASSED");
printf("\n"); printf("\n");
munmap(ci0, bufsize); munmap(ci0, bufsize);
munmap(ci1, bufsize); munmap(ci1, bufsize);
free(mem0); free(mem0);
free(mem1); free(mem1);
close(fd);
return rc; 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 test_alignment_handler_vsx_206(void)
{ {
int rc = 0; int rc = 0;
SKIP_IF(!can_open_fb0());
printf("VSX: 2.06B\n"); printf("VSX: 2.06B\n");
LOAD_VSX_XFORM_TEST(lxvd2x); LOAD_VSX_XFORM_TEST(lxvd2x);
LOAD_VSX_XFORM_TEST(lxvw4x); LOAD_VSX_XFORM_TEST(lxvw4x);
...@@ -285,6 +305,8 @@ int test_alignment_handler_vsx_207(void) ...@@ -285,6 +305,8 @@ int test_alignment_handler_vsx_207(void)
{ {
int rc = 0; int rc = 0;
SKIP_IF(!can_open_fb0());
printf("VSX: 2.07B\n"); printf("VSX: 2.07B\n");
LOAD_VSX_XFORM_TEST(lxsspx); LOAD_VSX_XFORM_TEST(lxsspx);
LOAD_VSX_XFORM_TEST(lxsiwax); LOAD_VSX_XFORM_TEST(lxsiwax);
...@@ -298,6 +320,8 @@ int test_alignment_handler_vsx_300(void) ...@@ -298,6 +320,8 @@ int test_alignment_handler_vsx_300(void)
{ {
int rc = 0; int rc = 0;
SKIP_IF(!can_open_fb0());
SKIP_IF(!have_hwcap2(PPC_FEATURE2_ARCH_3_00)); SKIP_IF(!have_hwcap2(PPC_FEATURE2_ARCH_3_00));
printf("VSX: 3.00B\n"); printf("VSX: 3.00B\n");
LOAD_VMX_DFORM_TEST(lxsd); LOAD_VMX_DFORM_TEST(lxsd);
...@@ -328,6 +352,8 @@ int test_alignment_handler_integer(void) ...@@ -328,6 +352,8 @@ int test_alignment_handler_integer(void)
{ {
int rc = 0; int rc = 0;
SKIP_IF(!can_open_fb0());
printf("Integer\n"); printf("Integer\n");
LOAD_DFORM_TEST(lbz); LOAD_DFORM_TEST(lbz);
LOAD_DFORM_TEST(lbzu); LOAD_DFORM_TEST(lbzu);
...@@ -383,6 +409,8 @@ int test_alignment_handler_vmx(void) ...@@ -383,6 +409,8 @@ int test_alignment_handler_vmx(void)
{ {
int rc = 0; int rc = 0;
SKIP_IF(!can_open_fb0());
printf("VMX\n"); printf("VMX\n");
LOAD_VMX_XFORM_TEST(lvx); LOAD_VMX_XFORM_TEST(lvx);
...@@ -408,6 +436,8 @@ int test_alignment_handler_fp(void) ...@@ -408,6 +436,8 @@ int test_alignment_handler_fp(void)
{ {
int rc = 0; int rc = 0;
SKIP_IF(!can_open_fb0());
printf("Floating point\n"); printf("Floating point\n");
LOAD_FLOAT_DFORM_TEST(lfd); LOAD_FLOAT_DFORM_TEST(lfd);
LOAD_FLOAT_XFORM_TEST(lfdx); LOAD_FLOAT_XFORM_TEST(lfdx);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment