Messages in this thread Patch in this message | | | Date | Tue, 17 Mar 2020 17:32:29 -0400 | From | Steven Rostedt <> | Subject | [RFC][PATCH 07/11] ring-buffer: Optimize rb_iter_head_event() |
| |
From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
As it is fine to perform several "peeks" of event data in the ring buffer via the iterator before moving it forward, do not re-read the event, just return what was read before. Otherwise, it can cause inconsistent results, especially when testing multiple CPU buffers to interleave them.
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> --- kernel/trace/ring_buffer.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 475338fda969..5979327254f9 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -1929,6 +1929,9 @@ rb_iter_head_event(struct ring_buffer_iter *iter) unsigned long commit; unsigned length; + if (iter->head != iter->next_event) + return iter->event; + /* * When the writer goes across pages, it issues a cmpxchg which * is a mb(), which will synchronize with the rmb here. -- 2.25.1
| |