| diff -aruN a/memtester.c b/memtester.c |
| --- a/memtester.c 2017-04-13 12:13:53.101455795 -0700 |
| +++ b/memtester.c 2017-04-13 12:21:38.423324655 -0700 |
| @@ -100,7 +100,9 @@ |
| |
| /* Function definitions */ |
| void usage(char *me) { |
| - fprintf(stderr, "\nUsage: %s [-p physaddrbase] <mem>[B|K|M|G] [loops]\n", me); |
| + fprintf(stderr, "\nUsage: %s [-e] [-p physaddrbase] <mem>[B|K|M|G] [loops]\n", me); |
| + fprintf(stderr, "Arguments:\n"); |
| + fprintf(stderr, " -e Exit on error.\n"); |
| exit(EXIT_FAIL_NONSTARTER); |
| } |
| |
| @@ -113,6 +115,7 @@ |
| void volatile *buf, *aligned; |
| ulv *bufa, *bufb; |
| int do_mlock = 1, done_mem = 0; |
| + int exit_on_err = 0; |
| int exit_code = 0; |
| int memfd, opt, memshift; |
| size_t maxbytes = -1; /* addressable memory, in bytes */ |
| @@ -127,7 +130,7 @@ |
| pagesizemask = (ptrdiff_t) ~(pagesize - 1); |
| printf("pagesizemask is 0x%tx\n", pagesizemask); |
| |
| - while ((opt = getopt(argc, argv, "p:")) != -1) { |
| + while ((opt = getopt(argc, argv, "ep:")) != -1) { |
| switch (opt) { |
| case 'p': |
| errno = 0; |
| @@ -154,6 +157,9 @@ |
| /* okay, got address */ |
| use_phys = 1; |
| break; |
| + case 'e': |
| + exit_on_err = 1; |
| + break; |
| default: /* '?' */ |
| usage(argv[0]); /* doesn't return */ |
| } |
| @@ -322,6 +328,7 @@ |
| if (!test_stuck_address(aligned, bufsize / sizeof(ul))) { |
| printf("ok\n"); |
| } else { |
| + printf("fail\n"); |
| exit_code |= EXIT_FAIL_ADDRESSLINES; |
| } |
| for (i=0;;i++) { |
| @@ -330,12 +337,16 @@ |
| if (!tests[i].fp(bufa, bufb, count)) { |
| printf("ok\n"); |
| } else { |
| + printf("fail\n"); |
| exit_code |= EXIT_FAIL_OTHERTEST; |
| } |
| fflush(stdout); |
| } |
| printf("\n"); |
| fflush(stdout); |
| + if (exit_on_err && (exit_code != 0)) { |
| + break; |
| + } |
| } |
| if (do_mlock) munlock((void *) aligned, bufsize); |
| printf("Done.\n"); |