]> exis.tech > repos - linux.git/blob - include/linux/simple_ring_buffer.h
Linux 7.1
[linux.git] / 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
4
5 #include <linux/list.h>
6 #include <linux/ring_buffer.h>
7 #include <linux/ring_buffer_types.h>
8 #include <linux/types.h>
9
10 /*
11 * Ideally those struct would stay private but the caller needs to know
12 * the allocation size for simple_ring_buffer_init().
13 */
14 struct simple_buffer_page {
15 struct list_head link;
16 struct buffer_data_page *page;
17 u64 entries;
18 u32 write;
19 u32 id;
20 };
21
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;
28 u32 nr_pages;
29
30 #define SIMPLE_RB_UNAVAILABLE 0
31 #define SIMPLE_RB_READY 1
32 #define SIMPLE_RB_WRITING 2
33 u32 status;
34
35 u64 last_overrun;
36 u64 write_stamp;
37
38 struct simple_rb_cbs *cbs;
39 };
40
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);
43
44 void simple_ring_buffer_unload(struct simple_rb_per_cpu *cpu_buffer);
45
46 void *simple_ring_buffer_reserve(struct simple_rb_per_cpu *cpu_buffer, unsigned long length,
47 u64 timestamp);
48
49 void simple_ring_buffer_commit(struct simple_rb_per_cpu *cpu_buffer);
50
51 int simple_ring_buffer_enable_tracing(struct simple_rb_per_cpu *cpu_buffer, bool enable);
52
53 int simple_ring_buffer_reset(struct simple_rb_per_cpu *cpu_buffer);
54
55 int simple_ring_buffer_swap_reader_page(struct simple_rb_per_cpu *cpu_buffer);
56
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));
62
63 void simple_ring_buffer_unload_mm(struct simple_rb_per_cpu *cpu_buffer,
64 void (*unload_page)(void *));
65 #endif