From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail6.bemta8.messagelabs.com (mail6.bemta8.messagelabs.com [216.82.243.55]) by kanga.kvack.org (Postfix) with ESMTP id 0FD8790013B for ; Sun, 28 Aug 2011 23:57:07 -0400 (EDT) Message-Id: <20110829034932.272364561@intel.com> Date: Mon, 29 Aug 2011 11:29:56 +0800 From: Wu Fengguang Subject: [RFC][PATCH 5/7] tracing/mm: accept echo-able input format for pfn range References: <20110829032951.677220552@intel.com> Content-Disposition: inline; filename=trace-mm-pfn-range-input.patch Sender: owner-linux-mm@kvack.org List-ID: To: Andrew Morton , Ingo Molnar Cc: Mel Gorman , Wu Fengguang , Linux Memory Management List , LKML 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 --- 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 #include #include +#include #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@kvack.org. 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: email@kvack.org