aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/ring_buffer.c
diff options
context:
space:
mode:
authorSteven Rostedt (Red Hat) <rostedt@goodmis.org>2015-11-17 16:36:06 -0500
committerSteven Rostedt <rostedt@goodmis.org>2015-11-25 15:24:05 -0500
commit4239c38fe0b3847e1e6d962c74b41b08ba0e2990 (patch)
tree234c0d0be4a749956e455bf3f636f219d6e2389a /kernel/trace/ring_buffer.c
parent70004986ffdf36d8bc787403af2571aeeef96595 (diff)
ring-buffer: Process commits whenever moving to a new page.
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>
Diffstat (limited to 'kernel/trace/ring_buffer.c')
-rw-r--r--kernel/trace/ring_buffer.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index 631541a53baf..95181e36891a 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -2129,6 +2129,8 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer,
2129 local_sub(length, &tail_page->write); 2129 local_sub(length, &tail_page->write);
2130} 2130}
2131 2131
2132static inline void rb_end_commit(struct ring_buffer_per_cpu *cpu_buffer);
2133
2132/* 2134/*
2133 * This is the slow path, force gcc not to inline it. 2135 * This is the slow path, force gcc not to inline it.
2134 */ 2136 */
@@ -2220,6 +2222,11 @@ rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer,
2220 2222
2221 rb_reset_tail(cpu_buffer, tail, info); 2223 rb_reset_tail(cpu_buffer, tail, info);
2222 2224
2225 /* Commit what we have for now. */
2226 rb_end_commit(cpu_buffer);
2227 /* rb_end_commit() decs committing */
2228 local_inc(&cpu_buffer->committing);
2229
2223 /* fail and let the caller try again */ 2230 /* fail and let the caller try again */
2224 return ERR_PTR(-EAGAIN); 2231 return ERR_PTR(-EAGAIN);
2225 2232