tracing: Some more updates for 3.5
Subsystems (2)
Steven Rostedt
maintainerIngo,
Please pull the latest tip/perf/core-2 tree, which can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace.git
tip/perf/core-2
Head SHA1: 895b67fd5830ce18a6f1375a7c062fcf84b4b874
Richard Weinberger (1):
tracing: Remove kernel_lock annotations
Vaibhav Nagarnaik (2):
ring-buffer: Merge separate resize loops
tracing: Fix initial buffer_size_kb state
----
kernel/trace/ring_buffer.c | 41 +++++++++++++++-------------------------- kernel/trace/trace.c | 5 ++--- 2 files changed, 17 insertions(+), 29 deletions(-)
Steven Rostedt
maintainerPATCH 1/3 ring-buffer: Merge separate resize loops
From: Vaibhav Nagarnaik <[email protected]>
There are 2 separate loops to resize cpu buffers that are online and offline. Merge them to make the code look better.
Also change the name from update_completion to update_done to allow shorter lines.
--- kernel/trace/ring_buffer.c | 41 +++++++++++++++-------------------------- 1 file changed, 15 insertions(+), 26 deletions(-)
kernel/trace/ring_buffer.c +15 -26
@@ -473,7 +473,7 @@ struct ring_buffer_per_cpu {int nr_pages_to_update;struct list_head new_pages;/* new pages to add */ struct work_struct update_pages_work; -struct completion update_completion; +struct completion update_done; };struct ring_buffer {
@@ -1058,7 +1058,7 @@ rb_allocate_cpu_buffer(struct ring_buffer *buffer, int nr_pages, int cpu)lockdep_set_class (&cpu_buffer->reader_lock, buffer->reader_lock_key); cpu_buffer->lock = (arch_spinlock_t )__ARCH_SPIN_LOCK_UNLOCKED;INIT_WORK (&cpu_buffer->update_pages_work, update_pages_handler); -init_completion (&cpu_buffer->update_completion); +init_completion (&cpu_buffer->update_done); bpage =kzalloc_node (ALIGN (sizeof (*bpage),cache_line_size ()),GFP_KERNEL ,cpu_to_node (cpu));
@@ -1461,7 +1461,7 @@ static void update_pages_handler(struct work_struct *work)struct ring_buffer_per_cpu *cpu_buffer =container_of (work, struct ring_buffer_per_cpu, update_pages_work);rb_update_pages (cpu_buffer); -complete (&cpu_buffer->update_completion); +complete (&cpu_buffer->update_done); }/**
@@ -1534,39 +1534,29 @@ int ring_buffer_resize(struct ring_buffer *buffer, unsigned long size,get_online_cpus ();/* * Fire off all the required work handlers -* Look out for offline CPUs -*/ -for_each_buffer_cpu (buffer, cpu) { - cpu_buffer = buffer->buffers[cpu]; -if (!cpu_buffer->nr_pages_to_update || - !cpu_online (cpu)) -continue ; - -schedule_work_on (cpu, &cpu_buffer->update_pages_work); - } -/* -* This loop is for the CPUs that are not online. -* We can't schedule anything on them, but it's not necessary +* We can't schedule on offline CPUs, but it's not necessary * since we can change their buffer sizes without any race. */ for_each_buffer_cpu (buffer, cpu) { cpu_buffer = buffer->buffers[cpu]; -if (!cpu_buffer->nr_pages_to_update || -cpu_online (cpu)) +if (!cpu_buffer->nr_pages_to_update)continue ; -rb_update_pages (cpu_buffer); +if (cpu_online (cpu)) +schedule_work_on (cpu, + &cpu_buffer->update_pages_work); +else +rb_update_pages (cpu_buffer); }/* wait for all the updates to complete */ for_each_buffer_cpu (buffer, cpu) { cpu_buffer = buffer->buffers[cpu]; -if (!cpu_buffer->nr_pages_to_update || - !cpu_online (cpu)) +if (!cpu_buffer->nr_pages_to_update)continue ; -wait_for_completion (&cpu_buffer->update_completion); -/* reset this value */ +if (cpu_online (cpu)) +wait_for_completion (&cpu_buffer->update_done); cpu_buffer->nr_pages_to_update =0 ; }
@@ -1593,13 +1583,12 @@ int ring_buffer_resize(struct ring_buffer *buffer, unsigned long size,if (cpu_online (cpu_id)) {schedule_work_on (cpu_id, &cpu_buffer->update_pages_work); -wait_for_completion (&cpu_buffer->update_completion); +wait_for_completion (&cpu_buffer->update_done); }else rb_update_pages (cpu_buffer); -put_online_cpus (); -/* reset this value */ cpu_buffer->nr_pages_to_update =0 ; +put_online_cpus (); } out:
Signature · 1 line
1.7.10
Steven Rostedt
maintainerPATCH 2/3 tracing: Fix initial buffer_size_kb state
In reply to Steven RostedtFrom: Vaibhav Nagarnaik <[email protected]>
Make sure that the state of buffer_size_kb is initialized correctly and returns actual size of the ring buffer.
--- kernel/trace/trace.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
kernel/trace/trace.c +2 -1
@@ -5112,7 +5112,8 @@ __init static int tracer_alloc_buffers(void) max_tr.data[i] = &per_cpu (max_tr_data, i); } -set_buffer_entries (&global_trace, ring_buf_size); +set_buffer_entries (&global_trace, +ring_buffer_size (global_trace.buffer,0 ));#ifdef CONFIG_TRACER_MAX_TRACE set_buffer_entries (&max_tr,1 );#endif
Signature · 1 line
1.7.10
Steven Rostedt
maintainerPATCH 3/3 tracing: Remove kernel_lock annotations
In reply to Steven RostedtFrom: Richard Weinberger <[email protected]>
The BKL is gone, these annotations are useless.
--- kernel/trace/trace.c | 2 -- 1 file changed, 2 deletions(-)
kernel/trace/trace.c +0 -2
@@ -763,8 +763,6 @@ update_max_tr_single(struct trace_array *tr, struct task_struct *tsk, int cpu)* Register a new plugin tracer. */ int register_tracer (struct tracer *type) -__releases (kernel_lock) -__acquires (kernel_lock) {struct tracer *t;int ret =0 ;
Signature · 1 line
1.7.10