There are some problem in ksm tests. 1. We should break the test when checking is failure. 2. The condition "new_num < old_num * 3" seems uncomfortable, i think it should be "new_num < old_num + 3" 3. After stopping ksm(echo 2 > /sys/kernel/mm/ksm/run), the ksmd will stop scaning pages, so looping in "new_num < old_num * 3" is wrong.
Signed-off-by: Bian Naimeng <[email protected]> --- testcases/kernel/mem/include/mem.h | 2 +- testcases/kernel/mem/lib/mem.c | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/testcases/kernel/mem/include/mem.h b/testcases/kernel/mem/include/mem.h index 778d403..b640a63 100644 --- a/testcases/kernel/mem/include/mem.h +++ b/testcases/kernel/mem/include/mem.h @@ -42,7 +42,7 @@ void check(char *path, long int value); void verify(char value, int proc, int start, int end, int start2, int end2); void group_check(int run, int pages_shared, int pages_sharing, int pages_volatile, int pages_unshared, int sleep_millisecs, - int pages_to_scan); + int pages_to_scan, int scans); void create_same_memory(int size, int num, int unit); void check_ksm_options(int *size, int *num, int *unit); void write_cpusets(void); diff --git a/testcases/kernel/mem/lib/mem.c b/testcases/kernel/mem/lib/mem.c index 12e61e9..db1a7dd 100644 --- a/testcases/kernel/mem/lib/mem.c +++ b/testcases/kernel/mem/lib/mem.c @@ -284,7 +284,7 @@ void check(char *path, long int value) tst_resm(TINFO, "%s is %ld.", path, atol(buf)); if (atol(buf) != value) - tst_resm(TFAIL, "%s is not %ld.", path, value); + tst_brkm(TFAIL, tst_exit, "%s is not %ld.", path, value); } void verify(char value, int proc, int start, int end, int start2, int end2) @@ -312,7 +312,8 @@ void verify(char value, int proc, int start, int end, int start2, int end2) void group_check(int run, int pages_shared, int pages_sharing, int pages_volatile, int pages_unshared, - int sleep_millisecs, int pages_to_scan) + int sleep_millisecs, int pages_to_scan, + int scans) { int fd; char buf[BUFSIZ]; @@ -332,7 +333,7 @@ void group_check(int run, int pages_shared, int pages_sharing, old_num = new_num = atoi(buf); if (lseek(fd, 0, SEEK_SET) == -1) tst_brkm(TBROK|TERRNO, cleanup, "lseek"); - while (new_num < old_num * 3) { + while (new_num < old_num + scans) { sleep(1); if (read(fd, buf, BUFSIZ) < 0) tst_brkm(TBROK|TERRNO, cleanup, "read"); @@ -587,7 +588,7 @@ void create_same_memory(int size, int num, int unit) if (kill(child[k], SIGCONT) == -1) tst_brkm(TBROK|TERRNO, cleanup, "kill child[%d]", k); } - group_check(1, 2, size * num * 256 - 2, 0, 0, 0, size * 256 * num); + group_check(1, 2, size * num * 256 - 2, 0, 0, 0, size * 256 * num, 3); tst_resm(TINFO, "wait for child 1 to stop."); if (waitpid(child[1], &status, WUNTRACED) == -1) @@ -599,7 +600,7 @@ void create_same_memory(int size, int num, int unit) tst_resm(TINFO, "resume child 1."); if (kill(child[1], SIGCONT) == -1) tst_brkm(TBROK|TERRNO, cleanup, "kill"); - group_check(1, 3, size * num * 256 - 3, 0, 0, 0, size * 256 * num); + group_check(1, 3, size * num * 256 - 3, 0, 0, 0, size * 256 * num, 3); tst_resm(TINFO, "wait for child 1 to stop."); if (waitpid(child[1], &status, WUNTRACED) == -1) @@ -613,7 +614,7 @@ void create_same_memory(int size, int num, int unit) if (kill(child[k], SIGCONT) == -1) tst_brkm(TBROK|TERRNO, cleanup, "kill child[%d]", k); } - group_check(1, 1, size * num * 256 - 1, 0, 0, 0, size * 256 * num); + group_check(1, 1, size * num * 256 - 1, 0, 0, 0, size * 256 * num, 3); tst_resm(TINFO, "wait for all children to stop."); for (k = 0; k < num; k++) { @@ -627,7 +628,7 @@ void create_same_memory(int size, int num, int unit) tst_resm(TINFO, "resume child 1."); if (kill(child[1], SIGCONT) == -1) tst_brkm(TBROK|TERRNO, cleanup, "kill"); - group_check(1, 1, size * num * 256 - 2, 0, 1, 0, size * 256 * num); + group_check(1, 1, size * num * 256 - 2, 0, 1, 0, size * 256 * num, 3); tst_resm(TINFO, "wait for child 1 to stop."); if (waitpid(child[1], &status, WUNTRACED) == -1) @@ -647,7 +648,7 @@ void create_same_memory(int size, int num, int unit) tst_brkm(TBROK|TERRNO, cleanup, "open"); if (write(fd, "2", 1) != 1) tst_brkm(TBROK|TERRNO, cleanup, "write"); - group_check(2, 0, 0, 0, 0, 0, size * 256 * num); + group_check(2, 0, 0, 0, 0, 0, size * 256 * num, 0); tst_resm(TINFO, "wait for all children to stop."); for (k = 0; k < num; k++) { @@ -668,7 +669,7 @@ void create_same_memory(int size, int num, int unit) if (write(fd, "0", 1) != 1) tst_brkm(TBROK|TERRNO, cleanup, "write"); close(fd); - group_check(0, 0, 0, 0, 0, 0, size * 256 * num); + group_check(0, 0, 0, 0, 0, 0, size * 256 * num, 0); while (waitpid(-1, &status, WUNTRACED | WCONTINUED) > 0) if (WEXITSTATUS(status) != 0) tst_resm(TFAIL, "child exit status is %d", -- 1.7.1 ------------------------------------------------------------------------------ Create and publish websites with WebMatrix Use the most popular FREE web apps or write code yourself; WebMatrix provides all the features you need to develop and publish your website. http://p.sf.net/sfu/ms-webmatrix-sf _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
