diff options
-rw-r--r-- | include/linux/ring_buffer.h | 1 | ||||
-rw-r--r-- | kernel/trace/ring_buffer.c | 18 | ||||
-rw-r--r-- | kernel/trace/trace.c | 3 |
3 files changed, 22 insertions, 0 deletions
diff --git a/include/linux/ring_buffer.h b/include/linux/ring_buffer.h index 519777e3fa01..1342e69542f3 100644 --- a/include/linux/ring_buffer.h +++ b/include/linux/ring_buffer.h | |||
@@ -167,6 +167,7 @@ unsigned long ring_buffer_entries_cpu(struct ring_buffer *buffer, int cpu); | |||
167 | unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu); | 167 | unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu); |
168 | unsigned long ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu); | 168 | unsigned long ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu); |
169 | unsigned long ring_buffer_dropped_events_cpu(struct ring_buffer *buffer, int cpu); | 169 | unsigned long ring_buffer_dropped_events_cpu(struct ring_buffer *buffer, int cpu); |
170 | unsigned long ring_buffer_read_events_cpu(struct ring_buffer *buffer, int cpu); | ||
170 | 171 | ||
171 | u64 ring_buffer_time_stamp(struct ring_buffer *buffer, int cpu); | 172 | u64 ring_buffer_time_stamp(struct ring_buffer *buffer, int cpu); |
172 | void ring_buffer_normalize_time_stamp(struct ring_buffer *buffer, | 173 | void ring_buffer_normalize_time_stamp(struct ring_buffer *buffer, |
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 13950d9027cb..7244acde77b0 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c | |||
@@ -3103,6 +3103,24 @@ ring_buffer_dropped_events_cpu(struct ring_buffer *buffer, int cpu) | |||
3103 | EXPORT_SYMBOL_GPL(ring_buffer_dropped_events_cpu); | 3103 | EXPORT_SYMBOL_GPL(ring_buffer_dropped_events_cpu); |
3104 | 3104 | ||
3105 | /** | 3105 | /** |
3106 | * ring_buffer_read_events_cpu - get the number of events successfully read | ||
3107 | * @buffer: The ring buffer | ||
3108 | * @cpu: The per CPU buffer to get the number of events read | ||
3109 | */ | ||
3110 | unsigned long | ||
3111 | ring_buffer_read_events_cpu(struct ring_buffer *buffer, int cpu) | ||
3112 | { | ||
3113 | struct ring_buffer_per_cpu *cpu_buffer; | ||
3114 | |||
3115 | if (!cpumask_test_cpu(cpu, buffer->cpumask)) | ||
3116 | return 0; | ||
3117 | |||
3118 | cpu_buffer = buffer->buffers[cpu]; | ||
3119 | return cpu_buffer->read; | ||
3120 | } | ||
3121 | EXPORT_SYMBOL_GPL(ring_buffer_read_events_cpu); | ||
3122 | |||
3123 | /** | ||
3106 | * ring_buffer_entries - get the number of entries in a buffer | 3124 | * ring_buffer_entries - get the number of entries in a buffer |
3107 | * @buffer: The ring buffer | 3125 | * @buffer: The ring buffer |
3108 | * | 3126 | * |
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index d399592701aa..90a1c71fdbfc 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
@@ -4430,6 +4430,9 @@ tracing_stats_read(struct file *filp, char __user *ubuf, | |||
4430 | cnt = ring_buffer_dropped_events_cpu(tr->buffer, cpu); | 4430 | cnt = ring_buffer_dropped_events_cpu(tr->buffer, cpu); |
4431 | trace_seq_printf(s, "dropped events: %ld\n", cnt); | 4431 | trace_seq_printf(s, "dropped events: %ld\n", cnt); |
4432 | 4432 | ||
4433 | cnt = ring_buffer_read_events_cpu(tr->buffer, cpu); | ||
4434 | trace_seq_printf(s, "read events: %ld\n", cnt); | ||
4435 | |||
4433 | count = simple_read_from_buffer(ubuf, count, ppos, s->buffer, s->len); | 4436 | count = simple_read_from_buffer(ubuf, count, ppos, s->buffer, s->len); |
4434 | 4437 | ||
4435 | kfree(s); | 4438 | kfree(s); |