It looks strange to initialize the completions repeatedly. This patch uses static initialization. It simplifies the code and even helps to get rid of two memory barriers. Signed-off-by: Petr Mladek <pmladek@xxxxxxxx> --- kernel/trace/ring_buffer_benchmark.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/kernel/trace/ring_buffer_benchmark.c b/kernel/trace/ring_buffer_benchmark.c index a1503a027ee2..ccb1a0b95f64 100644 --- a/kernel/trace/ring_buffer_benchmark.c +++ b/kernel/trace/ring_buffer_benchmark.c @@ -24,8 +24,8 @@ struct rb_page { static int wakeup_interval = 100; static int reader_finish; -static struct completion read_start; -static struct completion read_done; +static DECLARE_COMPLETION(read_start); +static DECLARE_COMPLETION(read_done); static struct ring_buffer *buffer; static struct task_struct *producer; @@ -270,11 +270,6 @@ static void ring_buffer_producer(void) trace_printk("End ring buffer hammer\n"); if (consumer) { - /* Init both completions here to avoid races */ - init_completion(&read_start); - init_completion(&read_done); - /* the completions must be visible before the finish var */ - smp_wmb(); reader_finish = 1; /* finish var visible before waking up the consumer */ smp_wmb(); @@ -389,13 +384,10 @@ static int ring_buffer_consumer_thread(void *arg) static int ring_buffer_producer_thread(void *arg) { - init_completion(&read_start); - while (!kthread_should_stop() && !kill_test) { ring_buffer_reset(buffer); if (consumer) { - smp_wmb(); wake_up_process(consumer); wait_for_completion(&read_start); } -- 1.8.5.6 -- To unsubscribe from this list: send the line "unsubscribe linux-api" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html