aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2012-10-10 21:44:34 -0400
committerSteven Rostedt <rostedt@goodmis.org>2012-10-31 16:45:28 -0400
commitb382ede6b5eb8188926b72a9ef42fd2354342a97 (patch)
tree0381b86ab2ada35fee583fd6e547ed3454c9ebb9
parent884bfe89a462fcc85c8abd96171519cf2fe70929 (diff)
tracing: Expand ring buffer when trace_printk() is used
Since tracing is not used by 99% of Linux users, even though tracing may be configured in, it does not make sense to allocate 1.4 Megs per CPU for the ring buffers if they are not used. Thus, on boot up the ring buffers are set to a minimal size until something needs the and they are expanded. This works well for events and tracers (function, etc), but for the asynchronous use of trace_printk() which can write to the ring buffer at any time, does not expand the buffers. On boot up a check is made to see if any trace_printk() is used to see if the trace_printk() temp buffer pages should be allocated. This same code can be used to expand the buffers as well. Suggested-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r--kernel/trace/trace.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 36c213fbfce7..a5411b7414b1 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -1571,6 +1571,9 @@ void trace_printk_init_buffers(void)
1571 1571
1572 pr_info("ftrace: Allocated trace_printk buffers\n"); 1572 pr_info("ftrace: Allocated trace_printk buffers\n");
1573 1573
1574 /* Expand the buffers to set size */
1575 tracing_update_buffers();
1576
1574 buffers_allocated = 1; 1577 buffers_allocated = 1;
1575} 1578}
1576 1579
@@ -3030,6 +3033,10 @@ static int __tracing_resize_ring_buffer(unsigned long size, int cpu)
3030 */ 3033 */
3031 ring_buffer_expanded = 1; 3034 ring_buffer_expanded = 1;
3032 3035
3036 /* May be called before buffers are initialized */
3037 if (!global_trace.buffer)
3038 return 0;
3039
3033 ret = ring_buffer_resize(global_trace.buffer, size, cpu); 3040 ret = ring_buffer_resize(global_trace.buffer, size, cpu);
3034 if (ret < 0) 3041 if (ret < 0)
3035 return ret; 3042 return ret;