mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-05-05 09:57:21 +02:00
635923081c
Add load/unload callback used for each admitted page in the ring-buffer. This will be later useful for the pKVM hypervisor which uses a different VA space and need to dynamically map/unmap the ring-buffer pages. Link: https://patch.msgid.link/20260309162516.2623589-18-vdonnefort@google.com Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org> Signed-off-by: Vincent Donnefort <vdonnefort@google.com> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
66 lines
1.9 KiB
C
66 lines
1.9 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _LINUX_SIMPLE_RING_BUFFER_H
|
|
#define _LINUX_SIMPLE_RING_BUFFER_H
|
|
|
|
#include <linux/list.h>
|
|
#include <linux/ring_buffer.h>
|
|
#include <linux/ring_buffer_types.h>
|
|
#include <linux/types.h>
|
|
|
|
/*
|
|
* Ideally those struct would stay private but the caller needs to know
|
|
* the allocation size for simple_ring_buffer_init().
|
|
*/
|
|
struct simple_buffer_page {
|
|
struct list_head link;
|
|
struct buffer_data_page *page;
|
|
u64 entries;
|
|
u32 write;
|
|
u32 id;
|
|
};
|
|
|
|
struct simple_rb_per_cpu {
|
|
struct simple_buffer_page *tail_page;
|
|
struct simple_buffer_page *reader_page;
|
|
struct simple_buffer_page *head_page;
|
|
struct simple_buffer_page *bpages;
|
|
struct trace_buffer_meta *meta;
|
|
u32 nr_pages;
|
|
|
|
#define SIMPLE_RB_UNAVAILABLE 0
|
|
#define SIMPLE_RB_READY 1
|
|
#define SIMPLE_RB_WRITING 2
|
|
u32 status;
|
|
|
|
u64 last_overrun;
|
|
u64 write_stamp;
|
|
|
|
struct simple_rb_cbs *cbs;
|
|
};
|
|
|
|
int simple_ring_buffer_init(struct simple_rb_per_cpu *cpu_buffer, struct simple_buffer_page *bpages,
|
|
const struct ring_buffer_desc *desc);
|
|
|
|
void simple_ring_buffer_unload(struct simple_rb_per_cpu *cpu_buffer);
|
|
|
|
void *simple_ring_buffer_reserve(struct simple_rb_per_cpu *cpu_buffer, unsigned long length,
|
|
u64 timestamp);
|
|
|
|
void simple_ring_buffer_commit(struct simple_rb_per_cpu *cpu_buffer);
|
|
|
|
int simple_ring_buffer_enable_tracing(struct simple_rb_per_cpu *cpu_buffer, bool enable);
|
|
|
|
int simple_ring_buffer_reset(struct simple_rb_per_cpu *cpu_buffer);
|
|
|
|
int simple_ring_buffer_swap_reader_page(struct simple_rb_per_cpu *cpu_buffer);
|
|
|
|
int simple_ring_buffer_init_mm(struct simple_rb_per_cpu *cpu_buffer,
|
|
struct simple_buffer_page *bpages,
|
|
const struct ring_buffer_desc *desc,
|
|
void *(*load_page)(unsigned long va),
|
|
void (*unload_page)(void *va));
|
|
|
|
void simple_ring_buffer_unload_mm(struct simple_rb_per_cpu *cpu_buffer,
|
|
void (*unload_page)(void *));
|
|
#endif
|