Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f1dc6725 authored by Steven Rostedt (Red Hat)'s avatar Steven Rostedt (Red Hat) Committed by Steven Rostedt
Browse files

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: default avatarSteven Rostedt <rostedt@goodmis.org>
parent 523c8113
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -1185,6 +1185,7 @@ rb_allocate_cpu_buffer(struct ring_buffer *buffer, int nr_pages, int cpu)
	INIT_WORK(&cpu_buffer->update_pages_work, update_pages_handler);
	INIT_WORK(&cpu_buffer->update_pages_work, update_pages_handler);
	init_completion(&cpu_buffer->update_done);
	init_completion(&cpu_buffer->update_done);
	init_irq_work(&cpu_buffer->irq_work.work, rb_wake_up_waiters);
	init_irq_work(&cpu_buffer->irq_work.work, rb_wake_up_waiters);
	init_waitqueue_head(&cpu_buffer->irq_work.waiters);


	bpage = kzalloc_node(ALIGN(sizeof(*bpage), cache_line_size()),
	bpage = kzalloc_node(ALIGN(sizeof(*bpage), cache_line_size()),
			    GFP_KERNEL, cpu_to_node(cpu));
			    GFP_KERNEL, cpu_to_node(cpu));
@@ -1281,6 +1282,7 @@ struct ring_buffer *__ring_buffer_alloc(unsigned long size, unsigned flags,
	buffer->reader_lock_key = key;
	buffer->reader_lock_key = key;


	init_irq_work(&buffer->irq_work.work, rb_wake_up_waiters);
	init_irq_work(&buffer->irq_work.work, rb_wake_up_waiters);
	init_waitqueue_head(&buffer->irq_work.waiters);


	/* need at least two pages */
	/* need at least two pages */
	if (nr_pages < 2)
	if (nr_pages < 2)