mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-30 14:33:24 -04:00
ring-buffer: Remove ring_buffer_per_cpu::mapped
ring_buffer_per_cpu::mapped tracks if a ring-buffer is either mapped by user-space or if it is a persistent buffer. We already have user_mapped for the former and ring_meta for the latter. Get rid of mapped and instead create rb_is_static(). A static ring-buffer cannot be resized, swapped or have its pages extracted. Link: https://patch.msgid.link/20260813131152.3589632-10-vdonnefort@google.com Signed-off-by: Vincent Donnefort <vdonnefort@google.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
committed by
Steven Rostedt
parent
d9b5e22bf2
commit
8b502bf6eb
@@ -514,7 +514,7 @@ struct ring_buffer_per_cpu {
|
||||
int cpu;
|
||||
atomic_t record_disabled;
|
||||
atomic_t resize_disabled;
|
||||
struct trace_buffer *buffer;
|
||||
struct trace_buffer *buffer;
|
||||
raw_spinlock_t reader_lock; /* serialize readers */
|
||||
arch_spinlock_t lock;
|
||||
struct lock_class_key lock_key;
|
||||
@@ -552,7 +552,6 @@ struct ring_buffer_per_cpu {
|
||||
/* pages removed since last reset */
|
||||
unsigned long pages_removed;
|
||||
|
||||
unsigned int mapped;
|
||||
unsigned int user_mapped; /* user space mapping */
|
||||
struct mutex mapping_lock;
|
||||
struct buffer_page **subbuf_ids; /* ID to subbuf VA */
|
||||
@@ -648,6 +647,11 @@ unsigned long rb_subbuf_start(struct trace_buffer *buffer, unsigned long addr)
|
||||
return addr & ~((unsigned long)(rb_subbuf_size(buffer) - 1));
|
||||
}
|
||||
|
||||
static bool rb_is_static(struct ring_buffer_per_cpu *cpu_buffer)
|
||||
{
|
||||
return cpu_buffer->user_mapped || cpu_buffer->remote || cpu_buffer->ring_meta;
|
||||
}
|
||||
|
||||
struct ring_buffer_iter {
|
||||
struct ring_buffer_per_cpu *cpu_buffer;
|
||||
unsigned long head;
|
||||
@@ -2578,7 +2582,6 @@ rb_allocate_cpu_buffer(struct trace_buffer *buffer, long nr_pages, int cpu)
|
||||
* Range mapped buffers have the same restrictions as memory
|
||||
* mapped ones do.
|
||||
*/
|
||||
cpu_buffer->mapped = 1;
|
||||
cpu_buffer->ring_meta = rb_range_meta(buffer, nr_pages, cpu);
|
||||
bpage->page = rb_range_buffer(cpu_buffer, 0);
|
||||
if (!bpage->page)
|
||||
@@ -6667,12 +6670,11 @@ rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer)
|
||||
rb_head_page_activate(cpu_buffer);
|
||||
cpu_buffer->pages_removed = 0;
|
||||
|
||||
if (cpu_buffer->mapped) {
|
||||
rb_update_meta_page(cpu_buffer);
|
||||
if (cpu_buffer->ring_meta) {
|
||||
struct ring_buffer_cpu_meta *meta = cpu_buffer->ring_meta;
|
||||
meta->commit_buffer = meta->head_buffer;
|
||||
}
|
||||
rb_update_meta_page(cpu_buffer);
|
||||
if (cpu_buffer->ring_meta) {
|
||||
struct ring_buffer_cpu_meta *meta = cpu_buffer->ring_meta;
|
||||
|
||||
meta->commit_buffer = meta->head_buffer;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6921,8 +6923,8 @@ int ring_buffer_swap_cpu(struct trace_buffer *buffer_a,
|
||||
cpu_buffer_a = buffer_a->buffers[cpu];
|
||||
cpu_buffer_b = buffer_b->buffers[cpu];
|
||||
|
||||
/* It's up to the callers to not try to swap mapped buffers */
|
||||
if (WARN_ON_ONCE(cpu_buffer_a->mapped || cpu_buffer_b->mapped))
|
||||
/* It's up to the callers to not try to swap static buffers */
|
||||
if (WARN_ON_ONCE(rb_is_static(cpu_buffer_a) || rb_is_static(cpu_buffer_b)))
|
||||
return -EBUSY;
|
||||
|
||||
/* At least make sure the two buffers are somewhat the same */
|
||||
@@ -7134,7 +7136,6 @@ int ring_buffer_read_page(struct trace_buffer *buffer,
|
||||
unsigned int size;
|
||||
unsigned int read;
|
||||
u64 save_timestamp;
|
||||
bool force_memcpy;
|
||||
|
||||
if (!cpumask_test_cpu(cpu, buffer->cpumask))
|
||||
return -1;
|
||||
@@ -7173,8 +7174,6 @@ int ring_buffer_read_page(struct trace_buffer *buffer,
|
||||
/* Check if any events were dropped */
|
||||
missed_events = cpu_buffer->lost_events;
|
||||
|
||||
force_memcpy = cpu_buffer->mapped || cpu_buffer->remote;
|
||||
|
||||
/*
|
||||
* If this page has been partially read or
|
||||
* if len is not big enough to read the rest of the page or
|
||||
@@ -7184,7 +7183,7 @@ int ring_buffer_read_page(struct trace_buffer *buffer,
|
||||
*/
|
||||
if (read || (len < (size - read)) ||
|
||||
cpu_buffer->reader_page == cpu_buffer->commit_page ||
|
||||
force_memcpy) {
|
||||
rb_is_static(cpu_buffer)) {
|
||||
struct buffer_data_page *rpage = cpu_buffer->reader_page->page;
|
||||
unsigned int rpos = read;
|
||||
unsigned int pos = 0;
|
||||
@@ -7633,11 +7632,7 @@ static int __rb_inc_dec_mapped(struct ring_buffer_per_cpu *cpu_buffer,
|
||||
|
||||
lockdep_assert_held(&cpu_buffer->mapping_lock);
|
||||
|
||||
/* mapped is always greater or equal to user_mapped */
|
||||
if (WARN_ON(cpu_buffer->mapped < cpu_buffer->user_mapped))
|
||||
return -EINVAL;
|
||||
|
||||
if (inc && cpu_buffer->mapped == UINT_MAX)
|
||||
if (inc && cpu_buffer->user_mapped == UINT_MAX)
|
||||
return -EBUSY;
|
||||
|
||||
if (WARN_ON(!inc && cpu_buffer->user_mapped == 0))
|
||||
@@ -7646,13 +7641,10 @@ static int __rb_inc_dec_mapped(struct ring_buffer_per_cpu *cpu_buffer,
|
||||
mutex_lock(&cpu_buffer->buffer->mutex);
|
||||
raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
|
||||
|
||||
if (inc) {
|
||||
if (inc)
|
||||
cpu_buffer->user_mapped++;
|
||||
cpu_buffer->mapped++;
|
||||
} else {
|
||||
else
|
||||
cpu_buffer->user_mapped--;
|
||||
cpu_buffer->mapped--;
|
||||
}
|
||||
|
||||
raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
|
||||
mutex_unlock(&cpu_buffer->buffer->mutex);
|
||||
@@ -7824,7 +7816,6 @@ int ring_buffer_map(struct trace_buffer *buffer, int cpu,
|
||||
if (!err) {
|
||||
raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
|
||||
/* This is the first time it is mapped by user */
|
||||
cpu_buffer->mapped++;
|
||||
cpu_buffer->user_mapped = 1;
|
||||
raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
|
||||
} else {
|
||||
@@ -7881,8 +7872,6 @@ int ring_buffer_unmap(struct trace_buffer *buffer, int cpu)
|
||||
raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
|
||||
|
||||
/* This is the last user space mapping */
|
||||
if (!WARN_ON_ONCE(cpu_buffer->mapped < cpu_buffer->user_mapped))
|
||||
cpu_buffer->mapped--;
|
||||
cpu_buffer->user_mapped = 0;
|
||||
|
||||
raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
|
||||
|
||||
Reference in New Issue
Block a user