From a3f61dba68a86e9f0d002fc738b9c69e625bfbcf Mon Sep 17 00:00:00 2001 From: Vincent Donnefort Date: Mon, 17 Feb 2025 17:45:55 +0000 Subject: [PATCH] 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 --- kernel/trace/ring_buffer.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index cc395946e6c0..f1ea1cb887ff 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -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;