mremap_test currently uses a lot of fprintf() and perror()
calls. It also uses a variable "failures" to track the number
of failed table driven tests.
Use ksft_print_msg() and ksft_perror() for diagnostics.
Remove the variable "failures" and let kselftest counters
handle the final exit status. Use ksft_finished() at
the end instead of manually checking if failures > 0. Replace
if (success)
ksft_test_result_pass(...);
else
ksft_test_result_fail(...);
calls with ksft_test_result(success, ...);
Also correct the duplicated "mremap" in "mremap move within
range" and the spelling of "dontunmap".
Signed-off-by: Sarthak Sharma <[email protected]>
---
tools/testing/selftests/mm/mremap_test.c | 190 +++++++++--------------
1 file changed, 73 insertions(+), 117 deletions(-)
diff --git a/tools/testing/selftests/mm/mremap_test.c
b/tools/testing/selftests/mm/mremap_test.c
index 7cf1d235f309..e17edbc23325 100644
--- a/tools/testing/selftests/mm/mremap_test.c
+++ b/tools/testing/selftests/mm/mremap_test.c
@@ -257,10 +257,7 @@ static void mremap_expand_merge(FILE *maps_fp, unsigned
long page_size)
munmap(start, 3 * page_size);
out:
- if (success)
- ksft_test_result_pass("%s\n", test_name);
- else
- ksft_test_result_fail("%s\n", test_name);
+ ksft_test_result(success, "%s\n", test_name);
}
/*
@@ -297,10 +294,7 @@ static void mremap_expand_merge_offset(FILE *maps_fp,
unsigned long page_size)
munmap(start, 3 * page_size);
out:
- if (success)
- ksft_test_result_pass("%s\n", test_name);
- else
- ksft_test_result_fail("%s\n", test_name);
+ ksft_test_result(success, "%s\n", test_name);
}
/*
@@ -319,7 +313,7 @@ static void mremap_expand_merge_offset(FILE *maps_fp,
unsigned long page_size)
*/
static void mremap_move_within_range(unsigned int pattern_seed, char
*rand_addr)
{
- char *test_name = "mremap mremap move within range";
+ char *test_name = "mremap move within range";
void *src, *dest;
unsigned int i, success = 1;
@@ -327,7 +321,7 @@ static void mremap_move_within_range(unsigned int
pattern_seed, char *rand_addr)
void *ptr = mmap(NULL, size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
if (ptr == MAP_FAILED) {
- perror("mmap");
+ ksft_perror("mmap");
success = 0;
goto out;
}
@@ -342,9 +336,9 @@ static void mremap_move_within_range(unsigned int
pattern_seed, char *rand_addr)
dest = src - SIZE_MB(2);
void *new_ptr = mremap(src + SIZE_MB(1), SIZE_MB(1), SIZE_MB(1),
- MREMAP_MAYMOVE |
MREMAP_FIXED, dest + SIZE_MB(1));
+ MREMAP_MAYMOVE | MREMAP_FIXED, dest +
SIZE_MB(1));
if (new_ptr == MAP_FAILED) {
- perror("mremap");
+ ksft_perror("mremap");
success = 0;
goto out;
}
@@ -366,10 +360,7 @@ static void mremap_move_within_range(unsigned int
pattern_seed, char *rand_addr)
out:
munmap(ptr, size);
- if (success)
- ksft_test_result_pass("%s\n", test_name);
- else
- ksft_test_result_fail("%s\n", test_name);
+ ksft_test_result(success, "%s\n", test_name);
}
static bool is_multiple_vma_range_ok(unsigned int pattern_seed,
@@ -414,7 +405,7 @@ static void mremap_move_multiple_vmas(unsigned int
pattern_seed,
ptr = mmap(NULL, size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANON, -1, 0);
if (ptr == MAP_FAILED) {
- perror("mmap");
+ ksft_perror("mmap");
success = false;
goto out;
}
@@ -422,12 +413,12 @@ static void mremap_move_multiple_vmas(unsigned int
pattern_seed,
tgt_ptr = mmap(NULL, 2 * size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANON, -1, 0);
if (tgt_ptr == MAP_FAILED) {
- perror("mmap");
+ ksft_perror("mmap");
success = false;
goto out;
}
if (munmap(tgt_ptr, 2 * size)) {
- perror("munmap");
+ ksft_perror("munmap");
success = false;
goto out_unmap;
}
@@ -445,7 +436,7 @@ static void mremap_move_multiple_vmas(unsigned int
pattern_seed,
continue;
if (munmap(&ptr[i * page_size], page_size)) {
- perror("munmap");
+ ksft_perror("munmap");
success = false;
goto out_unmap;
}
@@ -465,7 +456,7 @@ static void mremap_move_multiple_vmas(unsigned int
pattern_seed,
/* First, just move the whole thing. */
if (mremap(ptr, size, size, mremap_flags, tgt_ptr) == MAP_FAILED) {
- perror("mremap");
+ ksft_perror("mremap");
success = false;
goto out_unmap;
}
@@ -478,7 +469,7 @@ static void mremap_move_multiple_vmas(unsigned int
pattern_seed,
/* Move next to itself. */
if (mremap(tgt_ptr, size, size, mremap_flags,
&tgt_ptr[size]) == MAP_FAILED) {
- perror("mremap");
+ ksft_perror("mremap");
success = false;
goto out_unmap;
}
@@ -491,14 +482,14 @@ static void mremap_move_multiple_vmas(unsigned int
pattern_seed,
/* Map a range to overwrite. */
if (mmap(tgt_ptr, size, PROT_NONE,
MAP_PRIVATE | MAP_ANON | MAP_FIXED, -1, 0) == MAP_FAILED) {
- perror("mmap tgt");
+ ksft_perror("mmap tgt");
success = false;
goto out_unmap;
}
/* Move and overwrite. */
if (mremap(&tgt_ptr[size], size, size,
mremap_flags, tgt_ptr) == MAP_FAILED) {
- perror("mremap");
+ ksft_perror("mremap");
success = false;
goto out_unmap;
}
@@ -511,14 +502,8 @@ static void mremap_move_multiple_vmas(unsigned int
pattern_seed,
out_unmap:
munmap(tgt_ptr, 2 * size);
munmap(ptr, size);
-
out:
- if (success)
- ksft_test_result_pass("%s%s\n", test_name,
- dont_unmap ? " [dontunnmap]" : "");
- else
- ksft_test_result_fail("%s%s\n", test_name,
- dont_unmap ? " [dontunnmap]" : "");
+ ksft_test_result(success, "%s%s\n", test_name, dont_unmap ? "
[dontunmap]" : "");
}
static void mremap_shrink_multiple_vmas(unsigned long page_size,
@@ -534,7 +519,7 @@ static void mremap_shrink_multiple_vmas(unsigned long
page_size,
ptr = mmap(NULL, size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANON, -1, 0);
if (ptr == MAP_FAILED) {
- perror("mmap");
+ ksft_perror("mmap");
success = false;
goto out;
}
@@ -542,12 +527,12 @@ static void mremap_shrink_multiple_vmas(unsigned long
page_size,
tgt_ptr = mmap(NULL, size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANON, -1, 0);
if (tgt_ptr == MAP_FAILED) {
- perror("mmap");
+ ksft_perror("mmap");
success = false;
goto out;
}
if (munmap(tgt_ptr, size)) {
- perror("munmap");
+ ksft_perror("munmap");
success = false;
goto out_unmap;
}
@@ -561,7 +546,7 @@ static void mremap_shrink_multiple_vmas(unsigned long
page_size,
*/
for (i = 1; i < 10; i += 2) {
if (munmap(&ptr[i * page_size], page_size)) {
- perror("munmap");
+ ksft_perror("munmap");
success = false;
goto out_unmap;
}
@@ -581,7 +566,7 @@ static void mremap_shrink_multiple_vmas(unsigned long
page_size,
tgt_ptr);
if (res == MAP_FAILED) {
- perror("mremap");
+ ksft_perror("mremap");
success = false;
goto out_unmap;
}
@@ -590,12 +575,7 @@ static void mremap_shrink_multiple_vmas(unsigned long
page_size,
munmap(tgt_ptr, size);
munmap(ptr, size);
out:
- if (success)
- ksft_test_result_pass("%s%s\n", test_name,
- inplace ? " [inplace]" : "");
- else
- ksft_test_result_fail("%s%s\n", test_name,
- inplace ? " [inplace]" : "");
+ ksft_test_result(success, "%s%s\n", test_name, inplace ? " [inplace]" :
"");
}
static void mremap_move_multiple_vmas_split(unsigned int pattern_seed,
@@ -615,7 +595,7 @@ static void mremap_move_multiple_vmas_split(unsigned int
pattern_seed,
ptr = mmap(NULL, size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANON, -1, 0);
if (ptr == MAP_FAILED) {
- perror("mmap");
+ ksft_perror("mmap");
success = false;
goto out;
}
@@ -623,12 +603,12 @@ static void mremap_move_multiple_vmas_split(unsigned int
pattern_seed,
tgt_ptr = mmap(NULL, size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANON, -1, 0);
if (tgt_ptr == MAP_FAILED) {
- perror("mmap");
+ ksft_perror("mmap");
success = false;
goto out;
}
if (munmap(tgt_ptr, size)) {
- perror("munmap");
+ ksft_perror("munmap");
success = false;
goto out_unmap;
}
@@ -642,7 +622,7 @@ static void mremap_move_multiple_vmas_split(unsigned int
pattern_seed,
* 0 1 2 3 4 5 6 7 8 9 pattern offset
*/
if (munmap(&ptr[5 * page_size], page_size)) {
- perror("munmap");
+ ksft_perror("munmap");
success = false;
goto out_unmap;
}
@@ -678,7 +658,7 @@ static void mremap_move_multiple_vmas_split(unsigned int
pattern_seed,
*/
if (mremap(&ptr[2 * page_size], size - 3 * page_size, size - 3 *
page_size,
mremap_flags, tgt_ptr) == MAP_FAILED) {
- perror("mremap");
+ ksft_perror("mremap");
success = false;
goto out_unmap;
}
@@ -711,12 +691,7 @@ static void mremap_move_multiple_vmas_split(unsigned int
pattern_seed,
munmap(tgt_ptr, size);
munmap(ptr, size);
out:
- if (success)
- ksft_test_result_pass("%s%s\n", test_name,
- dont_unmap ? " [dontunnmap]" : "");
- else
- ksft_test_result_fail("%s%s\n", test_name,
- dont_unmap ? " [dontunnmap]" : "");
+ ksft_test_result(success, "%s%s\n", test_name, dont_unmap ? "
[dontunmap]" : "");
}
#ifdef __NR_userfaultfd
@@ -737,15 +712,15 @@ static void mremap_move_multi_invalid_vmas(FILE *maps_fp,
uffd = syscall(__NR_userfaultfd, O_NONBLOCK);
if (uffd == -1) {
if (errno == EPERM) {
- ksft_test_result_skip("%s - missing uffd", test_name);
+ ksft_test_result_skip("%s - missing uffd\n", test_name);
return;
}
- perror("userfaultfd");
+ ksft_perror("userfaultfd");
success = false;
goto out;
}
if (ioctl(uffd, UFFDIO_API, &api)) {
- perror("ioctl UFFDIO_API");
+ ksft_perror("ioctl UFFDIO_API");
success = false;
goto out_close_uffd;
}
@@ -753,19 +728,19 @@ static void mremap_move_multi_invalid_vmas(FILE *maps_fp,
ptr = mmap(NULL, size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANON, -1, 0);
if (ptr == MAP_FAILED) {
- perror("mmap");
+ ksft_perror("mmap");
success = false;
goto out_close_uffd;
}
tgt_ptr = mmap(NULL, size, PROT_NONE, MAP_PRIVATE | MAP_ANON, -1, 0);
if (tgt_ptr == MAP_FAILED) {
- perror("mmap");
+ ksft_perror("mmap");
success = false;
goto out_close_uffd;
}
if (munmap(tgt_ptr, size)) {
- perror("munmap");
+ ksft_perror("munmap");
success = false;
goto out_unmap;
}
@@ -791,12 +766,12 @@ static void mremap_move_multi_invalid_vmas(FILE *maps_fp,
};
if (ioctl(uffd, UFFDIO_REGISTER, ®) == -1) {
- perror("ioctl UFFDIO_REGISTER");
+ ksft_perror("ioctl UFFDIO_REGISTER");
success = false;
goto out_unmap;
}
if (munmap(unmap_ptr, page_size)) {
- perror("munmap");
+ ksft_perror("munmap");
success = false;
goto out_unmap;
}
@@ -810,18 +785,17 @@ static void mremap_move_multi_invalid_vmas(FILE *maps_fp,
*/
res = mremap(ptr, size, size, MREMAP_MAYMOVE | MREMAP_FIXED, tgt_ptr);
if (res != MAP_FAILED) {
- fprintf(stderr, "mremap() succeeded for multi VMA uffd
armed\n");
+ ksft_print_msg("mremap() succeeded for multi VMA uffd armed\n");
success = false;
goto out_unmap;
}
if (errno != EFAULT) {
- perror("mremap() unexpected error");
+ ksft_perror("mremap() unexpected error");
success = false;
goto out_unmap;
}
if (is_ptr_mapped(maps_fp, tgt_ptr, page_size)) {
- fprintf(stderr,
- "Invalid uffd-armed VMA at start of multi range
moved\n");
+ ksft_print_msg("Invalid uffd-armed VMA at start of multi range
moved\n");
success = false;
goto out_unmap;
}
@@ -833,7 +807,7 @@ static void mremap_move_multi_invalid_vmas(FILE *maps_fp,
res = mremap(ptr, page_size, page_size,
MREMAP_MAYMOVE | MREMAP_FIXED, tgt_ptr);
if (res == MAP_FAILED) {
- perror("mremap single invalid-multi VMA");
+ ksft_perror("mremap single invalid-multi VMA");
success = false;
goto out_unmap;
}
@@ -843,14 +817,14 @@ static void mremap_move_multi_invalid_vmas(FILE *maps_fp,
* move valid) VMA at the start of ptr range.
*/
if (munmap(tgt_ptr, page_size)) {
- perror("munmap");
+ ksft_perror("munmap");
success = false;
goto out_unmap;
}
res = mmap(ptr, page_size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANON | MAP_FIXED, -1, 0);
if (res == MAP_FAILED) {
- perror("mmap");
+ ksft_perror("mmap");
success = false;
goto out_unmap;
}
@@ -861,17 +835,17 @@ static void mremap_move_multi_invalid_vmas(FILE *maps_fp,
*/
res = mremap(ptr, size, size, MREMAP_MAYMOVE | MREMAP_FIXED, tgt_ptr);
if (res != MAP_FAILED) {
- fprintf(stderr, "mremap() succeeded for multi VMA uffd
armed\n");
+ ksft_print_msg("mremap() succeeded for multi VMA uffd armed\n");
success = false;
goto out_unmap;
}
if (errno != EFAULT) {
- perror("mremap() unexpected error");
+ ksft_perror("mremap() unexpected error");
success = false;
goto out_unmap;
}
if (!is_ptr_mapped(maps_fp, tgt_ptr, page_size)) {
- fprintf(stderr, "Valid VMA not moved\n");
+ ksft_print_msg("Valid VMA not moved\n");
success = false;
goto out_unmap;
}
@@ -882,12 +856,12 @@ static void mremap_move_multi_invalid_vmas(FILE *maps_fp,
* multi-move VMAs.
*/
if (munmap(tgt_ptr, page_size)) {
- perror("munmap");
+ ksft_perror("munmap");
success = false;
goto out_unmap;
}
if (munmap(ptr, size - 2 * page_size)) {
- perror("munmap");
+ ksft_perror("munmap");
success = false;
goto out_unmap;
}
@@ -896,7 +870,7 @@ static void mremap_move_multi_invalid_vmas(FILE *maps_fp,
PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANON | MAP_FIXED, -1, 0);
if (res == MAP_FAILED) {
- perror("mmap");
+ ksft_perror("mmap");
success = false;
goto out_unmap;
}
@@ -908,12 +882,12 @@ static void mremap_move_multi_invalid_vmas(FILE *maps_fp,
*/
res = mremap(ptr, size, size, MREMAP_MAYMOVE | MREMAP_FIXED, tgt_ptr);
if (res != MAP_FAILED) {
- fprintf(stderr, "mremap() succeeded for multi VMA uffd
armed\n");
+ ksft_print_msg("mremap() succeeded for multi VMA uffd armed\n");
success = false;
goto out_unmap;
}
if (errno != EFAULT) {
- perror("mremap() unexpected error");
+ ksft_perror("mremap() unexpected error");
success = false;
goto out_unmap;
}
@@ -923,11 +897,11 @@ static void mremap_move_multi_invalid_vmas(FILE *maps_fp,
&tgt_ptr[i * page_size], page_size);
if (i < 8 && !is_mapped) {
- fprintf(stderr, "Valid VMA not moved at %d\n", i);
+ ksft_print_msg("Valid VMA not moved at %d\n", i);
success = false;
goto out_unmap;
} else if (i == 8 && is_mapped) {
- fprintf(stderr, "Invalid VMA moved at %d\n", i);
+ ksft_print_msg("Invalid VMA moved at %d\n", i);
success = false;
goto out_unmap;
}
@@ -939,17 +913,14 @@ static void mremap_move_multi_invalid_vmas(FILE *maps_fp,
out_close_uffd:
close(uffd);
out:
- if (success)
- ksft_test_result_pass("%s\n", test_name);
- else
- ksft_test_result_fail("%s\n", test_name);
+ ksft_test_result(success, "%s\n", test_name);
}
#else
static void mremap_move_multi_invalid_vmas(FILE *maps_fp, unsigned long
page_size)
{
char *test_name = "mremap move multiple invalid vmas";
- ksft_test_result_skip("%s - missing uffd", test_name);
+ ksft_test_result_skip("%s - missing uffd\n", test_name);
}
#endif /* __NR_userfaultfd */
@@ -1020,7 +991,7 @@ static long long remap_region(struct config c, unsigned
int threshold_mb,
clock_gettime(CLOCK_MONOTONIC, &t_start);
dest_addr = mremap(src_addr, c.region_size, c.region_size,
- MREMAP_MAYMOVE|MREMAP_FIXED, (char *)
addr);
+ MREMAP_MAYMOVE | MREMAP_FIXED, (char *)addr);
clock_gettime(CLOCK_MONOTONIC, &t_end);
if (dest_addr == MAP_FAILED) {
@@ -1106,9 +1077,9 @@ static void mremap_move_1mb_from_start(unsigned int
pattern_seed,
munmap(dest, SIZE_MB(1));
void *new_ptr = mremap(src + SIZE_MB(1), SIZE_MB(1), SIZE_MB(1),
- MREMAP_MAYMOVE |
MREMAP_FIXED, dest + SIZE_MB(1));
+ MREMAP_MAYMOVE | MREMAP_FIXED, dest +
SIZE_MB(1));
if (new_ptr == MAP_FAILED) {
- perror("mremap");
+ ksft_perror("mremap");
success = 0;
goto out;
}
@@ -1134,13 +1105,10 @@ static void mremap_move_1mb_from_start(unsigned int
pattern_seed,
if (dest)
munmap(dest, c.region_size);
- if (success)
- ksft_test_result_pass("%s\n", test_name);
- else
- ksft_test_result_fail("%s\n", test_name);
+ ksft_test_result(success, "%s\n", test_name);
}
-static void run_mremap_test_case(struct test test_case, int *failures,
+static void run_mremap_test_case(struct test test_case,
unsigned int threshold_mb,
char *rand_addr)
{
@@ -1148,27 +1116,22 @@ static void run_mremap_test_case(struct test test_case,
int *failures,
rand_addr);
if (remap_time < 0) {
- if (test_case.expect_failure) {
- ksft_print_msg("%s: expected mremap failure\n",
- test_case.name);
- ksft_test_result_xfail("%s\n", test_case.name);
- } else {
+ if (test_case.expect_failure)
+ ksft_test_result_xfail("%s: expected mremap failure\n",
+ test_case.name);
+ else
ksft_test_result_fail("%s\n", test_case.name);
- *failures += 1;
- }
} else {
/*
* Comparing mremap time is only applicable if entire region
* was faulted in.
*/
if (threshold_mb == VALIDATION_NO_THRESHOLD ||
- test_case.config.region_size <= threshold_mb * _1MB) {
- ksft_print_msg("%s: mremap time: %12lldns\n",
- test_case.name, remap_time);
- ksft_test_result_pass("%s\n", test_case.name);
- } else {
+ test_case.config.region_size <= threshold_mb * _1MB)
+ ksft_test_result_pass("%s: mremap time: %12lldns\n",
+ test_case.name, remap_time);
+ else
ksft_test_result_pass("%s\n", test_case.name);
- }
}
}
@@ -1176,7 +1139,6 @@ static void run_mremap_test_case(struct test test_case,
int *failures,
#define MAX_PERF_TEST 3
int main(void)
{
- int failures = 0;
unsigned int i;
int run_perf_tests;
unsigned int threshold_mb = VALIDATION_DEFAULT_THRESHOLD;
@@ -1222,10 +1184,8 @@ int main(void)
rand_addr = (char *)mmap(NULL, rand_size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
- if (rand_addr == MAP_FAILED) {
- perror("mmap");
- ksft_exit_fail_msg("cannot mmap rand_addr\n");
- }
+ if (rand_addr == MAP_FAILED)
+ ksft_exit_fail_perror("cannot mmap rand_addr");
/* fill stream of random bytes */
srand(pattern_seed);
@@ -1302,8 +1262,7 @@ int main(void)
ARRAY_SIZE(perf_test_cases) : 0) + num_expand_tests +
num_misc_tests);
for (i = 0; i < ARRAY_SIZE(test_cases); i++)
- run_mremap_test_case(test_cases[i], &failures, threshold_mb,
- rand_addr);
+ run_mremap_test_case(test_cases[i], threshold_mb, rand_addr);
maps_fp = fopen("/proc/self/maps", "r");
@@ -1328,18 +1287,15 @@ int main(void)
fclose(maps_fp);
if (run_perf_tests) {
- ksft_print_msg("\n%s\n",
+ ksft_print_msg("%s\n",
"mremap HAVE_MOVE_PMD/PUD optimization time comparison for 1GB
region:");
for (i = 0; i < ARRAY_SIZE(perf_test_cases); i++)
- run_mremap_test_case(perf_test_cases[i], &failures,
+ run_mremap_test_case(perf_test_cases[i],
threshold_mb,
rand_addr);
}
munmap(rand_addr, rand_size);
- if (failures > 0)
- ksft_exit_fail();
- else
- ksft_exit_pass();
+ ksft_finished();
}
--
2.53.0