aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace
diff options
context:
space:
mode:
authorSteven Rostedt (Red Hat) <srostedt@redhat.com>2013-03-04 17:33:05 -0500
committerSteven Rostedt <rostedt@goodmis.org>2013-03-15 00:34:55 -0400
commitf1dc6725882b5ca54eb9a04436a3b47d58f2cbc7 (patch)
tree629ea73f0f6e3e44420c59aa42501f5668f4f085 /kernel/trace
parent523c81135bb23b2d9a8c21365d90d21b1309c138 (diff)
ring-buffer: Init waitqueue for blocked readers
The move of blocked readers to the ring buffer left out the init of the wait queue that is used. Tests missed this due to running stress tests against the buffers, which didn't allow for any readers to end up waiting. Running a simple read and wait triggered a bug. Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'kernel/trace')
-rw-r--r--kernel/trace/ring_buffer.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index 56b6ea32d2e7..65fe2a4f9824 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -1185,6 +1185,7 @@ rb_allocate_cpu_buffer(struct ring_buffer *buffer, int nr_pages, int cpu)
1185 INIT_WORK(&cpu_buffer->update_pages_work, update_pages_handler); 1185 INIT_WORK(&cpu_buffer->update_pages_work, update_pages_handler);
1186 init_completion(&cpu_buffer->update_done); 1186 init_completion(&cpu_buffer->update_done);
1187 init_irq_work(&cpu_buffer->irq_work.work, rb_wake_up_waiters); 1187 init_irq_work(&cpu_buffer->irq_work.work, rb_wake_up_waiters);
1188 init_waitqueue_head(&cpu_buffer->irq_work.waiters);
1188 1189
1189 bpage = kzalloc_node(ALIGN(sizeof(*bpage), cache_line_size()), 1190 bpage = kzalloc_node(ALIGN(sizeof(*bpage), cache_line_size()),
1190 GFP_KERNEL, cpu_to_node(cpu)); 1191 GFP_KERNEL, cpu_to_node(cpu));
@@ -1281,6 +1282,7 @@ struct ring_buffer *__ring_buffer_alloc(unsigned long size, unsigned flags,
1281 buffer->reader_lock_key = key; 1282 buffer->reader_lock_key = key;
1282 1283
1283 init_irq_work(&buffer->irq_work.work, rb_wake_up_waiters); 1284 init_irq_work(&buffer->irq_work.work, rb_wake_up_waiters);
1285 init_waitqueue_head(&buffer->irq_work.waiters);
1284 1286
1285 /* need at least two pages */ 1287 /* need at least two pages */
1286 if (nr_pages < 2) 1288 if (nr_pages < 2)