diff options
| author | Michael Ellerman <mpe@ellerman.id.au> | 2018-07-31 08:08:41 -0400 |
|---|---|---|
| committer | Michael Ellerman <mpe@ellerman.id.au> | 2018-08-07 10:32:28 -0400 |
| commit | edba42cd14dbb0cc8b48cf786b006ac5da4cd9a7 (patch) | |
| tree | cca80de4556a5cae0cfd1cee24e1a0afab770272 /tools/testing | |
| parent | 78ee9946371f5848ddfc88ab1a43867df8f17d83 (diff) | |
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: Michael Ellerman <mpe@ellerman.id.au>
Acked-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
Diffstat (limited to 'tools/testing')
| -rw-r--r-- | tools/testing/selftests/powerpc/alignment/alignment_handler.c | 40 |
1 files changed, 35 insertions, 5 deletions
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 @@ | |||
| 40 | #include <sys/stat.h> | 40 | #include <sys/stat.h> |
| 41 | #include <fcntl.h> | 41 | #include <fcntl.h> |
| 42 | #include <unistd.h> | 42 | #include <unistd.h> |
| 43 | #include <stdbool.h> | ||
| 43 | #include <stdio.h> | 44 | #include <stdio.h> |
| 44 | #include <stdlib.h> | 45 | #include <stdlib.h> |
| 45 | #include <string.h> | 46 | #include <string.h> |
| @@ -191,7 +192,7 @@ int test_memcmp(void *s1, void *s2, int n, int offset, char *test_name) | |||
| 191 | */ | 192 | */ |
| 192 | int do_test(char *test_name, void (*test_func)(char *, char *)) | 193 | int do_test(char *test_name, void (*test_func)(char *, char *)) |
| 193 | { | 194 | { |
| 194 | int offset, width, fd, rc = 0, r; | 195 | int offset, width, fd, rc, r; |
| 195 | void *mem0, *mem1, *ci0, *ci1; | 196 | void *mem0, *mem1, *ci0, *ci1; |
| 196 | 197 | ||
| 197 | printf("\tDoing %s:\t", test_name); | 198 | printf("\tDoing %s:\t", test_name); |
| @@ -199,8 +200,8 @@ int do_test(char *test_name, void (*test_func)(char *, char *)) | |||
| 199 | fd = open("/dev/fb0", O_RDWR); | 200 | fd = open("/dev/fb0", O_RDWR); |
| 200 | if (fd < 0) { | 201 | if (fd < 0) { |
| 201 | printf("\n"); | 202 | printf("\n"); |
| 202 | perror("Can't open /dev/fb0"); | 203 | perror("Can't open /dev/fb0 now?"); |
| 203 | SKIP_IF(1); | 204 | return 1; |
| 204 | } | 205 | } |
| 205 | 206 | ||
| 206 | ci0 = mmap(NULL, bufsize, PROT_WRITE, MAP_SHARED, | 207 | ci0 = mmap(NULL, bufsize, PROT_WRITE, MAP_SHARED, |
| @@ -226,6 +227,7 @@ int do_test(char *test_name, void (*test_func)(char *, char *)) | |||
| 226 | return rc; | 227 | return rc; |
| 227 | } | 228 | } |
| 228 | 229 | ||
| 230 | rc = 0; | ||
| 229 | /* offset = 0 no alignment fault, so skip */ | 231 | /* offset = 0 no alignment fault, so skip */ |
| 230 | for (offset = 1; offset < 16; offset++) { | 232 | for (offset = 1; offset < 16; offset++) { |
| 231 | width = 16; /* vsx == 16 bytes */ | 233 | width = 16; /* vsx == 16 bytes */ |
| @@ -244,32 +246,50 @@ int do_test(char *test_name, void (*test_func)(char *, char *)) | |||
| 244 | r |= test_memcpy(mem1, mem0, width, offset, test_func); | 246 | r |= test_memcpy(mem1, mem0, width, offset, test_func); |
| 245 | if (r && !debug) { | 247 | if (r && !debug) { |
| 246 | printf("FAILED: Got signal"); | 248 | printf("FAILED: Got signal"); |
| 249 | rc = 1; | ||
| 247 | break; | 250 | break; |
| 248 | } | 251 | } |
| 249 | 252 | ||
| 250 | r |= test_memcmp(mem1, ci1, width, offset, test_name); | 253 | r |= test_memcmp(mem1, ci1, width, offset, test_name); |
| 251 | rc |= r; | ||
| 252 | if (r && !debug) { | 254 | if (r && !debug) { |
| 253 | printf("FAILED: Wrong Data"); | 255 | printf("FAILED: Wrong Data"); |
| 256 | rc = 1; | ||
| 254 | break; | 257 | break; |
| 255 | } | 258 | } |
| 256 | } | 259 | } |
| 257 | if (!r) | 260 | |
| 261 | if (rc == 0) | ||
| 258 | printf("PASSED"); | 262 | printf("PASSED"); |
| 263 | |||
| 259 | printf("\n"); | 264 | printf("\n"); |
| 260 | 265 | ||
| 261 | munmap(ci0, bufsize); | 266 | munmap(ci0, bufsize); |
| 262 | munmap(ci1, bufsize); | 267 | munmap(ci1, bufsize); |
| 263 | free(mem0); | 268 | free(mem0); |
| 264 | free(mem1); | 269 | free(mem1); |
| 270 | close(fd); | ||
| 265 | 271 | ||
| 266 | return rc; | 272 | return rc; |
| 267 | } | 273 | } |
| 268 | 274 | ||
| 275 | static bool can_open_fb0(void) | ||
| 276 | { | ||
| 277 | int fd; | ||
| 278 | |||
| 279 | fd = open("/dev/fb0", O_RDWR); | ||
| 280 | if (fd < 0) | ||
| 281 | return false; | ||
| 282 | |||
| 283 | close(fd); | ||
| 284 | return true; | ||
| 285 | } | ||
| 286 | |||
| 269 | int test_alignment_handler_vsx_206(void) | 287 | int test_alignment_handler_vsx_206(void) |
| 270 | { | 288 | { |
| 271 | int rc = 0; | 289 | int rc = 0; |
| 272 | 290 | ||
| 291 | SKIP_IF(!can_open_fb0()); | ||
| 292 | |||
| 273 | printf("VSX: 2.06B\n"); | 293 | printf("VSX: 2.06B\n"); |
| 274 | LOAD_VSX_XFORM_TEST(lxvd2x); | 294 | LOAD_VSX_XFORM_TEST(lxvd2x); |
| 275 | LOAD_VSX_XFORM_TEST(lxvw4x); | 295 | LOAD_VSX_XFORM_TEST(lxvw4x); |
| @@ -285,6 +305,8 @@ int test_alignment_handler_vsx_207(void) | |||
| 285 | { | 305 | { |
| 286 | int rc = 0; | 306 | int rc = 0; |
| 287 | 307 | ||
| 308 | SKIP_IF(!can_open_fb0()); | ||
| 309 | |||
| 288 | printf("VSX: 2.07B\n"); | 310 | printf("VSX: 2.07B\n"); |
| 289 | LOAD_VSX_XFORM_TEST(lxsspx); | 311 | LOAD_VSX_XFORM_TEST(lxsspx); |
| 290 | LOAD_VSX_XFORM_TEST(lxsiwax); | 312 | LOAD_VSX_XFORM_TEST(lxsiwax); |
| @@ -298,6 +320,8 @@ int test_alignment_handler_vsx_300(void) | |||
| 298 | { | 320 | { |
| 299 | int rc = 0; | 321 | int rc = 0; |
| 300 | 322 | ||
| 323 | SKIP_IF(!can_open_fb0()); | ||
| 324 | |||
| 301 | SKIP_IF(!have_hwcap2(PPC_FEATURE2_ARCH_3_00)); | 325 | SKIP_IF(!have_hwcap2(PPC_FEATURE2_ARCH_3_00)); |
| 302 | printf("VSX: 3.00B\n"); | 326 | printf("VSX: 3.00B\n"); |
| 303 | LOAD_VMX_DFORM_TEST(lxsd); | 327 | LOAD_VMX_DFORM_TEST(lxsd); |
| @@ -328,6 +352,8 @@ int test_alignment_handler_integer(void) | |||
| 328 | { | 352 | { |
| 329 | int rc = 0; | 353 | int rc = 0; |
| 330 | 354 | ||
| 355 | SKIP_IF(!can_open_fb0()); | ||
| 356 | |||
| 331 | printf("Integer\n"); | 357 | printf("Integer\n"); |
| 332 | LOAD_DFORM_TEST(lbz); | 358 | LOAD_DFORM_TEST(lbz); |
| 333 | LOAD_DFORM_TEST(lbzu); | 359 | LOAD_DFORM_TEST(lbzu); |
| @@ -383,6 +409,8 @@ int test_alignment_handler_vmx(void) | |||
| 383 | { | 409 | { |
| 384 | int rc = 0; | 410 | int rc = 0; |
| 385 | 411 | ||
| 412 | SKIP_IF(!can_open_fb0()); | ||
| 413 | |||
| 386 | printf("VMX\n"); | 414 | printf("VMX\n"); |
| 387 | LOAD_VMX_XFORM_TEST(lvx); | 415 | LOAD_VMX_XFORM_TEST(lvx); |
| 388 | 416 | ||
| @@ -408,6 +436,8 @@ int test_alignment_handler_fp(void) | |||
| 408 | { | 436 | { |
| 409 | int rc = 0; | 437 | int rc = 0; |
| 410 | 438 | ||
| 439 | SKIP_IF(!can_open_fb0()); | ||
| 440 | |||
| 411 | printf("Floating point\n"); | 441 | printf("Floating point\n"); |
| 412 | LOAD_FLOAT_DFORM_TEST(lfd); | 442 | LOAD_FLOAT_DFORM_TEST(lfd); |
| 413 | LOAD_FLOAT_XFORM_TEST(lfdx); | 443 | LOAD_FLOAT_XFORM_TEST(lfdx); |
