Steven Rostedt <rost...@goodmis.org> wrote: > From: Steven Rostedt <rost...@goodmis.org> > > When the ring buffer was first introduced, reading the non-consuming > "trace" file required disabling the writing of the ring buffer. To make > sure the writing was fully disabled before iterating the buffer with a > non-consuming read, it would set the disable flag of the buffer and then > call an RCU synchronization to make sure all the buffers were > synchronized. > > The function ring_buffer_read_start() originally would initialize the > iterator and call an RCU synchronization, but this was for each individual > per CPU buffer where this would get called many times on a machine with > many CPUs before the trace file could be read. The commit 72c9ddfd4c5bf > ("ring-buffer: Make non-consuming read less expensive with lots of cpus.") > separated ring_buffer_read_start into ring_buffer_read_prepare(), > ring_buffer_read_sync() and then ring_buffer_read_start() to allow each of > the per CPU buffers to be prepared, call the read_buffer_read_sync() once, > and then the ring_buffer_read_start() for each of the CPUs which made > things much faster. > > The commit 1039221cc278 ("ring-buffer: Do not disable recording when there > is an iterator") removed the requirement of disabling the recording of the > ring buffer in order to iterate it, but it did not remove the > synchronization that was happening that was required to wait for all the > buffers to have no more writers. It's now OK for the buffers to have > writers and no synchronization is needed. > > Remove the synchronization and put back the interface for the ring buffer > iterator back before commit 72c9ddfd4c5bf was applied. > > Reported-by: David Howells <dhowe...@redhat.com> > Fixes: 1039221cc278 ("ring-buffer: Do not disable recording when there is an > iterator") > Signed-off-by: Steven Rostedt (Google) <rost...@goodmis.org>
Tested-by: David Howells <dhowe...@redhat.com>