Messages in this thread Patch in this message | | | Date | Mon, 9 Mar 2009 09:12:34 GMT | From | Ingo Molnar <> | Subject | [tip:tracing/printk] tracing: optimize trace_printk() |
| |
Commit-ID: 7bffc23e56e92c14b787bf4d95249a32085bfed5 Gitweb: http://git.kernel.org/tip/7bffc23e56e92c14b787bf4d95249a32085bfed5 Author: "Ingo Molnar" <mingo@elte.hu> AuthorDate: Mon, 9 Mar 2009 10:11:36 +0100 Commit: Ingo Molnar <mingo@elte.hu> CommitDate: Mon, 9 Mar 2009 10:11:36 +0100
tracing: optimize trace_printk()
Impact: micro-optimization
trace_printk() does this unconditionally:
trace_printk_fmt = fmt;
Where trace_printk_fmt is an entry into a global array. This is very SMP-unfriendly.
So only write it once per bootup.
Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Peter Zijlstra <peterz@infradead.org> LKML-Reference: <1236356510-8381-5-git-send-email-fweisbec@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
--- include/linux/kernel.h | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 4e726b9..7742798 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h @@ -454,7 +454,10 @@ do { \ do { \ static const char *trace_printk_fmt \ __attribute__((section("__trace_printk_fmt"))); \ - trace_printk_fmt = fmt; \ + \ + if (!trace_printk_fmt) \ + trace_printk_fmt = fmt; \ + \ __trace_printk_check_format(fmt, ##args); \ __trace_printk(_THIS_IP_, trace_printk_fmt, ##args); \ } while (0) @@ -467,7 +470,10 @@ __trace_printk(unsigned long ip, const char *fmt, ...) do { \ static const char *trace_printk_fmt \ __attribute__((section("__trace_printk_fmt"))); \ - trace_printk_fmt = fmt; \ + \ + if (!trace_printk_fmt) \ + trace_printk_fmt = fmt; \ + \ __ftrace_vprintk(_THIS_IP_, trace_printk_fmt, vargs); \ } while (0)
| |