aboutsummaryrefslogtreecommitdiffstats
path: root/tools/testing
diff options
context:
space:
mode:
authorMichael Ellerman <mpe@ellerman.id.au>2018-07-31 08:08:41 -0400
committerMichael Ellerman <mpe@ellerman.id.au>2018-08-07 10:32:28 -0400
commitedba42cd14dbb0cc8b48cf786b006ac5da4cd9a7 (patch)
treecca80de4556a5cae0cfd1cee24e1a0afab770272 /tools/testing
parent78ee9946371f5848ddfc88ab1a43867df8f17d83 (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.c40
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 */
192int do_test(char *test_name, void (*test_func)(char *, char *)) 193int 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
275static 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
269int test_alignment_handler_vsx_206(void) 287int 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);