public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
* [LTP] [PATCH v2 0/2] updated create_same_memory() inside lib/mem.c
@ 2013-01-04  6:12 Zhouping Liu
  2013-01-04  6:12 ` [LTP] [PATCH v2 1/2] mm/lib: rewrote create_same_memory() Zhouping Liu
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Zhouping Liu @ 2013-01-04  6:12 UTC (permalink / raw)
  To: LTP List

changed in v2:
 - modified '_function_name' as 'function_name'
 - added 'static' key word for internal function
 - updated a little commit log

Zhouping Liu (2):
  mm/lib: rewrote create_same_memory()
  mm/include: removed the global var 'memory'

 testcases/kernel/mem/include/_private.h |   2 +-
 testcases/kernel/mem/include/mem.h      |   5 -
 testcases/kernel/mem/lib/mem.c          | 425 +++++++++++++-------------------
 3 files changed, 170 insertions(+), 262 deletions(-)

-- 
1.7.11.7


------------------------------------------------------------------------------
Master HTML5, CSS3, ASP.NET, MVC, AJAX, Knockout.js, Web API and
much more. Get web development skills now with LearnDevNow -
350+ hours of step-by-step video tutorials by Microsoft MVPs and experts.
SALE $99.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122812
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [LTP] [PATCH v2 1/2] mm/lib: rewrote create_same_memory()
  2013-01-04  6:12 [LTP] [PATCH v2 0/2] updated create_same_memory() inside lib/mem.c Zhouping Liu
@ 2013-01-04  6:12 ` Zhouping Liu
  2013-01-08  5:57   ` Wanlong Gao
  2013-01-14  1:45   ` Wanlong Gao
  2013-01-04  6:12 ` [LTP] [PATCH v3 2/2] mm/include: removed the global var 'memory' Zhouping Liu
  2013-01-04  7:06 ` [LTP] [PATCH v2 0/2] updated create_same_memory() inside lib/mem.c Caspar Zhang
  2 siblings, 2 replies; 11+ messages in thread
From: Zhouping Liu @ 2013-01-04  6:12 UTC (permalink / raw)
  To: LTP List

create_same_memory() was too large and contained lots of duplicated codes,
and it's a little hard-coding, so that it's not easy to read and
extend it for new case.

I splited it for five sub-functions:

  ksm_child_memset();
  create_ksm_child();
  stop_ksm_children();
  resume_ksm_children();
  create_smae_memory();

Also I intruduced a data struct to control the mergeable data:

  struct ksm_merge_data {
        char data;
        int mergeable_size;
  };

Signed-off-by: Zhouping Liu <zliu@redhat.com>
---
 testcases/kernel/mem/include/_private.h |   2 +-
 testcases/kernel/mem/lib/mem.c          | 425 +++++++++++++-------------------
 2 files changed, 170 insertions(+), 257 deletions(-)

diff --git a/testcases/kernel/mem/include/_private.h b/testcases/kernel/mem/include/_private.h
index 71164f5..43eda0e 100644
--- a/testcases/kernel/mem/include/_private.h
+++ b/testcases/kernel/mem/include/_private.h
@@ -11,7 +11,7 @@ static void _check(char *path, long int value);
 static void _group_check(int run, int pages_shared, int pages_sharing,
 		int pages_volatile, int pages_unshared,
 		int sleep_millisecs, int pages_to_scan);
