The seek+write style input for specifying pfn range is not scriptable. Change it to more user friendly echo-able format. Before patch: fd = open("/debug/tracing/object/mm/page/dump-pfn"); seek(fd, start); write(fd, "size"); After patch: echo start +size > /debug/tracing/object/mm/page/dump-pfn or echo start end > /debug/tracing/object/mm/page/dump-pfn Signed-off-by: Wu Fengguang <fengguang.wu@xxxxxxxxx> --- kernel/trace/trace_mm.c | 39 +++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) --- mmotm.orig/kernel/trace/trace_mm.c 2010-12-26 20:05:26.000000000 +0800 +++ mmotm/kernel/trace/trace_mm.c 2010-12-26 20:20:13.000000000 +0800 @@ -9,6 +9,7 @@ #include <linux/bootmem.h> #include <linux/debugfs.h> #include <linux/uaccess.h> +#include <linux/ctype.h> #include "trace_output.h" @@ -24,8 +25,8 @@ void trace_mm_page_frames(unsigned long if (start > max_pfn - 1) return; - if (end > max_pfn - 1) - end = max_pfn - 1; + if (end > max_pfn) + end = max_pfn; while (pfn < end) { page = NULL; @@ -50,13 +51,20 @@ trace_mm_pfn_range_read(struct file *fil } +/* + * recognized formats: + * "M N" start=M, end=N + * "M" start=M, end=M+1 + * "M +N" start=M, end=M+N-1 + */ static ssize_t trace_mm_pfn_range_write(struct file *filp, const char __user *ubuf, size_t cnt, loff_t *ppos) { - unsigned long val, start, end; + unsigned long start; + unsigned long end = 0; char buf[64]; - int ret; + char *ptr; if (cnt >= sizeof(buf)) return -EINVAL; @@ -72,19 +80,20 @@ trace_mm_pfn_range_write(struct file *fi buf[cnt] = 0; - ret = strict_strtol(buf, 10, &val); - if (ret < 0) - return ret; - - start = *ppos; - if (val < 0) - end = max_pfn - 1; - else - end = start + val; + start = simple_strtoul(buf, &ptr, 0); - trace_mm_page_frames(start, end, trace_mm_page_frame); + for (; *ptr; ptr++) { + if (isdigit(*ptr)) { + if (*(ptr - 1) == '+') + end = start; + end += simple_strtoul(ptr, NULL, 0); + break; + } + } + if (!*ptr) + end = start + 1; - *ppos += cnt; + trace_mm_page_frames(start, end, trace_mm_page_frame); return cnt; } -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>