Commit 092a3856 authored by Steven Rostedt's avatar Steven Rostedt Committed by Steven Rostedt (Google)
Browse files

ring-buffer: Add ring_buffer_record_is_on_cpu()

Add the function ring_buffer_record_is_on_cpu() that returns true if the
ring buffer for a give CPU is writable and false otherwise.

Also add tracer_tracing_is_on_cpu() to return if the ring buffer for a
given CPU is writeable for a given trace_array.

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>
Link: https://lore.kernel.org/20250505212236.059853898@goodmis.org


Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
parent 969043af
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -192,6 +192,7 @@ void ring_buffer_record_off(struct trace_buffer *buffer);
void ring_buffer_record_on(struct trace_buffer *buffer);
bool ring_buffer_record_is_on(struct trace_buffer *buffer);
bool ring_buffer_record_is_set_on(struct trace_buffer *buffer);
bool ring_buffer_record_is_on_cpu(struct trace_buffer *buffer, int cpu);
void ring_buffer_record_disable_cpu(struct trace_buffer *buffer, int cpu);
void ring_buffer_record_enable_cpu(struct trace_buffer *buffer, int cpu);

+18 −0
Original line number Diff line number Diff line
@@ -4882,6 +4882,24 @@ bool ring_buffer_record_is_set_on(struct trace_buffer *buffer)
	return !(atomic_read(&buffer->record_disabled) & RB_BUFFER_OFF);
}

/**
 * ring_buffer_record_is_on_cpu - return true if the ring buffer can write
 * @buffer: The ring buffer to see if write is enabled
 * @cpu: The CPU to test if the ring buffer can write too
 *
 * Returns true if the ring buffer is in a state that it accepts writes
 *   for a particular CPU.
 */
bool ring_buffer_record_is_on_cpu(struct trace_buffer *buffer, int cpu)
{
	struct ring_buffer_per_cpu *cpu_buffer;

	cpu_buffer = buffer->buffers[cpu];

	return ring_buffer_record_is_set_on(buffer) &&
		!atomic_read(&cpu_buffer->record_disabled);
}

/**
 * ring_buffer_record_disable_cpu - stop all writes into the cpu_buffer
 * @buffer: The ring buffer to stop writes to.
+15 −0
Original line number Diff line number Diff line
@@ -673,6 +673,21 @@ struct dentry *trace_create_file(const char *name,
				 void *data,
				 const struct file_operations *fops);


/**
 * tracer_tracing_is_on_cpu - show real state of ring buffer enabled on for a cpu
 * @tr : the trace array to know if ring buffer is enabled
 * @cpu: The cpu buffer to check if enabled
 *
 * Shows real state of the per CPU buffer if it is enabled or not.
 */
static inline bool tracer_tracing_is_on_cpu(struct trace_array *tr, int cpu)
{
	if (tr->array_buffer.buffer)
		return ring_buffer_record_is_on_cpu(tr->array_buffer.buffer, cpu);
	return false;
}

int tracing_init_dentry(void);

struct ring_buffer_event;