On Wed, 20 May 2026 14:49:48 -0400
Steven Rostedt <[email protected]> wrote:

> From: Steven Rostedt <[email protected]>
> 
> When the persistent ring buffer is validated on boot up, if a subbuffer is
> deemed invalid, it resets the buffer and continues. Have the code preserve
> the RB_MISSED_EVENTS flag in the commit portion of the subbuffer header
> and pass that back so that the trace_pipe file can show the missed events
> like the trace file does.
> 
> For example:
> 
>    <...>-1242    [005] d....  4429.120116: page_fault_user: 
> address=0x7ffaebb6e728 ip=0x7ffaeb9d4960 error_code=0x7
>    <...>-1242    [005] .....  4429.120124: mm_page_alloc: 
> page=00000000055254f3 pfn=0x1373bd order=0 migratetype=1 
> gfp_flags=GFP_HIGHUSER_MOVABLE|__GFP_COMP
>    <...>-1242    [005] d..2.  4429.120132: tlb_flush: pages:1 reason:local MM 
> shootdown (3)
> CPU:5 [LOST EVENTS]
>    <...>-1242    [005] d....  4429.120661: page_fault_user: 
> address=0x55ba7c2d0944 ip=0x55ba7c20cd02 error_code=0x7
>    <...>-1242    [005] .....  4429.120669: mm_page_alloc: 
> page=0000000005a02500 pfn=0x12b6e4 order=0 migratetype=1 
> gfp_flags=GFP_HIGHUSER_MOVABLE|__GFP_COMP
>    <...>-1242    [005] d..2.  4429.120680: tlb_flush: pages:1 reason:local MM 
> shootdown (3)

OK, this looks good, but I have a comment below.

[...]
> @@ -7123,19 +7132,23 @@ int ring_buffer_read_page(struct trace_buffer *buffer,
>                * the reader page.
>                */
>               if (full &&
> -                 (!read || (len < (commit - read)) ||
> +                 (!read || (len < (size - read)) ||
>                    cpu_buffer->reader_page == cpu_buffer->commit_page))
>                       return -1;
>  
> -             if (len > (commit - read))
> -                     len = (commit - read);
> +             if (len > (size - read))
> +                     len = (size - read);
>  
>               /* Always keep the time extend and data together */
> -             size = rb_event_ts_length(event);
> +             event_size = rb_event_ts_length(event);
>  
> -             if (len < size)
> +             if (len < event_size)
>                       return -1;
>  
> +             if (commit & RB_MISSED_EVENTS) {
> +                     printk("MISSED\n");

Is it for debug?

> +                     flags = RB_MISSED_EVENTS; }

nit: block closing brace is in the previous line. Maybe typo?

Thanks,

-- 
Masami Hiramatsu (Google) <[email protected]>

Reply via email to