From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pd0-f180.google.com (mail-pd0-f180.google.com [209.85.192.180]) by kanga.kvack.org (Postfix) with ESMTP id B505B6B0075 for ; Fri, 21 Nov 2014 03:11:47 -0500 (EST) Received: by mail-pd0-f180.google.com with SMTP id p10so4758396pdj.25 for ; Fri, 21 Nov 2014 00:11:47 -0800 (PST) Received: from lgemrelse6q.lge.com (LGEMRELSE6Q.lge.com. [156.147.1.121]) by mx.google.com with ESMTP id qj10si6908037pac.109.2014.11.21.00.11.38 for ; Fri, 21 Nov 2014 00:11:39 -0800 (PST) From: Joonsoo Kim Subject: [PATCH v2 5/7] stacktrace: introduce snprint_stack_trace for buffer output Date: Fri, 21 Nov 2014 17:14:04 +0900 Message-Id: <1416557646-21755-6-git-send-email-iamjoonsoo.kim@lge.com> In-Reply-To: <1416557646-21755-1-git-send-email-iamjoonsoo.kim@lge.com> References: <1416557646-21755-1-git-send-email-iamjoonsoo.kim@lge.com> Sender: owner-linux-mm@kvack.org List-ID: To: Andrew Morton Cc: Mel Gorman , Johannes Weiner , Minchan Kim , Dave Hansen , Michal Nazarewicz , Jungsoo Son , Ingo Molnar , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Joonsoo Kim Current stacktrace only have the function for console output. page_owner that will be introduced in following patch needs to print the output of stacktrace into the buffer for our own output format so so new function, snprint_stack_trace(), is needed. Signed-off-by: Joonsoo Kim --- include/linux/stacktrace.h | 3 +++ kernel/stacktrace.c | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/include/linux/stacktrace.h b/include/linux/stacktrace.h index 115b570..5948c67 100644 --- a/include/linux/stacktrace.h +++ b/include/linux/stacktrace.h @@ -20,6 +20,8 @@ extern void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace); extern void print_stack_trace(struct stack_trace *trace, int spaces); +extern int snprint_stack_trace(char *buf, int buf_len, + struct stack_trace *trace, int spaces); #ifdef CONFIG_USER_STACKTRACE_SUPPORT extern void save_stack_trace_user(struct stack_trace *trace); @@ -32,6 +34,7 @@ extern void save_stack_trace_user(struct stack_trace *trace); # define save_stack_trace_tsk(tsk, trace) do { } while (0) # define save_stack_trace_user(trace) do { } while (0) # define print_stack_trace(trace, spaces) do { } while (0) +# define snprint_stack_trace(buf, len, trace, spaces) do { } while (0) #endif #endif diff --git a/kernel/stacktrace.c b/kernel/stacktrace.c index 00fe55c..61088ff 100644 --- a/kernel/stacktrace.c +++ b/kernel/stacktrace.c @@ -25,6 +25,30 @@ void print_stack_trace(struct stack_trace *trace, int spaces) } EXPORT_SYMBOL_GPL(print_stack_trace); +int snprint_stack_trace(char *buf, int buf_len, struct stack_trace *trace, + int spaces) +{ + int i, printed; + unsigned long ip; + int ret = 0; + + if (WARN_ON(!trace->entries)) + return 0; + + for (i = 0; i < trace->nr_entries && buf_len; i++) { + ip = trace->entries[i]; + printed = snprintf(buf, buf_len, "%*c[<%p>] %pS\n", + 1 + spaces, ' ', (void *) ip, (void *) ip); + + buf_len -= printed; + ret += printed; + buf += printed; + } + + return ret; +} +EXPORT_SYMBOL_GPL(snprint_stack_trace); + /* * Architectures that do not implement save_stack_trace_tsk or * save_stack_trace_regs get this weak alias and a once-per-bootup warning -- 1.7.9.5 -- 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/ . Don't email: email@kvack.org