Skip to content

Commit 092a385

Browse files
committed
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 <[email protected]> Cc: Mark Rutland <[email protected]> Cc: Mathieu Desnoyers <[email protected]> Cc: Andrew Morton <[email protected]> Link: https://lore.kernel.org/[email protected] Signed-off-by: Steven Rostedt (Google) <[email protected]>
1 parent 969043a commit 092a385

File tree

3 files changed

+34
-0
lines changed

3 files changed

+34
-0
lines changed

include/linux/ring_buffer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ void ring_buffer_record_off(struct trace_buffer *buffer);
192192
void ring_buffer_record_on(struct trace_buffer *buffer);
193193
bool ring_buffer_record_is_on(struct trace_buffer *buffer);
194194
bool ring_buffer_record_is_set_on(struct trace_buffer *buffer);
195+
bool ring_buffer_record_is_on_cpu(struct trace_buffer *buffer, int cpu);
195196
void ring_buffer_record_disable_cpu(struct trace_buffer *buffer, int cpu);
196197
void ring_buffer_record_enable_cpu(struct trace_buffer *buffer, int cpu);
197198

kernel/trace/ring_buffer.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4882,6 +4882,24 @@ bool ring_buffer_record_is_set_on(struct trace_buffer *buffer)
48824882
return !(atomic_read(&buffer->record_disabled) & RB_BUFFER_OFF);
48834883
}
48844884

4885+
/**
4886+
* ring_buffer_record_is_on_cpu - return true if the ring buffer can write
4887+
* @buffer: The ring buffer to see if write is enabled
4888+
* @cpu: The CPU to test if the ring buffer can write too
4889+
*
4890+
* Returns true if the ring buffer is in a state that it accepts writes
4891+
* for a particular CPU.
4892+
*/
4893+
bool ring_buffer_record_is_on_cpu(struct trace_buffer *buffer, int cpu)
4894+
{
4895+
struct ring_buffer_per_cpu *cpu_buffer;
4896+
4897+
cpu_buffer = buffer->buffers[cpu];
4898+
4899+
return ring_buffer_record_is_set_on(buffer) &&
4900+
!atomic_read(&cpu_buffer->record_disabled);
4901+
}
4902+
48854903
/**
48864904
* ring_buffer_record_disable_cpu - stop all writes into the cpu_buffer
48874905
* @buffer: The ring buffer to stop writes to.

kernel/trace/trace.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -673,6 +673,21 @@ struct dentry *trace_create_file(const char *name,
673673
void *data,
674674
const struct file_operations *fops);
675675

676+
677+
/**
678+
* tracer_tracing_is_on_cpu - show real state of ring buffer enabled on for a cpu
679+
* @tr : the trace array to know if ring buffer is enabled
680+
* @cpu: The cpu buffer to check if enabled
681+
*
682+
* Shows real state of the per CPU buffer if it is enabled or not.
683+
*/
684+
static inline bool tracer_tracing_is_on_cpu(struct trace_array *tr, int cpu)
685+
{
686+
if (tr->array_buffer.buffer)
687+
return ring_buffer_record_is_on_cpu(tr->array_buffer.buffer, cpu);
688+
return false;
689+
}
690+
676691
int tracing_init_dentry(void);
677692

678693
struct ring_buffer_event;

0 commit comments

Comments
 (0)