On Mon, Mar 09, 2009 at 01:24:50PM -0400, Steven Rostedt wrote: > > > > On Mon, 9 Mar 2009, Steven Rostedt wrote: > > > > > On Mon, 9 Mar 2009, Ingo Molnar wrote: > > > > > > 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@xxxxxxxxx> > > > Cc: Steven Rostedt <rostedt@xxxxxxxxxxx> > > > Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> > > > LKML-Reference: <1236356510-8381-5-git-send-email-fweisbec@xxxxxxxxx> > > > Signed-off-by: Ingo Molnar <mingo@xxxxxxx> > > > > > > > > > --- > > > 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"))); \ > > A I missed the semicolon. I wonder if we could make it a static init? > > -- Steve Actually I first tried to make it like this: static const char *trace_printk_fmt ___attribute__((section("__trace_printk_fmt"))) = fmt; But gcc slapped me. That's why I moved it in the following line. > > > - trace_printk_fmt = fmt; \ > > > + \ > > > + if (!trace_printk_fmt) \ > > > + trace_printk_fmt = fmt; \ > > > + \ > > > > But this is a static init. That is, it is done at initialization and not > > every time. > > > > The change actually slows down the system. > > > > > __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; \ > > > + \ > > > > Same here. > > > > -- Steve > > > > > __ftrace_vprintk(_THIS_IP_, trace_printk_fmt, vargs); \ > > > } while (0) > > > > > > > > -- To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html