]>
exis.tech > repos - linux.git/blob - include/linux/simple_ring_buffer.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _LINUX_SIMPLE_RING_BUFFER_H
3 #define _LINUX_SIMPLE_RING_BUFFER_H
5 #include <linux/list.h>
6 #include <linux/ring_buffer.h>
7 #include <linux/ring_buffer_types.h>
8 #include <linux/types.h>
11 * Ideally those struct would stay private but the caller needs to know
12 * the allocation size for simple_ring_buffer_init().
14 struct simple_buffer_page
{
15 struct list_head link
;
16 struct buffer_data_page
*page
;
22 struct simple_rb_per_cpu
{
23 struct simple_buffer_page
*tail_page
;
24 struct simple_buffer_page
*reader_page
;
25 struct simple_buffer_page
*head_page
;
26 struct simple_buffer_page
*bpages
;
27 struct trace_buffer_meta
*meta
;
30 #define SIMPLE_RB_UNAVAILABLE 0
31 #define SIMPLE_RB_READY 1
32 #define SIMPLE_RB_WRITING 2
38 struct simple_rb_cbs
*cbs
;
41 int simple_ring_buffer_init(struct simple_rb_per_cpu
*cpu_buffer
, struct simple_buffer_page
*bpages
,
42 const struct ring_buffer_desc
*desc
);
44 void simple_ring_buffer_unload(struct simple_rb_per_cpu
*cpu_buffer
);
46 void *simple_ring_buffer_reserve(struct simple_rb_per_cpu
*cpu_buffer
, unsigned long length
,
49 void simple_ring_buffer_commit(struct simple_rb_per_cpu
*cpu_buffer
);
51 int simple_ring_buffer_enable_tracing(struct simple_rb_per_cpu
*cpu_buffer
, bool enable
);
53 int simple_ring_buffer_reset(struct simple_rb_per_cpu
*cpu_buffer
);
55 int simple_ring_buffer_swap_reader_page(struct simple_rb_per_cpu
*cpu_buffer
);
57 int simple_ring_buffer_init_mm(struct simple_rb_per_cpu
*cpu_buffer
,
58 struct simple_buffer_page
*bpages
,
59 const struct ring_buffer_desc
*desc
,
60 void *(*load_page
)(unsigned long va
),
61 void (*unload_page
)(void *va
));
63 void simple_ring_buffer_unload_mm(struct simple_rb_per_cpu
*cpu_buffer
,
64 void (*unload_page
)(void *));