ANDROID: ring-buffer: Handle external writer reader_page fast-forward

In order to support dump on panic, the external writer might
fast-forward the reader-page to make sure the very last events can be
read.

Bug: 357781595
Bug: 391974813
Change-Id: I5b2473756a3350de8b0b808b54df662b8a77c6ad
Signed-off-by: Vincent Donnefort <vdonnefort@google.com>
This commit is contained in:
Vincent Donnefort
2025-02-17 17:45:55 +00:00
parent 10a77358c7
commit a3f61dba68

View File

@@ -5286,8 +5286,9 @@ __rb_get_reader_page_from_writer(struct ring_buffer_per_cpu *cpu_buffer)
}
prev_reader = cpu_buffer->meta_page->reader.id;
if (cpu_buffer->meta_page->reader.id == cpu_buffer->reader_page->id)
WARN_ON(cpu_buffer->writer->get_reader_page(cpu_buffer->cpu));
WARN_ON(cpu_buffer->writer->get_reader_page(cpu_buffer->cpu));
/* nr_pages doesn't include the reader page */
if (cpu_buffer->meta_page->reader.id > cpu_buffer->nr_pages) {
WARN_ON(1);
@@ -5301,7 +5302,8 @@ __rb_get_reader_page_from_writer(struct ring_buffer_per_cpu *cpu_buffer)
cpu_buffer->read_stamp = cpu_buffer->reader_page->page->time_stamp;
cpu_buffer->lost_events = cpu_buffer->meta_page->reader.lost_events;
WARN_ON(prev_reader == cpu_buffer->meta_page->reader.id);
WARN_ON(!IS_ENABLED(CONFIG_PKVM_DUMP_TRACE_ON_PANIC) &&
prev_reader == cpu_buffer->meta_page->reader.id);
if (!rb_page_size(cpu_buffer->reader_page))
return NULL;