-static void _verify(char value, int proc, int start, int end,
+static void _verify(char **memory_new, char value, int proc, int start, int end,
 		int start2, int end2);
 
 /* cpuset/memcg */
diff --git a/testcases/kernel/mem/lib/mem.c b/testcases/kernel/mem/lib/mem.c
index f095fe1..87d47a8 100644
--- a/testcases/kernel/mem/lib/mem.c
+++ b/testcases/kernel/mem/lib/mem.c
@@ -200,8 +200,8 @@ static void _group_check(int run, int pages_shared, int pages_sharing,
 	_check("pages_to_scan", pages_to_scan);
 }
 
-static void _verify(char value, int proc, int start, int end,
-		    int start2, int end2)
+static void _verify(char **memory_new, char value, int proc,
+		    int start, int end, int start2, int end2)
 {
 	int i, j;
 	void *s = NULL;
@@ -212,14 +212,14 @@ static void _verify(char value, int proc, int start, int end,
 
 	tst_resm(TINFO, "child %d verifies memory content.", proc);
 	memset(s, value, (end - start) * (end2 - start2));
-	if (memcmp(memory[proc][start], s, (end - start) * (end2 - start2))
+	if (memcmp(memory_new[start], s, (end - start) * (end2 - start2))
 	    != 0)
 		for (j = start; j < end; j++)
 			for (i = start2; i < end2; i++)
-				if (memory[proc][j][i] != value)
+				if (memory_new[j][i] != value)
 					tst_resm(TFAIL, "child %d has %c at "
 						 "%d,%d,%d.",
-						 proc, memory[proc][j][i], proc,
+						 proc, memory_new[j][i], proc,
 						 j, i);
 	free(s);
 }
@@ -235,299 +235,212 @@ void write_memcg(void)
 	write_file(MEMCG_PATH_NEW "/tasks", buf);
 }
 
-void create_same_memory(int size, int num, int unit)
+static struct ksm_merge_data {
+	char data;
+	int mergeable_size;
+};
+
+static void ksm_child_memset(int child_num, int size, int total_unit,
+		 struct ksm_merge_data ksm_merge_data, char **memory_new)
 {
-	char buf[BUFSIZ];
-	int i, j, k;
-	int status;
-	int *child;
-	long ps, pages;
+	int i, j;
+	int unit = size / total_unit;
 
-	ps = sysconf(_SC_PAGE_SIZE);
-	pages = 1024 * 1024 / ps;
+	tst_resm(TINFO, "child %d continues...", child_num);
 
-	child = malloc(num);
-	if (child == NULL)
-		tst_brkm(TBROK | TERRNO, cleanup, "malloc");
+	if (ksm_merge_data.mergeable_size == size * MB) {
+		tst_resm(TINFO, "child %d allocates %d MB filled with '%c'",
+			child_num, size, ksm_merge_data.data);
 
-	memory = malloc(num * sizeof(**memory));
-	if (memory == NULL)
-		tst_brkm(TBROK | TERRNO, cleanup, "malloc");
+	} else {
+		tst_resm(TINFO, "child %d allocates %d MB filled with '%c'"
+				" except one page with 'e'",
+				child_num, size, ksm_merge_data.data);
+	}
 
-	/* Don't call cleanup in those children. Instead, do a cleanup from the
-	   parent after fetched children's status. */
-	switch (child[0] = fork()) {
-	case -1:
-		tst_brkm(TBROK | TERRNO, cleanup, "fork");
-	case 0:
-		tst_resm(TINFO, "child 0 stops.");
-		if (raise(SIGSTOP) == -1)
-			tst_brkm(TBROK | TERRNO, tst_exit, "kill");
-
-		tst_resm(TINFO, "child 0 continues...");
-		tst_resm(TINFO, "child 0 allocates %d MB filled with 'c'.",
-			 size);
-		memory[0] = malloc(size / unit * sizeof(*memory));
-		if (memory[0] == NULL)
-			tst_brkm(TBROK | TERRNO, tst_exit, "malloc");
-		for (j = 0; j * unit < size; j++) {
-			memory[0][j] = mmap(NULL, unit * MB,
-					    PROT_READ | PROT_WRITE,
-					    MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
-			if (memory[0][j] == MAP_FAILED)
-				tst_brkm(TBROK | TERRNO, tst_exit, "mmap");
+	for (j = 0; j < total_unit; j++) {
+		for (i = 0; i < unit * MB; i++)
+			memory_new[j][i] = ksm_merge_data.data;
+	}
+
+	/* if it contains unshared page, then set 'e' char
+	 * at the end of the last page
+	 */
+	if (ksm_merge_data.mergeable_size < size * MB)
+		memory_new[j-1][i-1] = 'e';
+}
 
+static void create_ksm_child(int child_num, int size, int unit,
+		       struct ksm_merge_data *ksm_merge_data)
+{
+	int j, total_unit;
+	char **memory_new;
+
+	/* The total units in all */
+	total_unit = size / unit;
+
+	/* Apply for the space for memory_new */
+	memory_new = (char **)malloc(total_unit * sizeof(char *));
+	for (j = 0; j < total_unit; j++) {
+		memory_new[j] = mmap(NULL, unit * MB, PROT_READ|PROT_WRITE,
+			MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
+		if (memory_new[j] == MAP_FAILED)
+			tst_brkm(TBROK|TERRNO, tst_exit, "mmap");
 #ifdef HAVE_MADV_MERGEABLE
-			if (madvise(memory[0][j], unit * MB, MADV_MERGEABLE)
-			    == -1)
-				tst_brkm(TBROK | TERRNO, tst_exit, "madvise");
+		if (madvise(memory_new[j], unit * MB, MADV_MERGEABLE) == -1)
+			tst_brkm(TBROK|TERRNO, tst_exit, "madvise");
 #endif
-			for (i = 0; i < unit * MB; i++)
-				memory[0][j][i] = 'c';
-		}
-		tst_resm(TINFO, "child 0 stops.");
+	}
+
+	tst_resm(TINFO, "child %d stops.", child_num);
+	if (raise(SIGSTOP) == -1)
+		tst_brkm(TBROK|TERRNO, tst_exit, "kill");
+	fflush(stdout);
+
+	for (j = 0; j < 4; j++) {
+
+		ksm_child_memset(child_num, size, total_unit,
+				  ksm_merge_data[j], memory_new);
+
+		fflush(stdout);
+
+		tst_resm(TINFO, "child %d stops.", child_num);
 		if (raise(SIGSTOP) == -1)
-			tst_brkm(TBROK | TERRNO, tst_exit, "kill");
-
-		tst_resm(TINFO, "child 0 continues...");
-		_verify('c', 0, 0, size / unit, 0, unit * MB);
-		tst_resm(TINFO, "child 0 changes memory content to 'd'.");
-		for (j = 0; j < size / unit; j++) {
-			for (i = 0; i < unit * MB; i++)
-				memory[0][j][i] = 'd';
+			tst_brkm(TBROK|TERRNO, tst_exit, "kill");
+
+		if (ksm_merge_data[j].mergeable_size < size * MB) {
+			_verify(memory_new, 'e', child_num, total_unit - 1,
+				total_unit, unit * MB - 1, unit * MB);
+			_verify(memory_new, ksm_merge_data[j].data, child_num,
+				0, total_unit, 0, unit * MB - 1);
+		} else {
+			_verify(memory_new, ksm_merge_data[j].data, child_num,
+				0, total_unit, 0, unit * MB);
 		}
-		/* Unmerge. */
-		tst_resm(TINFO, "child 0 stops.");
-		if (raise(SIGSTOP) == -1)
-			tst_brkm(TBROK | TERRNO, tst_exit, "kill");
+	}
 
-		tst_resm(TINFO, "child 0 continues...");
-		_verify('d', 0, 0, size / unit, 0, unit * MB);
-		/* Stop. */
-		tst_resm(TINFO, "child 0 stops.");
-		if (raise(SIGSTOP) == -1)
-			tst_brkm(TBROK | TERRNO, tst_exit, "kill");
-		tst_resm(TINFO, "child 0 continues...");
-		exit(0);
+	tst_resm(TINFO, "child %d finished.", child_num);
+}
+
+static void stop_ksm_children(int *child, int num)
+{
+	int k, status;
+
+	tst_resm(TINFO, "wait for all children to stop.");
+	for (k = 0; k < num; k++) {
+		if (waitpid(child[k], &status, WUNTRACED) == -1)
+			tst_brkm(TBROK|TERRNO, cleanup, "waitpid");
+		if (!WIFSTOPPED(status))
+			tst_brkm(TBROK, cleanup, "child %d was not stopped", k);
 	}
-	switch (child[1] = fork()) {
-	case -1:
-		tst_brkm(TBROK | TERRNO, cleanup, "fork");
-	case 0:
-		tst_resm(TINFO, "child 1 stops.");
-		if (raise(SIGSTOP) == -1)
-			tst_brkm(TBROK | TERRNO, tst_exit, "kill");
-		tst_resm(TINFO, "child 1 continues...");
-		tst_resm(TINFO, "child 1 allocates %d MB filled with 'a'.",
-			 size);
-		memory[1] = malloc(size / unit * sizeof(*memory));
-		if (memory[1] == NULL)
-			tst_brkm(TBROK | TERRNO, tst_exit, "malloc");
-		for (j = 0; j < size / unit; j++) {
-			memory[1][j] = mmap(NULL, unit * MB,
-					    PROT_READ | PROT_WRITE,
-					    MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
-			if (memory[1][j] == MAP_FAILED)
-				tst_brkm(TBROK | TERRNO, tst_exit, "mmap");
-#ifdef HAVE_MADV_MERGEABLE
-			if (madvise(memory[1][j], unit * MB, MADV_MERGEABLE)
-			    == -1)
-				tst_brkm(TBROK | TERRNO, tst_exit, "madvise");
-#endif
-			for (i = 0; i < unit * MB; i++)
-				memory[1][j][i] = 'a';
-		}
-		tst_resm(TINFO, "child 1 stops.");
-		if (raise(SIGSTOP) == -1)
-			tst_brkm(TBROK | TERRNO, tst_exit, "kill");
-		tst_resm(TINFO, "child 1 continues...");
-		_verify('a', 1, 0, size / unit, 0, unit * MB);
-		tst_resm(TINFO, "child 1 changes memory content to 'b'.");
-		for (j = 0; j < size / unit; j++) {
-			for (i = 0; i < unit * MB; i++)
-				memory[1][j][i] = 'b';
-		}
-		tst_resm(TINFO, "child 1 stops.");
-		if (raise(SIGSTOP) == -1)
-			tst_brkm(TBROK | TERRNO, tst_exit, "kill");
-		tst_resm(TINFO, "child 1 continues...");
-		_verify('b', 1, 0, size / unit, 0, unit * MB);
-		tst_resm(TINFO, "child 1 changes memory content to 'd'");
-		for (j = 0; j < size / unit; j++) {
-			for (i = 0; i < unit * MB; i++)
-				memory[1][j][i] = 'd';
-		}
-		if (raise(SIGSTOP) == -1)
-			tst_brkm(TBROK | TERRNO, tst_exit, "kill");
+}
 
-		tst_resm(TINFO, "child 1 continues...");
-		_verify('d', 1, 0, size / unit, 0, unit * MB);
-		tst_resm(TINFO, "child 1 changes one page to 'e'.");
-		memory[1][size / unit - 1][unit * MB - 1] = 'e';
+static void resume_ksm_children(int *child, int num)
+{
+	int k, status;
 
-		/* Unmerge. */
-		tst_resm(TINFO, "child 1 stops.");
-		if (raise(SIGSTOP) == -1)
-			tst_brkm(TBROK | TERRNO, tst_exit, "kill");
-		tst_resm(TINFO, "child 1 continues...");
-		_verify('e', 1, size / unit - 1, size / unit,
-			unit * MB - 1, unit * MB);
-		_verify('d', 1, 0, size / unit - 1, 0, unit * MB - 1);
-
-		/* Stop. */
-		tst_resm(TINFO, "child 1 stops.");
-		if (raise(SIGSTOP) == -1)
-			tst_brkm(TBROK | TERRNO, tst_exit, "kill");
-		tst_resm(TINFO, "child 1 continues...");
-		exit(0);
+	tst_resm(TINFO, "resume all children.");
+	for (k = 0; k < num; k++) {
+		if (kill(child[k], SIGCONT) == -1)
+			tst_brkm(TBROK|TERRNO, cleanup, "kill child[%d]", k);
 	}
-	for (k = 2; k < num; k++) {
-		switch (child[k] = fork()) {
+	fflush(stdout);
+}
+
+void create_same_memory(int size, int num, int unit)
+{
+	char buf[BUFSIZ];
+	int i, j, status, *child;
+	unsigned long ps, pages;
+	struct ksm_merge_data **ksm_data;
+
+	struct ksm_merge_data ksm_data0[] = {
+	       {'c', size*MB}, {'c', size*MB}, {'d', size*MB}, {'d', size*MB},
+	};
+	struct ksm_merge_data ksm_data1[] = {
+	       {'a', size*MB}, {'b', size*MB}, {'d', size*MB}, {'d', size*MB-1},
+	};
+	struct ksm_merge_data ksm_data2[] = {
+	       {'a', size*MB}, {'a', size*MB}, {'d', size*MB}, {'d', size*MB},
+	};
+
+	ps = sysconf(_SC_PAGE_SIZE);
+	pages = MB / ps;
+
+	ksm_data = (struct ksm_merge_data **)malloc
+		   ((num - 3) * sizeof(struct ksm_merge_data *));
+	/* Since from third child, the data is same with the first child's */
+	for (i = 0; i < num - 3; i++) {
+		ksm_data[i] = (struct ksm_merge_data *)malloc
+			      (4 * sizeof(struct ksm_merge_data));
+		for (j = 0; j < 4; j++) {
+			ksm_data[i][j].data = ksm_data0[j].data;
+			ksm_data[i][j].mergeable_size =
+				ksm_data0[j].mergeable_size;
+		}
+	}
+
+	child = (int *)malloc(num * sizeof(int));
+	if (child == NULL)
+		tst_brkm(TBROK | TERRNO, cleanup, "malloc");
+
+	for (i = 0; i < num; i++) {
+		fflush(stdout);
+		switch (child[i] = fork()) {
 		case -1:
-			tst_brkm(TBROK | TERRNO, cleanup, "fork");
+			tst_brkm(TBROK|TERRNO, cleanup, "fork");
 		case 0:
-			tst_resm(TINFO, "child %d stops.", k);
-			if (raise(SIGSTOP) == -1)
-				tst_brkm(TBROK | TERRNO, tst_exit, "kill");
-			tst_resm(TINFO, "child %d continues...", k);
-			tst_resm(TINFO, "child %d allocates %d "
-				 "MB filled with 'a'.", k, size);
-			memory[k] = malloc(size / unit * sizeof(*memory));
-			if (memory[k] == NULL)
-				tst_brkm(TBROK | TERRNO, tst_exit, "malloc");
-			for (j = 0; j < size / unit; j++) {
-				memory[k][j] = mmap(NULL, unit * MB,
-						    PROT_READ | PROT_WRITE,
-						    MAP_ANONYMOUS
-						    | MAP_PRIVATE, -1, 0);
-				if (memory[k][j] == MAP_FAILED)
-					tst_brkm(TBROK | TERRNO, cleanup,
-						 "mmap");
-#ifdef HAVE_MADV_MERGEABLE
-				if (madvise(memory[k][j], unit * MB,
-					    MADV_MERGEABLE) == -1)
-					tst_brkm(TBROK | TERRNO, cleanup,
-						 "madvise");
-#endif
-				for (i = 0; i < unit * MB; i++)
-					memory[k][j][i] = 'a';
+			if (i == 0) {
+				create_ksm_child(i, size, unit, ksm_data0);
+				exit(0);
+			} else if (i == 1) {
+				create_ksm_child(i, size, unit, ksm_data1);
+				exit(0);
+			} else if (i == 2) {
+				create_ksm_child(i, size, unit, ksm_data2);
+				exit(0);
+			} else {
+				create_ksm_child(i, size, unit, ksm_data[i-3]);
+				exit(0);
 			}
-			tst_resm(TINFO, "child %d stops.", k);
-			if (raise(SIGSTOP) == -1)
-				tst_brkm(TBROK | TERRNO, tst_exit, "kill");
-			tst_resm(TINFO, "child %d continues...", k);
-			tst_resm(TINFO, "child %d changes memory content to "
-				 "'d'", k);
-			for (j = 0; j < size / unit; j++) {
-				for (i = 0; i < unit * MB; i++)
-					memory[k][j][i] = 'd';
-			}
-			/* Unmerge. */
-			tst_resm(TINFO, "child %d stops.", k);
-			if (raise(SIGSTOP) == -1)
-				tst_brkm(TBROK | TERRNO, tst_exit, "kill");
-			tst_resm(TINFO, "child %d continues...", k);
-
-			/* Stop. */
-			tst_resm(TINFO, "child %d stops.", k);
-			if (raise(SIGSTOP) == -1)
-				tst_brkm(TBROK | TERRNO, tst_exit, "kill");
-			tst_resm(TINFO, "child %d continues...", k);
-			exit(0);
 		}
 	}
+
+	stop_ksm_children(child, num);
+
 	tst_resm(TINFO, "KSM merging...");
 	write_file(PATH_KSM "run", "1");
 	snprintf(buf, BUFSIZ, "%ld", size * pages * num);
 	write_file(PATH_KSM "pages_to_scan", buf);
 	write_file(PATH_KSM "sleep_millisecs", "0");
 
-	tst_resm(TINFO, "wait for all children to stop.");
-	for (k = 0; k < num; k++) {
-		if (waitpid(child[k], &status, WUNTRACED) == -1)
-			tst_brkm(TBROK | TERRNO, cleanup, "waitpid");
-		if (!WIFSTOPPED(status))
-			tst_brkm(TBROK, cleanup, "child %d was not stopped.",
-				 k);
-	}
-	tst_resm(TINFO, "resume all children.");
-	for (k = 0; k < num; k++) {
-		if (kill(child[k], SIGCONT) == -1)
-			tst_brkm(TBROK | TERRNO, cleanup, "kill child[%d]", k);
-	}
+	resume_ksm_children(child, num);
 	_group_check(1, 2, size * num * pages - 2, 0, 0, 0, size * pages * num);
 
-	tst_resm(TINFO, "wait for child 1 to stop.");
-	if (waitpid(child[1], &status, WUNTRACED) == -1)
-		tst_brkm(TBROK | TERRNO, cleanup, "waitpid");
-	if (!WIFSTOPPED(status))
-		tst_brkm(TBROK, cleanup, "child 1 was not stopped.");
-
-	/* Child 1 changes all pages to 'b'. */
-	tst_resm(TINFO, "resume child 1.");
-	if (kill(child[1], SIGCONT) == -1)
-		tst_brkm(TBROK | TERRNO, cleanup, "kill");
+	stop_ksm_children(child, num);
+	resume_ksm_children(child, num);
 	_group_check(1, 3, size * num * pages - 3, 0, 0, 0, size * pages * num);
 
-	tst_resm(TINFO, "wait for child 1 to stop.");
-	if (waitpid(child[1], &status, WUNTRACED) == -1)
-		tst_brkm(TBROK | TERRNO, cleanup, "waitpid");
-	if (!WIFSTOPPED(status))
-		tst_brkm(TBROK, cleanup, "child 1 was not stopped.");
-
-	/* All children change pages to 'd'. */
-	tst_resm(TINFO, "resume all children.");
-	for (k = 0; k < num; k++) {
-		if (kill(child[k], SIGCONT) == -1)
-			tst_brkm(TBROK | TERRNO, cleanup, "kill child[%d]", k);
-	}
+	stop_ksm_children(child, num);
+	resume_ksm_children(child, num);
 	_group_check(1, 1, size * num * pages - 1, 0, 0, 0, size * pages * num);
 
-	tst_resm(TINFO, "wait for all children to stop.");
-	for (k = 0; k < num; k++) {
-		if (waitpid(child[k], &status, WUNTRACED) == -1)
-			tst_brkm(TBROK | TERRNO, cleanup, "waitpid");
-		if (!WIFSTOPPED(status))
-			tst_brkm(TBROK, cleanup, "child %d was not stopped.",
-				 k);
-	}
-	/* Child 1 changes pages to 'e'. */
-	tst_resm(TINFO, "resume child 1.");
-	if (kill(child[1], SIGCONT) == -1)
-		tst_brkm(TBROK | TERRNO, cleanup, "kill");
+	stop_ksm_children(child, num);
+	resume_ksm_children(child, num);
 	_group_check(1, 1, size * num * pages - 2, 0, 1, 0, size * pages * num);
 
-	tst_resm(TINFO, "wait for child 1 to stop.");
-	if (waitpid(child[1], &status, WUNTRACED) == -1)
-		tst_brkm(TBROK | TERRNO, cleanup, "waitpid");
-	if (!WIFSTOPPED(status))
-		tst_brkm(TBROK, cleanup, "child 1 was not stopped.");
+	stop_ksm_children(child, num);
 
-	tst_resm(TINFO, "resume all children.");
-	for (k = 0; k < num; k++) {
-		if (kill(child[k], SIGCONT) == -1)
-			tst_brkm(TBROK | TERRNO, cleanup, "kill child[%d]", k);
-	}
 	tst_resm(TINFO, "KSM unmerging...");
 	write_file(PATH_KSM "run", "2");
+
+	resume_ksm_children(child, num);
 	_group_check(2, 0, 0, 0, 0, 0, size * pages * num);
 
-	tst_resm(TINFO, "wait for all children to stop.");
-	for (k = 0; k < num; k++) {
-		if (waitpid(child[k], &status, WUNTRACED) == -1)
-			tst_brkm(TBROK | TERRNO, cleanup, "waitpid");
-		if (!WIFSTOPPED(status))
-			tst_brkm(TBROK, cleanup, "child %d was not stopped.",
-				 k);
-	}
-	tst_resm(TINFO, "resume all children.");
-	for (k = 0; k < num; k++) {
-		if (kill(child[k], SIGCONT) == -1)
-			tst_brkm(TBROK | TERRNO, cleanup, "kill child[%d]", k);
-	}
 	tst_resm(TINFO, "stop KSM.");
 	write_file(PATH_KSM "run", "0");
 	_group_check(0, 0, 0, 0, 0, 0, size * pages * num);
+
 	while (waitpid(-1, &status, WUNTRACED | WCONTINUED) > 0)
 		if (WEXITSTATUS(status) != 0)
 			tst_resm(TFAIL, "child exit status is %d",
-- 
1.7.11.7


------------------------------------------------------------------------------
Master HTML5, CSS3, ASP.NET, MVC, AJAX, Knockout.js, Web API and
much more. Get web development skills now with LearnDevNow -
350+ hours of step-by-step video tutorials by Microsoft MVPs and experts.
SALE $99.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122812
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [LTP] [PATCH v3 2/2] mm/include: removed the global var 'memory'
  2013-01-04  6:12 [LTP] [PATCH v2 0/2] updated create_same_memory() inside lib/mem.c Zhouping Liu
  2013-01-04  6:12 ` [LTP] [PATCH v2 1/2] mm/lib: rewrote create_same_memory() Zhouping Liu
@ 2013-01-04  6:12 ` Zhouping Liu
  2013-01-08  5:57   ` Wanlong Gao
  2013-01-14  1:45   ` Wanlong Gao
  2013-01-04  7:06 ` [LTP] [PATCH v2 0/2] updated create_same_memory() inside lib/mem.c Caspar Zhang
  2 siblings, 2 replies; 11+ messages in thread
From: Zhouping Liu @ 2013-01-04  6:12 UTC (permalink / raw)
  To: LTP List

we don't use the global var 'memory' any more,
so removed it, and changed local var 'memory_new'
as 'memory'.

Signed-off-by: Zhouping Liu <zliu@redhat.com>
---
 testcases/kernel/mem/include/_private.h |  2 +-
 testcases/kernel/mem/include/mem.h      |  5 -----
 testcases/kernel/mem/lib/mem.c          | 34 ++++++++++++++++-----------------
 3 files changed, 18 insertions(+), 23 deletions(-)

diff --git a/testcases/kernel/mem/include/_private.h b/testcases/kernel/mem/include/_private.h
index 43eda0e..d34d417 100644
--- a/testcases/kernel/mem/include/_private.h
+++ b/testcases/kernel/mem/include/_private.h
@@ -11,7 +11,7 @@ static void _check(char *path, long int value);
 static void _group_check(int run, int pages_shared, int pages_sharing,
 		int pages_volatile, int pages_unshared,
 		int sleep_millisecs, int pages_to_scan);
-static void _verify(char **memory_new, char value, int proc, int start, int end,
+static void _verify(char **memory, char value, int proc, int start, int end,
 		int start2, int end2);
 
 /* cpuset/memcg */
diff --git a/testcases/kernel/mem/include/mem.h b/testcases/kernel/mem/include/mem.h
index 16a65db..1233493 100644
--- a/testcases/kernel/mem/include/mem.h
+++ b/testcases/kernel/mem/include/mem.h
@@ -36,11 +36,6 @@ void testoom(int mempolicy, int lite, int numa);
 
 #define PATH_SHMMAX		"/proc/sys/kernel/shmmax"
 
-/*
- * memory pointer to identify per process, MB unit, and byte like
- * memory[process No.][MB unit No.][byte No.].
- */
-char ***memory;
 void write_memcg(void);
 void create_same_memory(int size, int num, int unit);
 int  opt_num, opt_size, opt_unit;
diff --git a/testcases/kernel/mem/lib/mem.c b/testcases/kernel/mem/lib/mem.c
index 87d47a8..a827b25 100644
--- a/testcases/kernel/mem/lib/mem.c
+++ b/testcases/kernel/mem/lib/mem.c
@@ -200,7 +200,7 @@ static void _group_check(int run, int pages_shared, int pages_sharing,
 	_check("pages_to_scan", pages_to_scan);
 }
 
-static void _verify(char **memory_new, char value, int proc,
+static void _verify(char **memory, char value, int proc,
 		    int start, int end, int start2, int end2)
 {
 	int i, j;
@@ -212,14 +212,14 @@ static void _verify(char **memory_new, char value, int proc,
 
 	tst_resm(TINFO, "child %d verifies memory content.", proc);
 	memset(s, value, (end - start) * (end2 - start2));
-	if (memcmp(memory_new[start], s, (end - start) * (end2 - start2))
+	if (memcmp(memory[start], s, (end - start) * (end2 - start2))
 	    != 0)
 		for (j = start; j < end; j++)
 			for (i = start2; i < end2; i++)
-				if (memory_new[j][i] != value)
+				if (memory[j][i] != value)
 					tst_resm(TFAIL, "child %d has %c at "
 						 "%d,%d,%d.",
-						 proc, memory_new[j][i], proc,
+						 proc, memory[j][i], proc,
 						 j, i);
 	free(s);
 }
@@ -241,7 +241,7 @@ static struct ksm_merge_data {
 };
 
 static void ksm_child_memset(int child_num, int size, int total_unit,
-		 struct ksm_merge_data ksm_merge_data, char **memory_new)
+		 struct ksm_merge_data ksm_merge_data, char **memory)
 {
 	int i, j;
 	int unit = size / total_unit;
@@ -260,34 +260,34 @@ static void ksm_child_memset(int child_num, int size, int total_unit,
 
 	for (j = 0; j < total_unit; j++) {
 		for (i = 0; i < unit * MB; i++)
-			memory_new[j][i] = ksm_merge_data.data;
+			memory[j][i] = ksm_merge_data.data;
 	}
 
 	/* if it contains unshared page, then set 'e' char
 	 * at the end of the last page
 	 */
 	if (ksm_merge_data.mergeable_size < size * MB)
-		memory_new[j-1][i-1] = 'e';
+		memory[j-1][i-1] = 'e';
 }
 
 static void create_ksm_child(int child_num, int size, int unit,
 		       struct ksm_merge_data *ksm_merge_data)
 {
 	int j, total_unit;
-	char **memory_new;
+	char **memory;
 
 	/* The total units in all */
 	total_unit = size / unit;
 
-	/* Apply for the space for memory_new */
-	memory_new = (char **)malloc(total_unit * sizeof(char *));
+	/* Apply for the space for memory */
+	memory = (char **)malloc(total_unit * sizeof(char *));
 	for (j = 0; j < total_unit; j++) {
-		memory_new[j] = mmap(NULL, unit * MB, PROT_READ|PROT_WRITE,
+		memory[j] = mmap(NULL, unit * MB, PROT_READ|PROT_WRITE,
 			MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
-		if (memory_new[j] == MAP_FAILED)
+		if (memory[j] == MAP_FAILED)
 			tst_brkm(TBROK|TERRNO, tst_exit, "mmap");
 #ifdef HAVE_MADV_MERGEABLE
-		if (madvise(memory_new[j], unit * MB, MADV_MERGEABLE) == -1)
+		if (madvise(memory[j], unit * MB, MADV_MERGEABLE) == -1)
 			tst_brkm(TBROK|TERRNO, tst_exit, "madvise");
 #endif
 	}
@@ -300,7 +300,7 @@ static void create_ksm_child(int child_num, int size, int unit,
 	for (j = 0; j < 4; j++) {
 
 		ksm_child_memset(child_num, size, total_unit,
-				  ksm_merge_data[j], memory_new);
+				  ksm_merge_data[j], memory);
 
 		fflush(stdout);
 
@@ -309,12 +309,12 @@ static void create_ksm_child(int child_num, int size, int unit,
 			tst_brkm(TBROK|TERRNO, tst_exit, "kill");
 
 		if (ksm_merge_data[j].mergeable_size < size * MB) {
-			_verify(memory_new, 'e', child_num, total_unit - 1,
+			_verify(memory, 'e', child_num, total_unit - 1,
 				total_unit, unit * MB - 1, unit * MB);
-			_verify(memory_new, ksm_merge_data[j].data, child_num,
+			_verify(memory, ksm_merge_data[j].data, child_num,
 				0, total_unit, 0, unit * MB - 1);
 		} else {
-			_verify(memory_new, ksm_merge_data[j].data, child_num,
+			_verify(memory, ksm_merge_data[j].data, child_num,
 				0, total_unit, 0, unit * MB);
 		}
 	}
-- 
1.7.11.7


------------------------------------------------------------------------------
Master HTML5, CSS3, ASP.NET, MVC, AJAX, Knockout.js, Web API and
much more. Get web development skills now with LearnDevNow -
350+ hours of step-by-step video tutorials by Microsoft MVPs and experts.
SALE $99.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122812
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [LTP] [PATCH v2 0/2] updated create_same_memory() inside lib/mem.c
  2013-01-04  6:12 [LTP] [PATCH v2 0/2] updated create_same_memory() inside lib/mem.c Zhouping Liu
  2013-01-04  6:12 ` [LTP] [PATCH v2 1/2] mm/lib: rewrote create_same_memory() Zhouping Liu
  2013-01-04  6:12 ` [LTP] [PATCH v3 2/2] mm/include: removed the global var 'memory' Zhouping Liu
@ 2013-01-04  7:06 ` Caspar Zhang
  2013-01-04  7:21   ` Zhouping Liu
  2 siblings, 1 reply; 11+ messages in thread
From: Caspar Zhang @ 2013-01-04  7:06 UTC (permalink / raw)
  To: Zhouping Liu; +Cc: LTP List

On 01/04/2013 02:12 PM, Zhouping Liu wrote:
> changed in v2:
>   - modified '_function_name' as 'function_name'
>   - added 'static' key word for internal function
>   - updated a little commit log
>
> Zhouping Liu (2):
>    mm/lib: rewrote create_same_memory()
>    mm/include: removed the global var 'memory'
>
>   testcases/kernel/mem/include/_private.h |   2 +-
>   testcases/kernel/mem/include/mem.h      |   5 -
>   testcases/kernel/mem/lib/mem.c          | 425 +++++++++++++-------------------
>   3 files changed, 170 insertions(+), 262 deletions(-)
>

Since there is no function updated in the patch, I'm OK to apply it if a 
unit-test is executed (better testing in a wide range of systems) and 
get ACKs from other reviewers. Zhouping, would you mind pasting some 
test details against your patch before we apply it?

Caspar

------------------------------------------------------------------------------
Master HTML5, CSS3, ASP.NET, MVC, AJAX, Knockout.js, Web API and
much more. Get web development skills now with LearnDevNow -
350+ hours of step-by-step video tutorials by Microsoft MVPs and experts.
SALE $99.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122812
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [LTP] [PATCH v2 0/2] updated create_same_memory() inside lib/mem.c
  2013-01-04  7:06 ` [LTP] [PATCH v2 0/2] updated create_same_memory() inside lib/mem.c Caspar Zhang
@ 2013-01-04  7:21   ` Zhouping Liu
  2013-01-04  7:31     ` Caspar Zhang
  0 siblings, 1 reply; 11+ messages in thread
From: Zhouping Liu @ 2013-01-04  7:21 UTC (permalink / raw)
  To: Caspar Zhang; +Cc: LTP List

On 01/04/2013 03:06 PM, Caspar Zhang wrote:
> On 01/04/2013 02:12 PM, Zhouping Liu wrote:
>> changed in v2:
>>   - modified '_function_name' as 'function_name'
>>   - added 'static' key word for internal function
>>   - updated a little commit log
>>
>> Zhouping Liu (2):
>>    mm/lib: rewrote create_same_memory()
>>    mm/include: removed the global var 'memory'
>>
>>   testcases/kernel/mem/include/_private.h |   2 +-
>>   testcases/kernel/mem/include/mem.h      |   5 -
>>   testcases/kernel/mem/lib/mem.c          | 425 
>> +++++++++++++-------------------
>>   3 files changed, 170 insertions(+), 262 deletions(-)
>>
>
> Since there is no function updated in the patch, I'm OK to apply it if 
> a unit-test is executed (better testing in a wide range of systems) 
> and get ACKs from other reviewers. Zhouping, would you mind pasting 
> some test details against your patch before we apply it?

This is an example of output log with the patch on Fedora 17:

[root@ZhoupingLiu ksm]# ./ksm01 -s 1 -n 6
ksm01       0  TINFO  :  child 0 stops.
ksm01       0  TINFO  :  child 1 stops.
ksm01       0  TINFO  :  child 2 stops.
ksm01       0  TINFO  :  child 3 stops.
ksm01       0  TINFO  :  wait for all children to stop.
ksm01       0  TINFO  :  child 4 stops.
ksm01       0  TINFO  :  child 5 stops.
ksm01       0  TINFO  :  KSM merging...
ksm01       0  TINFO  :  resume all children.
ksm01       0  TINFO  :  child 0 continues...
ksm01       0  TINFO  :  child 1 continues...
ksm01       0  TINFO  :  child 0 allocates 1 MB filled with 'c'
ksm01       0  TINFO  :  child 1 allocates 1 MB filled with 'a'
ksm01       0  TINFO  :  child 4 continues...
ksm01       0  TINFO  :  child 4 allocates 1 MB filled with 'c'
ksm01       0  TINFO  :  child 2 continues...
ksm01       0  TINFO  :  child 2 allocates 1 MB filled with 'a'
ksm01       0  TINFO  :  child 3 continues...
ksm01       0  TINFO  :  child 3 allocates 1 MB filled with 'c'
ksm01       0  TINFO  :  child 0 stops.
ksm01       0  TINFO  :  child 2 stops.
ksm01       0  TINFO  :  child 3 stops.
ksm01       0  TINFO  :  child 5 continues...
ksm01       0  TINFO  :  child 5 allocates 1 MB filled with 'c'
ksm01       0  TINFO  :  child 4 stops.
ksm01       0  TINFO  :  child 1 stops.
ksm01       0  TINFO  :  child 5 stops.
ksm01       0  TINFO  :  ksm daemon takes 20s to scan all mergeable pages
ksm01       0  TINFO  :  check!
ksm01       0  TINFO  :  run is 1.
ksm01       0  TINFO  :  pages_shared is 2.
ksm01       0  TINFO  :  pages_sharing is 1534.
ksm01       0  TINFO  :  pages_volatile is 0.
ksm01       0  TINFO  :  pages_unshared is 0.
ksm01       0  TINFO  :  sleep_millisecs is 0.
ksm01       0  TINFO  :  pages_to_scan is 1536.
ksm01       0  TINFO  :  wait for all children to stop.
ksm01       0  TINFO  :  resume all children.
ksm01       0  TINFO  :  child 1 verifies memory content.
ksm01       0  TINFO  :  child 0 verifies memory content.
ksm01       0  TINFO  :  child 2 verifies memory content.
ksm01       0  TINFO  :  child 1 continues...
ksm01       0  TINFO  :  child 0 continues...
ksm01       0  TINFO  :  child 2 continues...
ksm01       0  TINFO  :  child 1 allocates 1 MB filled with 'b'
ksm01       0  TINFO  :  child 0 allocates 1 MB filled with 'c'
ksm01       0  TINFO  :  child 2 allocates 1 MB filled with 'a'
ksm01       0  TINFO  :  child 2 stops.
ksm01       0  TINFO  :  child 4 verifies memory content.
ksm01       0  TINFO  :  child 5 verifies memory content.
ksm01       0  TINFO  :  child 0 stops.
ksm01       0  TINFO  :  child 1 stops.
ksm01       0  TINFO  :  child 3 verifies memory content.
ksm01       0  TINFO  :  child 4 continues...
ksm01       0  TINFO  :  child 5 continues...
ksm01       0  TINFO  :  child 5 allocates 1 MB filled with 'c'
ksm01       0  TINFO  :  child 4 allocates 1 MB filled with 'c'
ksm01       0  TINFO  :  child 3 continues...
ksm01       0  TINFO  :  child 3 allocates 1 MB filled with 'c'
ksm01       0  TINFO  :  child 5 stops.
ksm01       0  TINFO  :  child 3 stops.
ksm01       0  TINFO  :  child 4 stops.
ksm01       0  TINFO  :  ksm daemon takes 20s to scan all mergeable pages
ksm01       0  TINFO  :  check!
ksm01       0  TINFO  :  run is 1.
ksm01       0  TINFO  :  pages_shared is 3.
ksm01       0  TINFO  :  pages_sharing is 1533.
ksm01       0  TINFO  :  pages_volatile is 0.
ksm01       0  TINFO  :  pages_unshared is 0.
ksm01       0  TINFO  :  sleep_millisecs is 0.
ksm01       0  TINFO  :  pages_to_scan is 1536.
ksm01       0  TINFO  :  wait for all children to stop.
ksm01       0  TINFO  :  resume all children.
ksm01       0  TINFO  :  child 1 verifies memory content.
ksm01       0  TINFO  :  child 0 verifies memory content.
ksm01       0  TINFO  :  child 2 verifies memory content.
ksm01       0  TINFO  :  child 1 continues...
ksm01       0  TINFO  :  child 1 allocates 1 MB filled with 'd'
ksm01       0  TINFO  :  child 0 continues...
ksm01       0  TINFO  :  child 2 continues...
ksm01       0  TINFO  :  child 0 allocates 1 MB filled with 'd'
ksm01       0  TINFO  :  child 2 allocates 1 MB filled with 'd'
ksm01       0  TINFO  :  child 3 verifies memory content.
ksm01       0  TINFO  :  child 3 continues...
ksm01       0  TINFO  :  child 3 allocates 1 MB filled with 'd'
ksm01       0  TINFO  :  child 1 stops.
ksm01       0  TINFO  :  child 0 stops.
ksm01       0  TINFO  :  child 2 stops.
ksm01       0  TINFO  :  child 5 verifies memory content.
ksm01       0  TINFO  :  child 4 verifies memory content.
ksm01       0  TINFO  :  child 5 continues...
ksm01       0  TINFO  :  child 5 allocates 1 MB filled with 'd'
ksm01       0  TINFO  :  child 3 stops.
ksm01       0  TINFO  :  child 4 continues...
ksm01       0  TINFO  :  child 4 allocates 1 MB filled with 'd'
ksm01       0  TINFO  :  child 5 stops.
ksm01       0  TINFO  :  child 4 stops.
ksm01       0  TINFO  :  ksm daemon takes 20s to scan all mergeable pages
ksm01       0  TINFO  :  check!
ksm01       0  TINFO  :  run is 1.
ksm01       0  TINFO  :  pages_shared is 1.
ksm01       0  TINFO  :  pages_sharing is 1535.
ksm01       0  TINFO  :  pages_volatile is 0.
ksm01       0  TINFO  :  pages_unshared is 0.
ksm01       0  TINFO  :  sleep_millisecs is 0.
ksm01       0  TINFO  :  pages_to_scan is 1536.
ksm01       0  TINFO  :  wait for all children to stop.
ksm01       0  TINFO  :  resume all children.
ksm01       0  TINFO  :  child 1 verifies memory content.
ksm01       0  TINFO  :  child 0 verifies memory content.
ksm01       0  TINFO  :  child 2 verifies memory content.
ksm01       0  TINFO  :  child 4 verifies memory content.
ksm01       0  TINFO  :  child 1 continues...
ksm01       0  TINFO  :  child 1 allocates 1 MB filled with 'd' except 
one page with 'e'
ksm01       0  TINFO  :  child 0 continues...
ksm01       0  TINFO  :  child 2 continues...
ksm01       0  TINFO  :  child 0 allocates 1 MB filled with 'd'
ksm01       0  TINFO  :  child 2 allocates 1 MB filled with 'd'
ksm01       0  TINFO  :  child 4 continues...
ksm01       0  TINFO  :  child 4 allocates 1 MB filled with 'd'
ksm01       0  TINFO  :  child 1 stops.
ksm01       0  TINFO  :  child 0 stops.
ksm01       0  TINFO  :  child 2 stops.
ksm01       0  TINFO  :  child 3 verifies memory content.
ksm01       0  TINFO  :  child 5 verifies memory content.
ksm01       0  TINFO  :  child 3 continues...
ksm01       0  TINFO  :  child 3 allocates 1 MB filled with 'd'
ksm01       0  TINFO  :  child 4 stops.
ksm01       0  TINFO  :  child 5 continues...
ksm01       0  TINFO  :  child 5 allocates 1 MB filled with 'd'
ksm01       0  TINFO  :  child 3 stops.
ksm01       0  TINFO  :  child 5 stops.
ksm01       0  TINFO  :  ksm daemon takes 20s to scan all mergeable pages
ksm01       0  TINFO  :  check!
ksm01       0  TINFO  :  run is 1.
ksm01       0  TINFO  :  pages_shared is 1.
ksm01       0  TINFO  :  pages_sharing is 1534.
ksm01       0  TINFO  :  pages_volatile is 0.
ksm01       0  TINFO  :  pages_unshared is 1.
ksm01       0  TINFO  :  sleep_millisecs is 0.
ksm01       0  TINFO  :  pages_to_scan is 1536.
ksm01       0  TINFO  :  wait for all children to stop.
ksm01       0  TINFO  :  KSM unmerging...
ksm01       0  TINFO  :  resume all children.
ksm01       0  TINFO  :  child 1 verifies memory content.
ksm01       0  TINFO  :  child 1 verifies memory content.
ksm01       0  TINFO  :  child 0 verifies memory content.
ksm01       0  TINFO  :  child 4 verifies memory content.
ksm01       0  TINFO  :  child 4 finished.
ksm01       0  TINFO  :  child 1 finished.
ksm01       0  TINFO  :  child 0 finished.
ksm01       0  TINFO  :  child 5 verifies memory content.
ksm01       0  TINFO  :  child 5 finished.
ksm01       0  TINFO  :  child 2 verifies memory content.
ksm01       0  TINFO  :  child 3 verifies memory content.
ksm01       0  TINFO  :  child 2 finished.
ksm01       0  TINFO  :  child 3 finished.
ksm01       0  TINFO  :  ksm daemon takes 10s to scan all mergeable pages
ksm01       0  TINFO  :  check!
ksm01       0  TINFO  :  run is 2.
ksm01       0  TINFO  :  pages_shared is 0.
ksm01       0  TINFO  :  pages_sharing is 0.
ksm01       0  TINFO  :  pages_volatile is 0.
ksm01       0  TINFO  :  pages_unshared is 0.
ksm01       0  TINFO  :  sleep_millisecs is 0.
ksm01       0  TINFO  :  pages_to_scan is 1536.
ksm01       0  TINFO  :  stop KSM.
ksm01       0  TINFO  :  ksm daemon takes 10s to scan all mergeable pages
ksm01       0  TINFO  :  check!
ksm01       0  TINFO  :  run is 0.
ksm01       0  TINFO  :  pages_shared is 0.
ksm01       0  TINFO  :  pages_sharing is 0.
ksm01       0  TINFO  :  pages_volatile is 0.
ksm01       0  TINFO  :  pages_unshared is 0.
ksm01       0  TINFO  :  sleep_millisecs is 0.
ksm01       0  TINFO  :  pages_to_scan is 1536.

Thanks,
Zhouping

------------------------------------------------------------------------------
Master HTML5, CSS3, ASP.NET, MVC, AJAX, Knockout.js, Web API and
much more. Get web development skills now with LearnDevNow -
350+ hours of step-by-step video tutorials by Microsoft MVPs and experts.
SALE $99.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122812
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [LTP] [PATCH v2 0/2] updated create_same_memory() inside lib/mem.c
  2013-01-04  7:21   ` Zhouping Liu
@ 2013-01-04  7:31     ` Caspar Zhang
  2013-01-04 15:29       ` Zhouping Liu
  0 siblings, 1 reply; 11+ messages in thread
From: Caspar Zhang @ 2013-01-04  7:31 UTC (permalink / raw)
  To: Zhouping Liu; +Cc: LTP List

On 01/04/2013 03:21 PM, Zhouping Liu wrote:
> This is an example of output log with the patch on Fedora 17:

Nice.

Is there a higher coverage of test result (ksm01-05 and on NUMA system / 
large system / small system, etc)?

Caspar

------------------------------------------------------------------------------
Master HTML5, CSS3, ASP.NET, MVC, AJAX, Knockout.js, Web API and
much more. Get web development skills now with LearnDevNow -
350+ hours of step-by-step video tutorials by Microsoft MVPs and experts.
SALE $99.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122812
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [LTP] [PATCH v2 0/2] updated create_same_memory() inside lib/mem.c
  2013-01-04  7:31     ` Caspar Zhang
@ 2013-01-04 15:29       ` Zhouping Liu
  0 siblings, 0 replies; 11+ messages in thread
From: Zhouping Liu @ 2013-01-04 15:29 UTC (permalink / raw)
  To: Caspar Zhang; +Cc: LTP List

On 01/04/2013 03:31 PM, Caspar Zhang wrote:
> On 01/04/2013 03:21 PM, Zhouping Liu wrote:
>> This is an example of output log with the patch on Fedora 17:
>
> Nice.
>
> Is there a higher coverage of test result (ksm01-05 and on NUMA system 
> / large system / small system, etc)?

yes, I tested it on i386/x86_64/ppc64 arch, also did it on NUMA system, 
ksm0[1-5] all PASSed.

Thanks,
Zhouping


------------------------------------------------------------------------------
Master HTML5, CSS3, ASP.NET, MVC, AJAX, Knockout.js, Web API and
much more. Get web development skills now with LearnDevNow -
350+ hours of step-by-step video tutorials by Microsoft MVPs and experts.
SALE $99.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122812
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [LTP] [PATCH v2 1/2] mm/lib: rewrote create_same_memory()
  2013-01-04  6:12 ` [LTP] [PATCH v2 1/2] mm/lib: rewrote create_same_memory() Zhouping Liu
@ 2013-01-08  5:57   ` Wanlong Gao
  2013-01-14  1:45   ` Wanlong Gao
  1 sibling, 0 replies; 11+ messages in thread
From: Wanlong Gao @ 2013-01-08  5:57 UTC (permalink / raw)
  To: Zhouping Liu; +Cc: LTP List

On 01/04/2013 02:12 PM, Zhouping Liu wrote:
> create_same_memory() was too large and contained lots of duplicated codes,
> and it's a little hard-coding, so that it's not easy to read and
> extend it for new case.
> 
> I splited it for five sub-functions:
> 
>   ksm_child_memset();
>   create_ksm_child();
>   stop_ksm_children();
>   resume_ksm_children();
>   create_smae_memory();
> 
> Also I intruduced a data struct to control the mergeable data:
> 
>   struct ksm_merge_data {
>         char data;
>         int mergeable_size;
>   };
> 
> Signed-off-by: Zhouping Liu <zliu@redhat.com>

I have no objection.

Acked-by: Wanlong Gao <gaowanlong@cn.fujitsu.com>

Thanks,
Wanlong Gao



------------------------------------------------------------------------------
Master SQL Server Development, Administration, T-SQL, SSAS, SSIS, SSRS
and more. Get SQL Server skills now (including 2012) with LearnDevNow -
200+ hours of step-by-step video tutorials by Microsoft MVPs and experts.
SALE $99.99 this month only - learn more at:
http://p.sf.net/sfu/learnmore_122512
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [LTP] [PATCH v3 2/2] mm/include: removed the global var 'memory'
  2013-01-04  6:12 ` [LTP] [PATCH v3 2/2] mm/include: removed the global var 'memory' Zhouping Liu
@ 2013-01-08  5:57   ` Wanlong Gao
  2013-01-14  1:45   ` Wanlong Gao
  1 sibling, 0 replies; 11+ messages in thread
From: Wanlong Gao @ 2013-01-08  5:57 UTC (permalink / raw)
  To: Zhouping Liu; +Cc: LTP List

On 01/04/2013 02:12 PM, Zhouping Liu wrote:
> we don't use the global var 'memory' any more,
> so removed it, and changed local var 'memory_new'
> as 'memory'.
> 
> Signed-off-by: Zhouping Liu <zliu@redhat.com>

Acked-by: Wanlong Gao <gaowanlong@cn.fujitsu.com>

------------------------------------------------------------------------------
Master SQL Server Development, Administration, T-SQL, SSAS, SSIS, SSRS
and more. Get SQL Server skills now (including 2012) with LearnDevNow -
200+ hours of step-by-step video tutorials by Microsoft MVPs and experts.
SALE $99.99 this month only - learn more at:
http://p.sf.net/sfu/learnmore_122512
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [LTP] [PATCH v2 1/2] mm/lib: rewrote create_same_memory()
  2013-01-04  6:12 ` [LTP] [PATCH v2 1/2] mm/lib: rewrote create_same_memory() Zhouping Liu
  2013-01-08  5:57   ` Wanlong Gao
@ 2013-01-14  1:45   ` Wanlong Gao
  1 sibling, 0 replies; 11+ messages in thread
From: Wanlong Gao @ 2013-01-14  1:45 UTC (permalink / raw)
  To: Zhouping Liu; +Cc: LTP List

On 01/04/2013 02:12 PM, Zhouping Liu wrote:
> create_same_memory() was too large and contained lots of duplicated codes,
> and it's a little hard-coding, so that it's not easy to read and
> extend it for new case.
> 
> I splited it for five sub-functions:
> 
>   ksm_child_memset();
>   create_ksm_child();
>   stop_ksm_children();
>   resume_ksm_children();
>   create_smae_memory();
> 
> Also I intruduced a data struct to control the mergeable data:
> 
>   struct ksm_merge_data {
>         char data;
>         int mergeable_size;
>   };
> 
> Signed-off-by: Zhouping Liu <zliu@redhat.com>

Applied, thank you.

Wanlong Gao


------------------------------------------------------------------------------
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. SALE $99.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122412
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [LTP] [PATCH v3 2/2] mm/include: removed the global var 'memory'
  2013-01-04  6:12 ` [LTP] [PATCH v3 2/2] mm/include: removed the global var 'memory' Zhouping Liu
  2013-01-08  5:57   ` Wanlong Gao
@ 2013-01-14  1:45   ` Wanlong Gao
  1 sibling, 0 replies; 11+ messages in thread
From: Wanlong Gao @ 2013-01-14  1:45 UTC (permalink / raw)
  To: Zhouping Liu; +Cc: LTP List

On 01/04/2013 02:12 PM, Zhouping Liu wrote:
> we don't use the global var 'memory' any more,
> so removed it, and changed local var 'memory_new'
> as 'memory'.
> 
> Signed-off-by: Zhouping Liu <zliu@redhat.com>

Applied, thank you.

Wanlong Gao


------------------------------------------------------------------------------
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. SALE $99.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122412
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2013-01-14  1:45 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-04  6:12 [LTP] [PATCH v2 0/2] updated create_same_memory() inside lib/mem.c Zhouping Liu
2013-01-04  6:12 ` [LTP] [PATCH v2 1/2] mm/lib: rewrote create_same_memory() Zhouping Liu
2013-01-08  5:57   ` Wanlong Gao
2013-01-14  1:45   ` Wanlong Gao
2013-01-04  6:12 ` [LTP] [PATCH v3 2/2] mm/include: removed the global var 'memory' Zhouping Liu
2013-01-08  5:57   ` Wanlong Gao
2013-01-14  1:45   ` Wanlong Gao
2013-01-04  7:06 ` [LTP] [PATCH v2 0/2] updated create_same_memory() inside lib/mem.c Caspar Zhang
2013-01-04  7:21   ` Zhouping Liu
2013-01-04  7:31     ` Caspar Zhang
2013-01-04 15:29       ` Zhouping Liu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox