mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 10:58:48 +09:00
ANDROID: ring-buffer: Fix ring_buffer_read_page for external writers
No shortcut is possible for reading a page without removing it from the ring-buffer. The reader needs to be moved and its timestamp updated. Bug: 249050813 Change-Id: I80fbc1e265500e419278346e2973df2488b7e8b3 Signed-off-by: Vincent Donnefort <vdonnefort@google.com>
This commit is contained in:
@@ -5884,7 +5884,8 @@ int ring_buffer_read_page(struct trace_buffer *buffer,
|
||||
* Otherwise, we can simply swap the page with the one passed in.
|
||||
*/
|
||||
if (read || (len < (commit - read)) ||
|
||||
cpu_buffer->reader_page == cpu_buffer->commit_page) {
|
||||
cpu_buffer->reader_page == cpu_buffer->commit_page ||
|
||||
unlikely(has_ext_writer(buffer))) {
|
||||
struct buffer_data_page *rpage = cpu_buffer->reader_page->page;
|
||||
unsigned int rpos = read;
|
||||
unsigned int pos = 0;
|
||||
@@ -5949,21 +5950,14 @@ int ring_buffer_read_page(struct trace_buffer *buffer,
|
||||
cpu_buffer->read += rb_page_entries(reader);
|
||||
cpu_buffer->read_bytes += BUF_PAGE_SIZE;
|
||||
|
||||
if (unlikely(has_ext_writer(buffer))) {
|
||||
u64 commit = local_read(&reader->page->commit);
|
||||
|
||||
memcpy(bpage, reader->page,
|
||||
BUF_PAGE_HDR_SIZE + commit);
|
||||
} else {
|
||||
/* swap the pages */
|
||||
rb_init_page(bpage);
|
||||
bpage = reader->page;
|
||||
reader->page = *data_page;
|
||||
local_set(&reader->write, 0);
|
||||
local_set(&reader->entries, 0);
|
||||
reader->read = 0;
|
||||
*data_page = bpage;
|
||||
}
|
||||
/* swap the pages */
|
||||
rb_init_page(bpage);
|
||||
bpage = reader->page;
|
||||
reader->page = *data_page;
|
||||
local_set(&reader->write, 0);
|
||||
local_set(&reader->entries, 0);
|
||||
reader->read = 0;
|
||||
*data_page = bpage;
|
||||
|
||||
/*
|
||||
* Use the real_end for the data size,
|
||||
|
||||
Reference in New Issue
Block a user