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

Reply via email to