All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ringbuffer: synchronize for resizing
@ 2009-11-03 11:42 Lai Jiangshan
  2009-11-03 15:35 ` Steven Rostedt
  2009-11-04 11:09 ` [tip:tracing/urgent] ring-buffer: Synchronize resizing buffer with reader lock tip-bot for Lai Jiangshan
  0 siblings, 2 replies; 3+ messages in thread
From: Lai Jiangshan @ 2009-11-03 11:42 UTC (permalink / raw)
  To: KOSAKI Motohiro, Ingo Molnar, Steven Rostedt, Frederic Weisbecker,
	LKML


We got a sudden panic when we reduced the size of the
ringbuffer.

We can reproduce the panic by the following steps:

echo 1 > events/sched/enable
cat trace_pipe > /dev/null &

while ((1))
do
echo 12000 > buffer_size_kb
echo 512 > buffer_size_kb
done

(not more than 5 seconds, panic ...)

Reported-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
---
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index 63446f1..db223fe 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -1196,6 +1196,7 @@ rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned nr_pages)
 	atomic_inc(&cpu_buffer->record_disabled);
 	synchronize_sched();
 
+	spin_lock_irq(&cpu_buffer->reader_lock);
 	rb_head_page_deactivate(cpu_buffer);
 
 	for (i = 0; i < nr_pages; i++) {
@@ -1210,6 +1211,7 @@ rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned nr_pages)
 		return;
 
 	rb_reset_cpu(cpu_buffer);
+	spin_unlock_irq(&cpu_buffer->reader_lock);
 
 	rb_check_pages(cpu_buffer);
 




^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] ringbuffer: synchronize for resizing
  2009-11-03 11:42 [PATCH] ringbuffer: synchronize for resizing Lai Jiangshan
@ 2009-11-03 15:35 ` Steven Rostedt
  2009-11-04 11:09 ` [tip:tracing/urgent] ring-buffer: Synchronize resizing buffer with reader lock tip-bot for Lai Jiangshan
  1 sibling, 0 replies; 3+ messages in thread
From: Steven Rostedt @ 2009-11-03 15:35 UTC (permalink / raw)
  To: Lai Jiangshan; +Cc: KOSAKI Motohiro, Ingo Molnar, Frederic Weisbecker, LKML


On Tue, 2009-11-03 at 19:42 +0800, Lai Jiangshan wrote:
> We got a sudden panic when we reduced the size of the
> ringbuffer.
> 
> We can reproduce the panic by the following steps:
> 
> echo 1 > events/sched/enable
> cat trace_pipe > /dev/null &
> 
> while ((1))
> do
> echo 12000 > buffer_size_kb
> echo 512 > buffer_size_kb
> done
> 
> (not more than 5 seconds, panic ...)

Thanks! I'll push this out for inclusion right away.

-- Steve

> 
> Reported-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
> Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
> ---
> diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
> index 63446f1..db223fe 100644
> --- a/kernel/trace/ring_buffer.c
> +++ b/kernel/trace/ring_buffer.c
> @@ -1196,6 +1196,7 @@ rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned nr_pages)
>  	atomic_inc(&cpu_buffer->record_disabled);
>  	synchronize_sched();
>  
> +	spin_lock_irq(&cpu_buffer->reader_lock);
>  	rb_head_page_deactivate(cpu_buffer);
>  
>  	for (i = 0; i < nr_pages; i++) {
> @@ -1210,6 +1211,7 @@ rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned nr_pages)
>  		return;
>  
>  	rb_reset_cpu(cpu_buffer);
> +	spin_unlock_irq(&cpu_buffer->reader_lock);
>  
>  	rb_check_pages(cpu_buffer);
>  
> 
> 
> 


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [tip:tracing/urgent] ring-buffer: Synchronize resizing buffer with reader lock
  2009-11-03 11:42 [PATCH] ringbuffer: synchronize for resizing Lai Jiangshan
  2009-11-03 15:35 ` Steven Rostedt
@ 2009-11-04 11:09 ` tip-bot for Lai Jiangshan
  1 sibling, 0 replies; 3+ messages in thread
From: tip-bot for Lai Jiangshan @ 2009-11-04 11:09 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, hpa, mingo, rostedt, tglx, kosaki.motohiro, laijs

Commit-ID:  f7112949f6a4cd6883d66c882d568c2197321de6
Gitweb:     http://git.kernel.org/tip/f7112949f6a4cd6883d66c882d568c2197321de6
Author:     Lai Jiangshan <laijs@cn.fujitsu.com>
AuthorDate: Tue, 3 Nov 2009 19:42:45 +0800
Committer:  Steven Rostedt <rostedt@goodmis.org>
CommitDate: Wed, 4 Nov 2009 00:04:20 -0500

ring-buffer: Synchronize resizing buffer with reader lock

We got a sudden panic when we reduced the size of the
ringbuffer.

We can reproduce the panic by the following steps:

echo 1 > events/sched/enable
cat trace_pipe > /dev/null &

while ((1))
do
echo 12000 > buffer_size_kb
echo 512 > buffer_size_kb
done

(not more than 5 seconds, panic ...)

Reported-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
LKML-Reference: <4AF01735.9060409@cn.fujitsu.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
 kernel/trace/ring_buffer.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index 3ffa502..5dd017f 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -1193,6 +1193,7 @@ rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned nr_pages)
 	atomic_inc(&cpu_buffer->record_disabled);
 	synchronize_sched();
 
+	spin_lock_irq(&cpu_buffer->reader_lock);
 	rb_head_page_deactivate(cpu_buffer);
 
 	for (i = 0; i < nr_pages; i++) {
@@ -1207,6 +1208,7 @@ rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned nr_pages)
 		return;
 
 	rb_reset_cpu(cpu_buffer);
+	spin_unlock_irq(&cpu_buffer->reader_lock);
 
 	rb_check_pages(cpu_buffer);
 

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2009-11-04 11:10 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-03 11:42 [PATCH] ringbuffer: synchronize for resizing Lai Jiangshan
2009-11-03 15:35 ` Steven Rostedt
2009-11-04 11:09 ` [tip:tracing/urgent] ring-buffer: Synchronize resizing buffer with reader lock tip-bot for Lai Jiangshan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.