From nobody Wed Feb 11 07:48:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CF6B526461F; Sun, 8 Feb 2026 04:01:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770523298; cv=none; b=I16E8Jfl/GS7YRbtiPOxtmeHHxPGLWmlOy30rdZl2CtYKzkOm/pgKTO1nYdfoZ1yB0QTS0XiaaOYzU79+EPHCzgt8+uOs4C8nvTwqE1aFFNj8wMGzzwa9DmjOr4lydNbx7PvYmJvxWl4+zKP4lGISxn2dqZ7Ax0Qh3BFsrKv83M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770523298; c=relaxed/simple; bh=wxJ1fEWXAGH3RY7qXy6g8rkEWdBuR1wBkjnxihRGi+o=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=U1S/DZSEBBxf8Jt2E4l3WxSn3VjUDt6hKp+AU7MujwqUjQYrDe3Q1rKOZlbM31+5F8G8NcBtturZxhdCnHdSHPW2Q/YSm+ImDG+hclQqC65JvXDSxRfdRshgYx3MzhWtD0nH8JbmhNMBi64UCRgEDHvjIKYpakWMSgxEEkNsrdc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=RpZP8pio; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="RpZP8pio" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 74E27C16AAE; Sun, 8 Feb 2026 04:01:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1770523298; bh=wxJ1fEWXAGH3RY7qXy6g8rkEWdBuR1wBkjnxihRGi+o=; h=Date:From:To:Cc:Subject:References:From; b=RpZP8piof8IFYxmW+cGrdI3OFDlr623gj04ImvT9GOuKMrC1bDwrmqLrRuYcqWf2C +Jk1zsUbu1i2g4/iBiJxBuRgsd2IsTnqf0Uckf7ssbhaunjwAvXqdWVpMJbgMh0mXk S6e1JpjOWcLm1ztKYW5xPknLCcTWuGtn25WYq/UenXBIK6P5Nihqv7mbCZxYutYU4v DmeWtmHOX3lQgEE5K8sytSOw71sx8oArf+WpOVi1MgdIQIbp1K5+7TBvN3WGZORjDU 9lYAIGeXafz/uHEV6uUoujUk7zAOILoVJUS6WcWKlatbdLBJVfzv/OfrbWiiyd6YGA SBEXpm4qz48tA== Received: from rostedt by gandalf with local (Exim 4.99.1) (envelope-from ) id 1vow05-0000000AOxY-3hAb; Sat, 07 Feb 2026 23:02:21 -0500 Message-ID: <20260208040221.731421427@kernel.org> User-Agent: quilt/0.68 Date: Sat, 07 Feb 2026 23:01:57 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton Subject: [PATCH v2 1/3] tracing: Rename trace_array field max_buffer to snapshot_buffer References: <20260208040156.005531619@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Steven Rostedt When tracing was first added, there were latency tracers that would take a snapshot of the current trace when a new max latency was hit. This snapshot buffer was called "max_buffer". Since then, a snapshot feature was added that allowed user space or event triggers to trigger a snapshot of the current buffer using the same max_buffer of the trace_array. As this snapshot buffer now has a more generic use case, calling it "max_buffer" is confusing. Rename it to snapshot_buffer. Signed-off-by: Steven Rostedt (Google) --- kernel/trace/trace.c | 72 +++++++++++++++++------------------ kernel/trace/trace.h | 13 ++++--- kernel/trace/trace_selftest.c | 10 ++--- 3 files changed, 48 insertions(+), 47 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 551a452befa0..98524d0656bf 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -934,12 +934,12 @@ int tracing_alloc_snapshot_instance(struct trace_arra= y *tr) =20 /* Make the snapshot buffer have the same order as main buffer */ order =3D ring_buffer_subbuf_order_get(tr->array_buffer.buffer); - ret =3D ring_buffer_subbuf_order_set(tr->max_buffer.buffer, order); + ret =3D ring_buffer_subbuf_order_set(tr->snapshot_buffer.buffer, order); if (ret < 0) return ret; =20 /* allocate spare buffer */ - ret =3D resize_buffer_duplicate_size(&tr->max_buffer, + ret =3D resize_buffer_duplicate_size(&tr->snapshot_buffer, &tr->array_buffer, RING_BUFFER_ALL_CPUS); if (ret < 0) return ret; @@ -957,10 +957,10 @@ static void free_snapshot(struct trace_array *tr) * The max_tr ring buffer has some state (e.g. ring->clock) and * we want preserve it. */ - ring_buffer_subbuf_order_set(tr->max_buffer.buffer, 0); - ring_buffer_resize(tr->max_buffer.buffer, 1, RING_BUFFER_ALL_CPUS); - set_buffer_entries(&tr->max_buffer, 1); - tracing_reset_online_cpus(&tr->max_buffer); + ring_buffer_subbuf_order_set(tr->snapshot_buffer.buffer, 0); + ring_buffer_resize(tr->snapshot_buffer.buffer, 1, RING_BUFFER_ALL_CPUS); + set_buffer_entries(&tr->snapshot_buffer, 1); + tracing_reset_online_cpus(&tr->snapshot_buffer); tr->allocated_snapshot =3D false; } =20 @@ -1556,7 +1556,7 @@ static void __update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu) { struct array_buffer *trace_buf =3D &tr->array_buffer; - struct array_buffer *max_buf =3D &tr->max_buffer; + struct array_buffer *max_buf =3D &tr->snapshot_buffer; struct trace_array_cpu *data =3D per_cpu_ptr(trace_buf->data, cpu); struct trace_array_cpu *max_data =3D per_cpu_ptr(max_buf->data, cpu); =20 @@ -1616,9 +1616,9 @@ update_max_tr(struct trace_array *tr, struct task_str= uct *tsk, int cpu, =20 /* Inherit the recordable setting from array_buffer */ if (ring_buffer_record_is_set_on(tr->array_buffer.buffer)) - ring_buffer_record_on(tr->max_buffer.buffer); + ring_buffer_record_on(tr->snapshot_buffer.buffer); else - ring_buffer_record_off(tr->max_buffer.buffer); + ring_buffer_record_off(tr->snapshot_buffer.buffer); =20 #ifdef CONFIG_TRACER_SNAPSHOT if (tr->cond_snapshot && !tr->cond_snapshot->update(tr, cond_data)) { @@ -1626,7 +1626,7 @@ update_max_tr(struct trace_array *tr, struct task_str= uct *tsk, int cpu, return; } #endif - swap(tr->array_buffer.buffer, tr->max_buffer.buffer); + swap(tr->array_buffer.buffer, tr->snapshot_buffer.buffer); =20 __update_max_tr(tr, tsk, cpu); =20 @@ -1661,7 +1661,7 @@ update_max_tr_single(struct trace_array *tr, struct t= ask_struct *tsk, int cpu) =20 arch_spin_lock(&tr->max_lock); =20 - ret =3D ring_buffer_swap_cpu(tr->max_buffer.buffer, tr->array_buffer.buff= er, cpu); + ret =3D ring_buffer_swap_cpu(tr->snapshot_buffer.buffer, tr->array_buffer= .buffer, cpu); =20 if (ret =3D=3D -EBUSY) { /* @@ -1671,7 +1671,7 @@ update_max_tr_single(struct trace_array *tr, struct t= ask_struct *tsk, int cpu) * and flag that it failed. * Another reason is resize is in progress. */ - trace_array_printk_buf(tr->max_buffer.buffer, _THIS_IP_, + trace_array_printk_buf(tr->snapshot_buffer.buffer, _THIS_IP_, "Failed to swap buffers due to commit or resize in progress\n"); } =20 @@ -1722,7 +1722,7 @@ static int wait_on_pipe(struct trace_iterator *iter, = int full) * to happen, this would now be the main buffer. */ if (iter->snapshot) - iter->array_buffer =3D &iter->tr->max_buffer; + iter->array_buffer =3D &iter->tr->snapshot_buffer; #endif return ret; } @@ -1790,7 +1790,7 @@ static int run_tracer_selftest(struct tracer *type) if (type->use_max_tr) { /* If we expanded the buffers, make sure the max is expanded too */ if (tr->ring_buffer_expanded) - ring_buffer_resize(tr->max_buffer.buffer, trace_buf_size, + ring_buffer_resize(tr->snapshot_buffer.buffer, trace_buf_size, RING_BUFFER_ALL_CPUS); tr->allocated_snapshot =3D true; } @@ -1817,7 +1817,7 @@ static int run_tracer_selftest(struct tracer *type) =20 /* Shrink the max buffer again */ if (tr->ring_buffer_expanded) - ring_buffer_resize(tr->max_buffer.buffer, 1, + ring_buffer_resize(tr->snapshot_buffer.buffer, 1, RING_BUFFER_ALL_CPUS); } #endif @@ -2060,7 +2060,7 @@ void tracing_reset_all_online_cpus_unlocked(void) tr->clear_trace =3D false; tracing_reset_online_cpus(&tr->array_buffer); #ifdef CONFIG_TRACER_MAX_TRACE - tracing_reset_online_cpus(&tr->max_buffer); + tracing_reset_online_cpus(&tr->snapshot_buffer); #endif } } @@ -2100,7 +2100,7 @@ static void tracing_start_tr(struct trace_array *tr) ring_buffer_record_enable(buffer); =20 #ifdef CONFIG_TRACER_MAX_TRACE - buffer =3D tr->max_buffer.buffer; + buffer =3D tr->snapshot_buffer.buffer; if (buffer) ring_buffer_record_enable(buffer); #endif @@ -2136,7 +2136,7 @@ static void tracing_stop_tr(struct trace_array *tr) ring_buffer_record_disable(buffer); =20 #ifdef CONFIG_TRACER_MAX_TRACE - buffer =3D tr->max_buffer.buffer; + buffer =3D tr->snapshot_buffer.buffer; if (buffer) ring_buffer_record_disable(buffer); #endif @@ -3943,7 +3943,7 @@ __tracing_open(struct inode *inode, struct file *file= , bool snapshot) #ifdef CONFIG_TRACER_MAX_TRACE /* Currently only the top directory has a snapshot */ if (tr->current_trace->print_max || snapshot) - iter->array_buffer =3D &tr->max_buffer; + iter->array_buffer =3D &tr->snapshot_buffer; else #endif iter->array_buffer =3D &tr->array_buffer; @@ -4146,7 +4146,7 @@ static int tracing_open(struct inode *inode, struct f= ile *file) =20 #ifdef CONFIG_TRACER_MAX_TRACE if (tr->current_trace->print_max) - trace_buf =3D &tr->max_buffer; + trace_buf =3D &tr->snapshot_buffer; #endif =20 if (cpu =3D=3D RING_BUFFER_ALL_CPUS) @@ -4359,14 +4359,14 @@ int tracing_set_cpumask(struct trace_array *tr, !cpumask_test_cpu(cpu, tracing_cpumask_new)) { ring_buffer_record_disable_cpu(tr->array_buffer.buffer, cpu); #ifdef CONFIG_TRACER_MAX_TRACE - ring_buffer_record_disable_cpu(tr->max_buffer.buffer, cpu); + ring_buffer_record_disable_cpu(tr->snapshot_buffer.buffer, cpu); #endif } if (!cpumask_test_cpu(cpu, tr->tracing_cpumask) && cpumask_test_cpu(cpu, tracing_cpumask_new)) { ring_buffer_record_enable_cpu(tr->array_buffer.buffer, cpu); #ifdef CONFIG_TRACER_MAX_TRACE - ring_buffer_record_enable_cpu(tr->max_buffer.buffer, cpu); + ring_buffer_record_enable_cpu(tr->snapshot_buffer.buffer, cpu); #endif } } @@ -4576,7 +4576,7 @@ int set_tracer_flag(struct trace_array *tr, u64 mask,= int enabled) case TRACE_ITER(OVERWRITE): ring_buffer_change_overwrite(tr->array_buffer.buffer, enabled); #ifdef CONFIG_TRACER_MAX_TRACE - ring_buffer_change_overwrite(tr->max_buffer.buffer, enabled); + ring_buffer_change_overwrite(tr->snapshot_buffer.buffer, enabled); #endif break; =20 @@ -5294,7 +5294,7 @@ static int __tracing_resize_ring_buffer(struct trace_= array *tr, if (!tr->allocated_snapshot) goto out; =20 - ret =3D ring_buffer_resize(tr->max_buffer.buffer, size, cpu); + ret =3D ring_buffer_resize(tr->snapshot_buffer.buffer, size, cpu); if (ret < 0) { int r =3D resize_buffer_duplicate_size(&tr->array_buffer, &tr->array_buffer, cpu); @@ -5319,7 +5319,7 @@ static int __tracing_resize_ring_buffer(struct trace_= array *tr, goto out_start; } =20 - update_buffer_entries(&tr->max_buffer, cpu); + update_buffer_entries(&tr->snapshot_buffer, cpu); =20 out: #endif /* CONFIG_TRACER_MAX_TRACE */ @@ -7036,9 +7036,9 @@ int tracing_set_clock(struct trace_array *tr, const c= har *clockstr) tracing_reset_online_cpus(&tr->array_buffer); =20 #ifdef CONFIG_TRACER_MAX_TRACE - if (tr->max_buffer.buffer) - ring_buffer_set_clock(tr->max_buffer.buffer, trace_clocks[i].func); - tracing_reset_online_cpus(&tr->max_buffer); + if (tr->snapshot_buffer.buffer) + ring_buffer_set_clock(tr->snapshot_buffer.buffer, trace_clocks[i].func); + tracing_reset_online_cpus(&tr->snapshot_buffer); #endif =20 if (tr->scratch && !(tr->flags & TRACE_ARRAY_FL_LAST_BOOT)) { @@ -7170,7 +7170,7 @@ static int tracing_snapshot_open(struct inode *inode,= struct file *file) ret =3D 0; =20 iter->tr =3D tr; - iter->array_buffer =3D &tr->max_buffer; + iter->array_buffer =3D &tr->snapshot_buffer; iter->cpu_file =3D tracing_get_cpu(inode); m->private =3D iter; file->private_data =3D m; @@ -7233,7 +7233,7 @@ tracing_snapshot_write(struct file *filp, const char = __user *ubuf, size_t cnt, return -EINVAL; #endif if (tr->allocated_snapshot) - ret =3D resize_buffer_duplicate_size(&tr->max_buffer, + ret =3D resize_buffer_duplicate_size(&tr->snapshot_buffer, &tr->array_buffer, iter->cpu_file); =20 ret =3D tracing_arm_snapshot_locked(tr); @@ -7254,9 +7254,9 @@ tracing_snapshot_write(struct file *filp, const char = __user *ubuf, size_t cnt, default: if (tr->allocated_snapshot) { if (iter->cpu_file =3D=3D RING_BUFFER_ALL_CPUS) - tracing_reset_online_cpus(&tr->max_buffer); + tracing_reset_online_cpus(&tr->snapshot_buffer); else - tracing_reset_cpu(&tr->max_buffer, iter->cpu_file); + tracing_reset_cpu(&tr->snapshot_buffer, iter->cpu_file); } break; } @@ -7312,7 +7312,7 @@ static int snapshot_raw_open(struct inode *inode, str= uct file *filp) } =20 info->iter.snapshot =3D true; - info->iter.array_buffer =3D &info->iter.tr->max_buffer; + info->iter.array_buffer =3D &info->iter.tr->snapshot_buffer; =20 return ret; } @@ -9195,7 +9195,7 @@ buffer_subbuf_size_write(struct file *filp, const cha= r __user *ubuf, if (!tr->allocated_snapshot) goto out_max; =20 - ret =3D ring_buffer_subbuf_order_set(tr->max_buffer.buffer, order); + ret =3D ring_buffer_subbuf_order_set(tr->snapshot_buffer.buffer, order); if (ret) { /* Put back the old order */ cnt =3D ring_buffer_subbuf_order_set(tr->array_buffer.buffer, old_order); @@ -9416,7 +9416,7 @@ static int allocate_trace_buffers(struct trace_array = *tr, int size) if (tr->range_addr_start) return 0; =20 - ret =3D allocate_trace_buffer(tr, &tr->max_buffer, + ret =3D allocate_trace_buffer(tr, &tr->snapshot_buffer, allocate_snapshot ? size : 1); if (MEM_FAIL(ret, "Failed to allocate trace buffer\n")) { free_trace_buffer(&tr->array_buffer); @@ -9439,7 +9439,7 @@ static void free_trace_buffers(struct trace_array *tr) kfree(tr->module_delta); =20 #ifdef CONFIG_TRACER_MAX_TRACE - free_trace_buffer(&tr->max_buffer); + free_trace_buffer(&tr->snapshot_buffer); #endif } =20 diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index 6b0fedf2f532..b50383aa8e50 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h @@ -331,17 +331,18 @@ struct trace_array { struct array_buffer array_buffer; #ifdef CONFIG_TRACER_MAX_TRACE /* - * The max_buffer is used to snapshot the trace when a maximum + * The snapshot_buffer is used to snapshot the trace when a maximum * latency is reached, or when the user initiates a snapshot. * Some tracers will use this to store a maximum trace while * it continues examining live traces. * - * The buffers for the max_buffer are set up the same as the array_buffer - * When a snapshot is taken, the buffer of the max_buffer is swapped - * with the buffer of the array_buffer and the buffers are reset for - * the array_buffer so the tracing can continue. + * The buffers for the snapshot_buffer are set up the same as the + * array_buffer. When a snapshot is taken, the buffer of the + * snapshot_buffer is swapped with the buffer of the array_buffer + * and the buffers are reset for the array_buffer so the tracing can + * continue. */ - struct array_buffer max_buffer; + struct array_buffer snapshot_buffer; bool allocated_snapshot; spinlock_t snapshot_trigger_lock; unsigned int snapshot; diff --git a/kernel/trace/trace_selftest.c b/kernel/trace/trace_selftest.c index d88c44f1dfa5..be53fe6fee6a 100644 --- a/kernel/trace/trace_selftest.c +++ b/kernel/trace/trace_selftest.c @@ -1225,7 +1225,7 @@ trace_selftest_startup_irqsoff(struct tracer *trace, = struct trace_array *tr) /* check both trace buffers */ ret =3D trace_test_buffer(&tr->array_buffer, NULL); if (!ret) - ret =3D trace_test_buffer(&tr->max_buffer, &count); + ret =3D trace_test_buffer(&tr->snapshot_buffer, &count); trace->reset(tr); tracing_start(); =20 @@ -1287,7 +1287,7 @@ trace_selftest_startup_preemptoff(struct tracer *trac= e, struct trace_array *tr) /* check both trace buffers */ ret =3D trace_test_buffer(&tr->array_buffer, NULL); if (!ret) - ret =3D trace_test_buffer(&tr->max_buffer, &count); + ret =3D trace_test_buffer(&tr->snapshot_buffer, &count); trace->reset(tr); tracing_start(); =20 @@ -1355,7 +1355,7 @@ trace_selftest_startup_preemptirqsoff(struct tracer *= trace, struct trace_array * if (ret) goto out; =20 - ret =3D trace_test_buffer(&tr->max_buffer, &count); + ret =3D trace_test_buffer(&tr->snapshot_buffer, &count); if (ret) goto out; =20 @@ -1385,7 +1385,7 @@ trace_selftest_startup_preemptirqsoff(struct tracer *= trace, struct trace_array * if (ret) goto out; =20 - ret =3D trace_test_buffer(&tr->max_buffer, &count); + ret =3D trace_test_buffer(&tr->snapshot_buffer, &count); =20 if (!ret && !count) { printk(KERN_CONT ".. no entries found .."); @@ -1513,7 +1513,7 @@ trace_selftest_startup_wakeup(struct tracer *trace, s= truct trace_array *tr) /* check both trace buffers */ ret =3D trace_test_buffer(&tr->array_buffer, NULL); if (!ret) - ret =3D trace_test_buffer(&tr->max_buffer, &count); + ret =3D trace_test_buffer(&tr->snapshot_buffer, &count); =20 =20 trace->reset(tr); --=20 2.51.0 From nobody Wed Feb 11 07:48:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CF5F714A8B; Sun, 8 Feb 2026 04:01:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770523298; cv=none; b=hbPbk3JCdd9PQsgCVgapChw840ixRE2ZxEGhZtpQNQk7THtvv+YrrG6iO9L41ugIhK7ZZ+AnK+qwehYLnzfhNMDrVcpOsp3vg9kTBQtgxfFxVjeO7WSBYh6pm2R47x3/utZkpdOtmhEf2AjqyJmI9+P+7oXmBZobHG5HfClesMs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770523298; c=relaxed/simple; bh=ql2zJ7yH3Gkyvmwm8Jiyo5Y6GG/xDqRKqc5E/FpVFqE=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=HRA4QGSvYua825WuMBpU1XE5bFk2XDp19DHB9R/93fxqtkzEnQt0K6NGV/lpkKbXlDLK1HHCbIHbPe0chHITifD+DI94UJKkKv7hf7PydGTcMq9ap6g7Q37B8EmAlFhYWzngW9YNHeiXHwDXyQPfT2qV3meBSuwJtquLGoWZmvY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=r2mCf0ME; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="r2mCf0ME" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8912AC2BC86; Sun, 8 Feb 2026 04:01:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1770523298; bh=ql2zJ7yH3Gkyvmwm8Jiyo5Y6GG/xDqRKqc5E/FpVFqE=; h=Date:From:To:Cc:Subject:References:From; b=r2mCf0MEdfc4Yi8rVCEl2PyoZvv1E+C6fprjXl//H1DOqRmKBEl+W0drRhmHDA+Um GIAeheOK9TasexKRuraNeUasDACRO0DH9ZokwP2jjTSeisGYNooIgfoU443lTZlmPm rhjgGlW+/VPGz8B/7NlPSVgW2XM0NMRzcyLRLKxLmLtP4WQtHDQ/4ozQjc9SJ537JV UBTN3Jj9P+XVYc5y+S5wS8mU8DJ7C+Ar6Z6IumagGOX0Bju0ze5KzS1t/O6LB3EKL+ HKwgfNtdiBk+8bV/+2yqrTP1XdvI6ikyR3mPLG3HembBTlEsthPReyIfZ53z/FoWdL FkL9PoZfzbIzQ== Received: from rostedt by gandalf with local (Exim 4.99.1) (envelope-from ) id 1vow06-0000000AOy2-0CdK; Sat, 07 Feb 2026 23:02:22 -0500 Message-ID: <20260208040221.900653834@kernel.org> User-Agent: quilt/0.68 Date: Sat, 07 Feb 2026 23:01:58 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton Subject: [PATCH v2 2/3] tracing: Add tracer_uses_snapshot() helper to remove #ifdefs References: <20260208040156.005531619@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Steven Rostedt Instead of having #ifdef CONFIG_TRACER_MAX_TRACE around every access to the struct tracer's use_max_tr field, add a helper function for that access and if CONFIG_TRACER_MAX_TRACE is not configured it just returns false. Signed-off-by: Steven Rostedt (Google) --- kernel/trace/trace.c | 52 +++++++++++++++----------------------------- kernel/trace/trace.h | 12 ++++++++++ 2 files changed, 29 insertions(+), 35 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 98524d0656bf..9fbb124e87dc 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -810,7 +810,6 @@ EXPORT_SYMBOL_GPL(tracing_on); static void tracing_snapshot_instance_cond(struct trace_array *tr, void *cond_data) { - struct tracer *tracer =3D tr->current_trace; unsigned long flags; =20 if (in_nmi()) { @@ -827,7 +826,7 @@ static void tracing_snapshot_instance_cond(struct trace= _array *tr, } =20 /* Note, snapshot can not be used when the tracer uses it */ - if (tracer->use_max_tr) { + if (tracer_uses_snapshot(tr->current_trace)) { trace_array_puts(tr, "*** LATENCY TRACER ACTIVE ***\n"); trace_array_puts(tr, "*** Can not use snapshot (sorry) ***\n"); return; @@ -1076,7 +1075,7 @@ int tracing_snapshot_cond_enable(struct trace_array *= tr, void *cond_data, =20 guard(mutex)(&trace_types_lock); =20 - if (tr->current_trace->use_max_tr) + if (tracer_uses_snapshot(tr->current_trace)) return -EBUSY; =20 /* @@ -1787,7 +1786,7 @@ static int run_tracer_selftest(struct tracer *type) tr->current_trace_flags =3D type->flags ? : type->default_flags; =20 #ifdef CONFIG_TRACER_MAX_TRACE - if (type->use_max_tr) { + if (tracer_uses_snapshot(type)) { /* If we expanded the buffers, make sure the max is expanded too */ if (tr->ring_buffer_expanded) ring_buffer_resize(tr->snapshot_buffer.buffer, trace_buf_size, @@ -1812,7 +1811,7 @@ static int run_tracer_selftest(struct tracer *type) tracing_reset_online_cpus(&tr->array_buffer); =20 #ifdef CONFIG_TRACER_MAX_TRACE - if (type->use_max_tr) { + if (tracer_uses_snapshot(type)) { tr->allocated_snapshot =3D false; =20 /* Shrink the max buffer again */ @@ -3240,10 +3239,8 @@ static void *s_start(struct seq_file *m, loff_t *pos) } mutex_unlock(&trace_types_lock); =20 -#ifdef CONFIG_TRACER_MAX_TRACE - if (iter->snapshot && iter->trace->use_max_tr) + if (iter->snapshot && tracer_uses_snapshot(iter->trace)) return ERR_PTR(-EBUSY); -#endif =20 if (*pos !=3D iter->pos) { iter->ent =3D NULL; @@ -3282,10 +3279,8 @@ static void s_stop(struct seq_file *m, void *p) { struct trace_iterator *iter =3D m->private; =20 -#ifdef CONFIG_TRACER_MAX_TRACE - if (iter->snapshot && iter->trace->use_max_tr) + if (iter->snapshot && tracer_uses_snapshot(iter->trace)) return; -#endif =20 trace_access_unlock(iter->cpu_file); trace_event_read_unlock(); @@ -4177,11 +4172,9 @@ static int tracing_open(struct inode *inode, struct = file *file) static bool trace_ok_for_array(struct tracer *t, struct trace_array *tr) { -#ifdef CONFIG_TRACER_SNAPSHOT /* arrays with mapped buffer range do not have snapshots */ - if (tr->range_addr_start && t->use_max_tr) + if (tr->range_addr_start && tracer_uses_snapshot(t)) return false; -#endif return (tr->flags & TRACE_ARRAY_FL_GLOBAL) || t->allow_instances; } =20 @@ -5579,8 +5572,7 @@ int tracing_set_tracer(struct trace_array *tr, const = char *buf) if (trace =3D=3D tr->current_trace) return 0; =20 -#ifdef CONFIG_TRACER_SNAPSHOT - if (trace->use_max_tr) { + if (tracer_uses_snapshot(trace)) { local_irq_disable(); arch_spin_lock(&tr->max_lock); ret =3D tr->cond_snapshot ? -EBUSY : 0; @@ -5589,7 +5581,7 @@ int tracing_set_tracer(struct trace_array *tr, const = char *buf) if (ret) return ret; } -#endif + /* Some tracers won't work on kernel command line */ if (system_state < SYSTEM_RUNNING && trace->noboot) { pr_warn("Tracer '%s' is not allowed on command line, ignored\n", @@ -5612,14 +5604,13 @@ int tracing_set_tracer(struct trace_array *tr, cons= t char *buf) if (tr->current_trace->reset) tr->current_trace->reset(tr); =20 -#ifdef CONFIG_TRACER_MAX_TRACE - had_max_tr =3D tr->current_trace->use_max_tr; + had_max_tr =3D tracer_uses_snapshot(tr->current_trace); =20 /* Current trace needs to be nop_trace before synchronize_rcu */ tr->current_trace =3D &nop_trace; tr->current_trace_flags =3D nop_trace.flags; =20 - if (had_max_tr && !trace->use_max_tr) { + if (had_max_tr && !tracer_uses_snapshot(trace)) { /* * We need to make sure that the update_max_tr sees that * current_trace changed to nop_trace to keep it from @@ -5632,24 +5623,19 @@ int tracing_set_tracer(struct trace_array *tr, cons= t char *buf) tracing_disarm_snapshot(tr); } =20 - if (!had_max_tr && trace->use_max_tr) { + if (!had_max_tr && tracer_uses_snapshot(trace)) { ret =3D tracing_arm_snapshot_locked(tr); if (ret) return ret; } -#else - tr->current_trace =3D &nop_trace; -#endif =20 tr->current_trace_flags =3D t->flags ? : t->tracer->flags; =20 if (trace->init) { ret =3D tracer_init(trace, tr); if (ret) { -#ifdef CONFIG_TRACER_MAX_TRACE - if (trace->use_max_tr) + if (tracer_uses_snapshot(trace)) tracing_disarm_snapshot(tr); -#endif tr->current_trace_flags =3D nop_trace.flags; return ret; } @@ -7207,7 +7193,7 @@ tracing_snapshot_write(struct file *filp, const char = __user *ubuf, size_t cnt, =20 guard(mutex)(&trace_types_lock); =20 - if (tr->current_trace->use_max_tr) + if (tracer_uses_snapshot(tr->current_trace)) return -EBUSY; =20 local_irq_disable(); @@ -7306,7 +7292,7 @@ static int snapshot_raw_open(struct inode *inode, str= uct file *filp) =20 info =3D filp->private_data; =20 - if (info->iter.trace->use_max_tr) { + if (tracer_uses_snapshot(info->iter.trace)) { tracing_buffers_release(inode, filp); return -EBUSY; } @@ -7862,10 +7848,8 @@ tracing_buffers_read(struct file *filp, char __user = *ubuf, if (!count) return 0; =20 -#ifdef CONFIG_TRACER_MAX_TRACE - if (iter->snapshot && iter->tr->current_trace->use_max_tr) + if (iter->snapshot && tracer_uses_snapshot(iter->tr->current_trace)) return -EBUSY; -#endif =20 page_size =3D ring_buffer_subbuf_size_get(iter->array_buffer->buffer); =20 @@ -8049,10 +8033,8 @@ tracing_buffers_splice_read(struct file *file, loff_= t *ppos, int entries, i; ssize_t ret =3D 0; =20 -#ifdef CONFIG_TRACER_MAX_TRACE - if (iter->snapshot && iter->tr->current_trace->use_max_tr) + if (iter->snapshot && tracer_uses_snapshot(iter->tr->current_trace)) return -EBUSY; -#endif =20 page_size =3D ring_buffer_subbuf_size_get(iter->array_buffer->buffer); if (*ppos & (page_size - 1)) diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index b50383aa8e50..ebb47abc0ee7 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h @@ -817,6 +817,18 @@ static inline void __trace_stack(struct trace_array *t= r, unsigned int trace_ctx, } #endif /* CONFIG_STACKTRACE */ =20 +#ifdef CONFIG_TRACER_MAX_TRACE +static inline bool tracer_uses_snapshot(struct tracer *tracer) +{ + return tracer->use_max_tr; +} +#else +static inline bool tracer_uses_snapshot(struct tracer *tracer) +{ + return false; +} +#endif + void trace_last_func_repeats(struct trace_array *tr, struct trace_func_repeats *last_info, unsigned int trace_ctx); --=20 2.51.0 From nobody Wed Feb 11 07:48:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F0D2B288515; Sun, 8 Feb 2026 04:01:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770523299; cv=none; b=UFGF2YyWikQv/z9Sa3dG3uV3JVIFIylUF+FqFpJtKTAhtkbSs7LRjXQ9GrtF4RaC3APq1b4VWDc/zin6T1tknPW83yPZyc5JwdpitWzsCdaZoWGqcX8gUl1WVEhsIC2Ek3fzqFli7GdHR7pTnlU73LQFE1rR1S1dTLcCVXo+6XI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770523299; c=relaxed/simple; bh=Ul02+782QirWIXwYb/5iiAQRH2/EyWS+PXIYcseE1R4=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=IvB7HZ5ssQmTbaNTuzvVM/Z3OVIhhhoJqA/awpKwNwtD10RofRGAtBYMMjSGDVIjLmiMyATGrZwxd93kYvGzMzyvpCUAoeAwHs2JKhBlQ/K1fh8D5CMPv32oRc7asZanYoaFC4Sy8T3XQxcRKHeQGvTMQZyOTy7ESdxFEebABQQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Gwyqc905; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Gwyqc905" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B001CC2BC87; Sun, 8 Feb 2026 04:01:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1770523298; bh=Ul02+782QirWIXwYb/5iiAQRH2/EyWS+PXIYcseE1R4=; h=Date:From:To:Cc:Subject:References:From; b=Gwyqc905h5hupRAjgsanpHyzNaTSlXFDF9nXRaZW5bvwA/Iho7YctdKkKMj7T1bNi PPb2DGiKvtvzXtZgi1L2jH2+QiER8MOfcMQ/TMMbRKghdUoxsfsHgNBxtyuACTR78C SGdTXy+zH9CjrfX42BcC65/nfQvfRfEuGQ4KpuDIZX3FvPiqdaVD2T1HF+WW9mXDfl dTkLkadtJPvjlJu4AcJ2Y2TGqjpqEmSK4X7ro7nDdzykUl8CqSgodZpaIXBklPEz5n Mr8XgoEBxilJlLdJ30FViPWjmB+NhSlWYxtHBgbVPNce7RqwhcQb85G1lqHZMSCTbB MrrYKnbdracZQ== Received: from rostedt by gandalf with local (Exim 4.99.1) (envelope-from ) id 1vow06-0000000AOyW-0r3k; Sat, 07 Feb 2026 23:02:22 -0500 Message-ID: <20260208040222.068849312@kernel.org> User-Agent: quilt/0.68 Date: Sat, 07 Feb 2026 23:01:59 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton Subject: [PATCH v2 3/3] tracing: Better separate SNAPSHOT and MAX_TRACE options References: <20260208040156.005531619@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Steven Rostedt The latency tracers (scheduler, irqsoff, etc) were created when tracing was first added. These tracers required a "snapshot" buffer that was the same size as the ring buffer being written to. When a new max latency was hit, the main ring buffer would swap with the snapshot buffer so that the trace leading up to the latency would be saved in the snapshot buffer (The snapshot buffer is never written to directly and the data within it can be viewed without fear of being overwritten). Later, a new feature was added to allow snapshots to be taken by user space or even event triggers. This created a "snapshot" file that allowed users to trigger a snapshot from user space to save the current trace. The config for this new feature (CONFIG_TRACER_SNAPSHOT) would select the latency tracer config (CONFIG_TRACER_MAX_LATENCY) as it would need all the functionality from it as it already existed. But this was incorrect. As the snapshot feature is really what the latency tracers need and not the other way around. Have CONFIG_TRACER_MAX_TRACE select CONFIG_TRACER_SNAPSHOT where the tracers that needs the max latency buffer selects the TRACE_MAX_TRACE which will then select TRACER_SNAPSHOT. Also, go through trace.c and trace.h and make the code that only needs the TRACER_MAX_TRACE protected by that and the code that always requires the snapshot to be protected by TRACER_SNAPSHOT. Signed-off-by: Steven Rostedt (Google) --- kernel/trace/Kconfig | 8 ++--- kernel/trace/trace.c | 70 +++++++++++++++++++++++--------------------- kernel/trace/trace.h | 19 +++++++----- 3 files changed, 52 insertions(+), 45 deletions(-) diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig index bfa2ec46e075..bedb2f982823 100644 --- a/kernel/trace/Kconfig +++ b/kernel/trace/Kconfig @@ -133,6 +133,7 @@ config BUILDTIME_MCOUNT_SORT =20 config TRACER_MAX_TRACE bool + select TRACER_SNAPSHOT =20 config TRACE_CLOCK bool @@ -422,7 +423,6 @@ config IRQSOFF_TRACER select GENERIC_TRACER select TRACER_MAX_TRACE select RING_BUFFER_ALLOW_SWAP - select TRACER_SNAPSHOT select TRACER_SNAPSHOT_PER_CPU_SWAP help This option measures the time spent in irqs-off critical @@ -445,7 +445,6 @@ config PREEMPT_TRACER select GENERIC_TRACER select TRACER_MAX_TRACE select RING_BUFFER_ALLOW_SWAP - select TRACER_SNAPSHOT select TRACER_SNAPSHOT_PER_CPU_SWAP select TRACE_PREEMPT_TOGGLE help @@ -467,7 +466,6 @@ config SCHED_TRACER select GENERIC_TRACER select CONTEXT_SWITCH_TRACER select TRACER_MAX_TRACE - select TRACER_SNAPSHOT help This tracer tracks the latency of the highest priority task to be scheduled in, starting from the point it has woken up. @@ -617,7 +615,6 @@ config TRACE_SYSCALL_BUF_SIZE_DEFAULT =20 config TRACER_SNAPSHOT bool "Create a snapshot trace buffer" - select TRACER_MAX_TRACE help Allow tracing users to take snapshot of the current buffer using the ftrace interface, e.g.: @@ -625,6 +622,9 @@ config TRACER_SNAPSHOT echo 1 > /sys/kernel/tracing/snapshot cat snapshot =20 + Note, the latency tracers select this option. To disable it, + all the latency tracers need to be disabled. + config TRACER_SNAPSHOT_PER_CPU_SWAP bool "Allow snapshot to swap per CPU" depends on TRACER_SNAPSHOT diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 9fbb124e87dc..fdd47da0dff1 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -825,15 +825,15 @@ static void tracing_snapshot_instance_cond(struct tra= ce_array *tr, return; } =20 - /* Note, snapshot can not be used when the tracer uses it */ - if (tracer_uses_snapshot(tr->current_trace)) { - trace_array_puts(tr, "*** LATENCY TRACER ACTIVE ***\n"); + if (tr->mapped) { + trace_array_puts(tr, "*** BUFFER MEMORY MAPPED ***\n"); trace_array_puts(tr, "*** Can not use snapshot (sorry) ***\n"); return; } =20 - if (tr->mapped) { - trace_array_puts(tr, "*** BUFFER MEMORY MAPPED ***\n"); + /* Note, snapshot can not be used when the tracer uses it */ + if (tracer_uses_snapshot(tr->current_trace)) { + trace_array_puts(tr, "*** LATENCY TRACER ACTIVE ***\n"); trace_array_puts(tr, "*** Can not use snapshot (sorry) ***\n"); return; } @@ -1555,8 +1555,8 @@ static void __update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu) { struct array_buffer *trace_buf =3D &tr->array_buffer; - struct array_buffer *max_buf =3D &tr->snapshot_buffer; struct trace_array_cpu *data =3D per_cpu_ptr(trace_buf->data, cpu); + struct array_buffer *max_buf =3D &tr->snapshot_buffer; struct trace_array_cpu *max_data =3D per_cpu_ptr(max_buf->data, cpu); =20 max_buf->cpu =3D cpu; @@ -1585,7 +1585,14 @@ __update_max_tr(struct trace_array *tr, struct task_= struct *tsk, int cpu) tracing_record_cmdline(tsk); latency_fsnotify(tr); } +#else +static inline void trace_create_maxlat_file(struct trace_array *tr, + struct dentry *d_tracer) { } +static inline void __update_max_tr(struct trace_array *tr, + struct task_struct *tsk, int cpu) { } +#endif /* CONFIG_TRACER_MAX_TRACE */ =20 +#ifdef CONFIG_TRACER_SNAPSHOT /** * update_max_tr - snapshot all trace buffers from global_trace to max_tr * @tr: tracer @@ -1619,12 +1626,11 @@ update_max_tr(struct trace_array *tr, struct task_s= truct *tsk, int cpu, else ring_buffer_record_off(tr->snapshot_buffer.buffer); =20 -#ifdef CONFIG_TRACER_SNAPSHOT if (tr->cond_snapshot && !tr->cond_snapshot->update(tr, cond_data)) { arch_spin_unlock(&tr->max_lock); return; } -#endif + swap(tr->array_buffer.buffer, tr->snapshot_buffer.buffer); =20 __update_max_tr(tr, tsk, cpu); @@ -1715,7 +1721,7 @@ static int wait_on_pipe(struct trace_iterator *iter, = int full) ret =3D ring_buffer_wait(iter->array_buffer->buffer, iter->cpu_file, full, wait_pipe_cond, &pwait); =20 -#ifdef CONFIG_TRACER_MAX_TRACE +#ifdef CONFIG_TRACER_SNAPSHOT /* * Make sure this is still the snapshot buffer, as if a snapshot were * to happen, this would now be the main buffer. @@ -2058,7 +2064,7 @@ void tracing_reset_all_online_cpus_unlocked(void) continue; tr->clear_trace =3D false; tracing_reset_online_cpus(&tr->array_buffer); -#ifdef CONFIG_TRACER_MAX_TRACE +#ifdef CONFIG_TRACER_SNAPSHOT tracing_reset_online_cpus(&tr->snapshot_buffer); #endif } @@ -2098,7 +2104,7 @@ static void tracing_start_tr(struct trace_array *tr) if (buffer) ring_buffer_record_enable(buffer); =20 -#ifdef CONFIG_TRACER_MAX_TRACE +#ifdef CONFIG_TRACER_SNAPSHOT buffer =3D tr->snapshot_buffer.buffer; if (buffer) ring_buffer_record_enable(buffer); @@ -2134,7 +2140,7 @@ static void tracing_stop_tr(struct trace_array *tr) if (buffer) ring_buffer_record_disable(buffer); =20 -#ifdef CONFIG_TRACER_MAX_TRACE +#ifdef CONFIG_TRACER_SNAPSHOT buffer =3D tr->snapshot_buffer.buffer; if (buffer) ring_buffer_record_disable(buffer); @@ -3757,7 +3763,7 @@ static void test_ftrace_alive(struct seq_file *m) "# MAY BE MISSING FUNCTION EVENTS\n"); } =20 -#ifdef CONFIG_TRACER_MAX_TRACE +#ifdef CONFIG_TRACER_SNAPSHOT static void show_snapshot_main_help(struct seq_file *m) { seq_puts(m, "# echo 0 > snapshot : Clears and frees snapshot buffer\n" @@ -3935,7 +3941,7 @@ __tracing_open(struct inode *inode, struct file *file= , bool snapshot) =20 iter->tr =3D tr; =20 -#ifdef CONFIG_TRACER_MAX_TRACE +#ifdef CONFIG_TRACER_SNAPSHOT /* Currently only the top directory has a snapshot */ if (tr->current_trace->print_max || snapshot) iter->array_buffer =3D &tr->snapshot_buffer; @@ -4351,14 +4357,14 @@ int tracing_set_cpumask(struct trace_array *tr, if (cpumask_test_cpu(cpu, tr->tracing_cpumask) && !cpumask_test_cpu(cpu, tracing_cpumask_new)) { ring_buffer_record_disable_cpu(tr->array_buffer.buffer, cpu); -#ifdef CONFIG_TRACER_MAX_TRACE +#ifdef CONFIG_TRACER_SNAPSHOT ring_buffer_record_disable_cpu(tr->snapshot_buffer.buffer, cpu); #endif } if (!cpumask_test_cpu(cpu, tr->tracing_cpumask) && cpumask_test_cpu(cpu, tracing_cpumask_new)) { ring_buffer_record_enable_cpu(tr->array_buffer.buffer, cpu); -#ifdef CONFIG_TRACER_MAX_TRACE +#ifdef CONFIG_TRACER_SNAPSHOT ring_buffer_record_enable_cpu(tr->snapshot_buffer.buffer, cpu); #endif } @@ -4568,7 +4574,7 @@ int set_tracer_flag(struct trace_array *tr, u64 mask,= int enabled) =20 case TRACE_ITER(OVERWRITE): ring_buffer_change_overwrite(tr->array_buffer.buffer, enabled); -#ifdef CONFIG_TRACER_MAX_TRACE +#ifdef CONFIG_TRACER_SNAPSHOT ring_buffer_change_overwrite(tr->snapshot_buffer.buffer, enabled); #endif break; @@ -5232,7 +5238,7 @@ static void update_buffer_entries(struct array_buffer= *buf, int cpu) } } =20 -#ifdef CONFIG_TRACER_MAX_TRACE +#ifdef CONFIG_TRACER_SNAPSHOT /* resize @tr's buffer to the size of @size_tr's entries */ static int resize_buffer_duplicate_size(struct array_buffer *trace_buf, struct array_buffer *size_buf, int cpu_id) @@ -5258,7 +5264,7 @@ static int resize_buffer_duplicate_size(struct array_= buffer *trace_buf, =20 return ret; } -#endif /* CONFIG_TRACER_MAX_TRACE */ +#endif /* CONFIG_TRACER_SNAPSHOT */ =20 static int __tracing_resize_ring_buffer(struct trace_array *tr, unsigned long size, int cpu) @@ -5283,7 +5289,7 @@ static int __tracing_resize_ring_buffer(struct trace_= array *tr, if (ret < 0) goto out_start; =20 -#ifdef CONFIG_TRACER_MAX_TRACE +#ifdef CONFIG_TRACER_SNAPSHOT if (!tr->allocated_snapshot) goto out; =20 @@ -5315,7 +5321,7 @@ static int __tracing_resize_ring_buffer(struct trace_= array *tr, update_buffer_entries(&tr->snapshot_buffer, cpu); =20 out: -#endif /* CONFIG_TRACER_MAX_TRACE */ +#endif /* CONFIG_TRACER_SNAPSHOT */ =20 update_buffer_entries(&tr->array_buffer, cpu); out_start: @@ -5543,9 +5549,7 @@ int tracing_set_tracer(struct trace_array *tr, const = char *buf) { struct tracer *trace =3D NULL; struct tracers *t; -#ifdef CONFIG_TRACER_MAX_TRACE bool had_max_tr; -#endif int ret; =20 guard(mutex)(&trace_types_lock); @@ -7021,7 +7025,7 @@ int tracing_set_clock(struct trace_array *tr, const c= har *clockstr) */ tracing_reset_online_cpus(&tr->array_buffer); =20 -#ifdef CONFIG_TRACER_MAX_TRACE +#ifdef CONFIG_TRACER_SNAPSHOT if (tr->snapshot_buffer.buffer) ring_buffer_set_clock(tr->snapshot_buffer.buffer, trace_clocks[i].func); tracing_reset_online_cpus(&tr->snapshot_buffer); @@ -8168,7 +8172,7 @@ static long tracing_buffers_ioctl(struct file *file, = unsigned int cmd, unsigned return 0; } =20 -#ifdef CONFIG_TRACER_MAX_TRACE +#ifdef CONFIG_TRACER_SNAPSHOT static int get_snapshot_map(struct trace_array *tr) { int err =3D 0; @@ -9172,7 +9176,7 @@ buffer_subbuf_size_write(struct file *filp, const cha= r __user *ubuf, if (ret) goto out; =20 -#ifdef CONFIG_TRACER_MAX_TRACE +#ifdef CONFIG_TRACER_SNAPSHOT =20 if (!tr->allocated_snapshot) goto out_max; @@ -9393,7 +9397,7 @@ static int allocate_trace_buffers(struct trace_array = *tr, int size) if (ret) return ret; =20 -#ifdef CONFIG_TRACER_MAX_TRACE +#ifdef CONFIG_TRACER_SNAPSHOT /* Fix mapped buffer trace arrays do not have snapshot buffers */ if (tr->range_addr_start) return 0; @@ -9420,7 +9424,7 @@ static void free_trace_buffers(struct trace_array *tr) free_trace_buffer(&tr->array_buffer); kfree(tr->module_delta); =20 -#ifdef CONFIG_TRACER_MAX_TRACE +#ifdef CONFIG_TRACER_SNAPSHOT free_trace_buffer(&tr->snapshot_buffer); #endif } @@ -9562,7 +9566,7 @@ trace_array_create_systems(const char *name, const ch= ar *systems, tr->syscall_buf_sz =3D global_trace.syscall_buf_sz; =20 tr->max_lock =3D (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED; -#ifdef CONFIG_TRACER_MAX_TRACE +#ifdef CONFIG_TRACER_SNAPSHOT spin_lock_init(&tr->snapshot_trigger_lock); #endif tr->current_trace =3D &nop_trace; @@ -10516,7 +10520,7 @@ ssize_t trace_parse_run_command(struct file *file, = const char __user *buffer, return done; } =20 -#ifdef CONFIG_TRACER_MAX_TRACE +#ifdef CONFIG_TRACER_SNAPSHOT __init static bool tr_needs_alloc_snapshot(const char *name) { char *test; @@ -10706,7 +10710,7 @@ __init static void enable_instances(void) } } else { /* Only non mapped buffers have snapshot buffers */ - if (IS_ENABLED(CONFIG_TRACER_MAX_TRACE)) + if (IS_ENABLED(CONFIG_TRACER_SNAPSHOT)) do_allocate_snapshot(name); } =20 @@ -10833,7 +10837,7 @@ __init static int tracer_alloc_buffers(void) global_trace.current_trace_flags =3D nop_trace.flags; =20 global_trace.max_lock =3D (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED; -#ifdef CONFIG_TRACER_MAX_TRACE +#ifdef CONFIG_TRACER_SNAPSHOT spin_lock_init(&global_trace.snapshot_trigger_lock); #endif ftrace_init_global_array_ops(&global_trace); @@ -10901,7 +10905,7 @@ struct trace_array *trace_get_global_array(void) =20 void __init ftrace_boot_snapshot(void) { -#ifdef CONFIG_TRACER_MAX_TRACE +#ifdef CONFIG_TRACER_SNAPSHOT struct trace_array *tr; =20 if (!snapshot_at_boot) diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index ebb47abc0ee7..649fdd20fc91 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h @@ -329,7 +329,7 @@ struct trace_array { struct list_head list; char *name; struct array_buffer array_buffer; -#ifdef CONFIG_TRACER_MAX_TRACE +#ifdef CONFIG_TRACER_SNAPSHOT /* * The snapshot_buffer is used to snapshot the trace when a maximum * latency is reached, or when the user initiates a snapshot. @@ -346,13 +346,16 @@ struct trace_array { bool allocated_snapshot; spinlock_t snapshot_trigger_lock; unsigned int snapshot; +#ifdef CONFIG_TRACER_MAX_TRACE unsigned long max_latency; #ifdef CONFIG_FSNOTIFY struct dentry *d_max_latency; struct work_struct fsnotify_work; struct irq_work fsnotify_irqwork; -#endif -#endif +#endif /* CONFIG_FSNOTIFY */ +#endif /* CONFIG_TRACER_MAX_TRACE */ +#endif /* CONFIG_TRACER_SNAPSHOT */ + /* The below is for memory mapped ring buffer */ unsigned int mapped; unsigned long range_addr_start; @@ -378,7 +381,7 @@ struct trace_array { * * It is also used in other places outside the update_max_tr * so it needs to be defined outside of the - * CONFIG_TRACER_MAX_TRACE. + * CONFIG_TRACER_SNAPSHOT. */ arch_spinlock_t max_lock; #ifdef CONFIG_FTRACE_SYSCALLS @@ -791,22 +794,22 @@ int trace_pid_write(struct trace_pid_list *filtered_p= ids, struct trace_pid_list **new_pid_list, const char __user *ubuf, size_t cnt); =20 -#ifdef CONFIG_TRACER_MAX_TRACE +#ifdef CONFIG_TRACER_SNAPSHOT void update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cp= u, void *cond_data); void update_max_tr_single(struct trace_array *tr, struct task_struct *tsk, int cpu); =20 -#ifdef CONFIG_FSNOTIFY -#define LATENCY_FS_NOTIFY +#if defined(CONFIG_TRACER_MAX_TRACE) && defined(CONFIG_FSNOTIFY) +# define LATENCY_FS_NOTIFY #endif -#endif /* CONFIG_TRACER_MAX_TRACE */ =20 #ifdef LATENCY_FS_NOTIFY void latency_fsnotify(struct trace_array *tr); #else static inline void latency_fsnotify(struct trace_array *tr) { } #endif +#endif /* CONFIG_TRACER_SNAPSHOT */ =20 #ifdef CONFIG_STACKTRACE void __trace_stack(struct trace_array *tr, unsigned int trace_ctx, int ski= p); --=20 2.51.0