From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 76A5333B6C9 for ; Fri, 29 May 2026 13:21:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780060916; cv=none; b=SXS2CPsWeMJN641C0XpnxX6Oi2SnOTfoMV6MiOH9rRbAXjWlDhtpqc3ivFTGLhWvdnvp23Tw39VR98ER0hP5qWRiBJAorLp1tE5ptWnG/wWympxq3qkDYrKjbD007X1fE6GapYNRMY0uJaYYJhVKqqFGOevQ9whCXgIwU4iA0Zw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780060916; c=relaxed/simple; bh=vaYwWYoX8vnhHhT+iv/ODlKBPqrEHdlD24XqXQ9YSG0=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=tv4Wh9d6A+Mp7jBa11tPpr8YCtDABMqmGna6dtzXB5N3QzbYWbQHpEaFLFsoVlH9cgFmFWpb4U5ubNFFz5KgY4qgnoqZrFHUtNlA5NNx9+J5DaUj6MeBrFVJBz/x//00y0pBgTJiotGkqheMTS80z2POfmwXLbfUyE9OXFWjdiY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=f84/IQ0Q; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="f84/IQ0Q" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CAFEC1F008A0; Fri, 29 May 2026 13:21:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780060914; bh=02dfIMvm1t9MxLIH3+le/fMg8wx4LGDjXuv+Av5ztj0=; h=Date:From:To:Cc:Subject:References; b=f84/IQ0QqkuBR9bMCCclCiloV+3NNbfCNezbG12t/DVdtxDlSRWgd11Qm8V0JlKmm Q3+4RRZ+ZFzdhTSlw5bOOhBVPYTEigatGBaG9Mijh5Z2xyc/hnw3vzCSvTRx4rsYpB iK5/YFlwR2K0aW7AycxjcFpjkBDKT9/s4PghMIV+CD/npnMYxRSh9Y9g0ZAiMUP4TT kDs6/H0sO7dyEV5XX02HWI4mwcMfGGUjOw6RzI1SPQjzcb6/1cPwCdJyneEs5wsqOo 4uW1mfLDrwKcwHJUGbIbXxu6MZvZcuyCR2MK4iCdvEbv5F2ba+2woUgd8oYdYfeXKq JbGALFp1E7NLQ== Received: from rostedt by gandalf with local (Exim 4.99.2) (envelope-from ) id 1wSxAX-0000000ASVX-44xA; Fri, 29 May 2026 09:22:33 -0400 Message-ID: <20260529132233.836743076@kernel.org> User-Agent: quilt/0.69 Date: Fri, 29 May 2026 09:22:20 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton Subject: [for-next][PATCH 8/9] ring-buffer: Show persistent buffer dropped events in trace file References: <20260529132212.153072686@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 From: Steven Rostedt When the persistent ring buffer is validated on boot up, if a subbuffer is deemed invalid, it resets the buffer and continues. Currently, these lost events are not shown in the trace file output. Have the trace iterator look for subbuffers that have the RB_MISSED_EVENTS set and set the iter->missed_events flag when it is detected. This will then have the trace file shows "LOST EVENTS" when it reads across a subbuffer that was corrupted and invalidated. For example: <...>-1016 [005] ...1. 6230.660403: preempt_disable: caller=__mod_memcg_state+0x1c8/0x200 parent=__mod_memcg_state+0x1c8/0x200 CPU:5 [LOST EVENTS] <...>-1016 [005] ..... 6230.660673: kmem_cache_alloc: call_site=__anon_vma_prepare+0x1ad/0x1e0 ptr=000000006e40294c name=anon_vma bytes_req=200 bytes_alloc=208 gfp_flags=GFP_KERNEL node=-1 accounted=true Link: https://patch.msgid.link/20260522171052.006276604@kernel.org Signed-off-by: Steven Rostedt --- kernel/trace/ring_buffer.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index db72969aefa9..988915f035c7 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -3525,6 +3525,9 @@ static void rb_inc_iter(struct ring_buffer_iter *iter) else rb_inc_page(&iter->head_page); + if (rb_page_commit(iter->head_page) & RB_MISSED_EVENTS) + iter->missed_events = -1; + iter->page_stamp = iter->read_stamp = iter->head_page->page->time_stamp; iter->head = 0; iter->next_event = 0; @@ -7061,7 +7064,7 @@ int ring_buffer_read_page(struct trace_buffer *buffer, struct ring_buffer_event *event; struct buffer_data_page *dpage; struct buffer_page *reader; - unsigned long missed_events; + long missed_events; unsigned int commit; unsigned int read; u64 save_timestamp; @@ -7187,6 +7190,8 @@ int ring_buffer_read_page(struct trace_buffer *buffer, local_set(&reader->entries, 0); reader->read = 0; data_page->data = dpage; + if (!missed_events && rb_data_page_commit(dpage) & RB_MISSED_EVENTS) + missed_events = -1; /* * Use the real_end for the data size, @@ -7204,10 +7209,12 @@ int ring_buffer_read_page(struct trace_buffer *buffer, * Set a flag in the commit field if we lost events */ if (missed_events) { - /* If there is room at the end of the page to save the + /* + * If there is room at the end of the page to save the * missed events, then record it there. */ - if (buffer->subbuf_size - commit >= sizeof(missed_events)) { + if (missed_events > 0 && + buffer->subbuf_size - commit >= sizeof(missed_events)) { memcpy(&dpage->data[commit], &missed_events, sizeof(missed_events)); local_add(RB_MISSED_STORED, &dpage->commit); -- 2.53.0