Skip to content

Commit 60bc720

Browse files
committed
ring-buffer: Make ring_buffer_{un}map() simpler with guard(mutex)
Convert the taking of the buffer->mutex and the cpu_buffer->mapping_lock over to guard(mutex) and simplify the ring_buffer_map() and ring_buffer_unmap() functions. Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Cc: Vincent Donnefort <vdonnefort@google.com> Link: https://lore.kernel.org/20250527122009.267efb72@gandalf.local.home Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
1 parent b2e7c6e commit 60bc720

File tree

1 file changed

+11
-24
lines changed

1 file changed

+11
-24
lines changed

kernel/trace/ring_buffer.c

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7161,36 +7161,34 @@ int ring_buffer_map(struct trace_buffer *buffer, int cpu,
71617161
{
71627162
struct ring_buffer_per_cpu *cpu_buffer;
71637163
unsigned long flags, *subbuf_ids;
7164-
int err = 0;
7164+
int err;
71657165

71667166
if (!cpumask_test_cpu(cpu, buffer->cpumask))
71677167
return -EINVAL;
71687168

71697169
cpu_buffer = buffer->buffers[cpu];
71707170

7171-
mutex_lock(&cpu_buffer->mapping_lock);
7171+
guard(mutex)(&cpu_buffer->mapping_lock);
71727172

71737173
if (cpu_buffer->user_mapped) {
71747174
err = __rb_map_vma(cpu_buffer, vma);
71757175
if (!err)
71767176
err = __rb_inc_dec_mapped(cpu_buffer, true);
7177-
mutex_unlock(&cpu_buffer->mapping_lock);
71787177
return err;
71797178
}
71807179

71817180
/* prevent another thread from changing buffer/sub-buffer sizes */
7182-
mutex_lock(&buffer->mutex);
7181+
guard(mutex)(&buffer->mutex);
71837182

71847183
err = rb_alloc_meta_page(cpu_buffer);
71857184
if (err)
7186-
goto unlock;
7185+
return err;
71877186

71887187
/* subbuf_ids include the reader while nr_pages does not */
71897188
subbuf_ids = kcalloc(cpu_buffer->nr_pages + 1, sizeof(*subbuf_ids), GFP_KERNEL);
71907189
if (!subbuf_ids) {
71917190
rb_free_meta_page(cpu_buffer);
7192-
err = -ENOMEM;
7193-
goto unlock;
7191+
return -ENOMEM;
71947192
}
71957193

71967194
atomic_inc(&cpu_buffer->resize_disabled);
@@ -7218,35 +7216,29 @@ int ring_buffer_map(struct trace_buffer *buffer, int cpu,
72187216
atomic_dec(&cpu_buffer->resize_disabled);
72197217
}
72207218

7221-
unlock:
7222-
mutex_unlock(&buffer->mutex);
7223-
mutex_unlock(&cpu_buffer->mapping_lock);
7224-
7225-
return err;
7219+
return 0;
72267220
}
72277221

72287222
int ring_buffer_unmap(struct trace_buffer *buffer, int cpu)
72297223
{
72307224
struct ring_buffer_per_cpu *cpu_buffer;
72317225
unsigned long flags;
7232-
int err = 0;
72337226

72347227
if (!cpumask_test_cpu(cpu, buffer->cpumask))
72357228
return -EINVAL;
72367229

72377230
cpu_buffer = buffer->buffers[cpu];
72387231

7239-
mutex_lock(&cpu_buffer->mapping_lock);
7232+
guard(mutex)(&cpu_buffer->mapping_lock);
72407233

72417234
if (!cpu_buffer->user_mapped) {
7242-
err = -ENODEV;
7243-
goto out;
7235+
return -ENODEV;
72447236
} else if (cpu_buffer->user_mapped > 1) {
72457237
__rb_inc_dec_mapped(cpu_buffer, false);
7246-
goto out;
7238+
return 0;
72477239
}
72487240

7249-
mutex_lock(&buffer->mutex);
7241+
guard(mutex)(&buffer->mutex);
72507242
raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
72517243

72527244
/* This is the last user space mapping */
@@ -7261,12 +7253,7 @@ int ring_buffer_unmap(struct trace_buffer *buffer, int cpu)
72617253
rb_free_meta_page(cpu_buffer);
72627254
atomic_dec(&cpu_buffer->resize_disabled);
72637255

7264-
mutex_unlock(&buffer->mutex);
7265-
7266-
out:
7267-
mutex_unlock(&cpu_buffer->mapping_lock);
7268-
7269-
return err;
7256+
return 0;
72707257
}
72717258

72727259
int ring_buffer_map_get_reader(struct trace_buffer *buffer, int cpu)

0 commit comments

Comments
 (0)