• Steven Rostedt (Google)'s avatar
    tracing: Always update snapshot buffer size · 7be76461
    Steven Rostedt (Google) authored
    It use to be that only the top level instance had a snapshot buffer (for
    latency tracers like wakeup and irqsoff). The update of the ring buffer
    size would check if the instance was the top level and if so, it would
    also update the snapshot buffer as it needs to be the same as the main
    buffer.
    
    Now that lower level instances also has a snapshot buffer, they too need
    to update their snapshot buffer sizes when the main buffer is changed,
    otherwise the following can be triggered:
    
     # cd /sys/kernel/tracing
     # echo 1500 > buffer_size_kb
     # mkdir instances/foo
     # echo irqsoff > instances/foo/current_tracer
     # echo 1000 > instances/foo/buffer_size_kb
    
    Produces:
    
     WARNING: CPU: 2 PID: 856 at kernel/trace/trace.c:1938 update_max_tr_single.part.0+0x27d/0x320
    
    Which is:
    
    	ret = ring_buffer_swap_cpu(tr->max_buffer.buffer, tr->array_buffer.buffer, cpu);
    
    	if (ret == -EBUSY) {
    		[..]
    	}
    
    	WARN_ON_ONCE(ret && ret != -EAGAIN && ret != -EBUSY);  <== here
    
    That's because ring_buffer_swap_cpu() has:
    
    	int ret = -EINVAL;
    
    	[..]
    
    	/* At least make sure the two buffers are somewhat the same */
    	if (cpu_buffer_a->nr_pages != cpu_buffer_b->nr_pages)
    		goto out;
    
    	[..]
     out:
    	return ret;
     }
    
    Instead, update all instances' snapshot buffer sizes when their main
    buffer size is updated.
    
    Link: https://lkml.kernel.org/r/20231205220010.454662151@goodmis.org
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Fixes: 6d9b3fa5 ("tracing: Move tracing_max_latency into trace_array")
    Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
    7be76461
trace.c 259 KB