Add two fields pages_touched and pages_lost to the ring-buffer
meta-page. Those fields are useful to get the number of used pages in
the ring-buffer.

Signed-off-by: Vincent Donnefort <vdonnef...@google.com>

diff --git a/include/uapi/linux/trace_mmap.h b/include/uapi/linux/trace_mmap.h
index c102ef35d11e..e8185889a1c8 100644
--- a/include/uapi/linux/trace_mmap.h
+++ b/include/uapi/linux/trace_mmap.h
@@ -17,8 +17,8 @@
  * @entries:           Number of entries in the ring-buffer.
  * @overrun:           Number of entries lost in the ring-buffer.
  * @read:              Number of entries that have been read.
- * @Reserved1:         Internal use only.
- * @Reserved2:         Internal use only.
+ * @pages_lost:                Number of pages overwritten by the writer.
+ * @pages_touched:     Number of pages written by the writer.
  */
 struct trace_buffer_meta {
        __u32           meta_page_size;
@@ -39,8 +39,8 @@ struct trace_buffer_meta {
        __u64   overrun;
        __u64   read;
 
-       __u64   Reserved1;
-       __u64   Reserved2;
+       __u64   pages_lost;
+       __u64   pages_touched;
 };
 
 #define TRACE_MMAP_IOCTL_GET_READER            _IO('R', 0x20)
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index 3f9bf562beea..06214588c05a 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -6016,6 +6016,8 @@ static void rb_update_meta_page(struct 
ring_buffer_per_cpu *cpu_buffer)
        meta->entries = local_read(&cpu_buffer->entries);
        meta->overrun = local_read(&cpu_buffer->overrun);
        meta->read = cpu_buffer->read;
+       meta->pages_lost = local_read(&cpu_buffer->pages_lost);
+       meta->pages_touched = local_read(&cpu_buffer->pages_touched);
 
        /* Some archs do not have data cache coherency between kernel and 
user-space */
        flush_kernel_vmap_range(cpu_buffer->meta_page, PAGE_SIZE);
-- 
2.49.0.1101.gccaa498523-goog


Reply via email to