ring-buffer: Process commits whenever moving to a new page.
authorSteven Rostedt (Red Hat) <rostedt@goodmis.org>
Tue, 17 Nov 2015 21:36:06 +0000 (16:36 -0500)
committerSteven Rostedt <rostedt@goodmis.org>
Wed, 25 Nov 2015 20:24:05 +0000 (15:24 -0500)
When crossing over to a new page, commit the current work. This will allow
readers to get data with less latency, and also simplifies the work to get
timestamps working for interrupted events.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
kernel/trace/ring_buffer.c

index 631541a..95181e3 100644 (file)
@@ -2129,6 +2129,8 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer,
        local_sub(length, &tail_page->write);
 }
 
+static inline void rb_end_commit(struct ring_buffer_per_cpu *cpu_buffer);
+
 /*
  * This is the slow path, force gcc not to inline it.
  */
@@ -2220,6 +2222,11 @@ rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer,
 
        rb_reset_tail(cpu_buffer, tail, info);
 
+       /* Commit what we have for now. */
+       rb_end_commit(cpu_buffer);
+       /* rb_end_commit() decs committing */
+       local_inc(&cpu_buffer->committing);
+
        /* fail and let the caller try again */
        return ERR_PTR(-EAGAIN);