From: Steven Rostedt <rostedt@goodmis.org>
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) <rostedt@goodmis.org>
---
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 = tr->current_trace;
unsigned long flags;
if (in_nmi()) {
@@ -827,7 +826,7 @@ static void tracing_snapshot_instance_cond(struct trace_array *tr,
}
/* 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,
guard(mutex)(&trace_types_lock);
- if (tr->current_trace->use_max_tr)
+ if (tracer_uses_snapshot(tr->current_trace))
return -EBUSY;
/*
@@ -1787,7 +1786,7 @@ static int run_tracer_selftest(struct tracer *type)
tr->current_trace_flags = type->flags ? : type->default_flags;
#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);
#ifdef CONFIG_TRACER_MAX_TRACE
- if (type->use_max_tr) {
+ if (tracer_uses_snapshot(type)) {
tr->allocated_snapshot = false;
/* 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);
-#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
if (*pos != iter->pos) {
iter->ent = NULL;
@@ -3282,10 +3279,8 @@ static void s_stop(struct seq_file *m, void *p)
{
struct trace_iterator *iter = m->private;
-#ifdef CONFIG_TRACER_MAX_TRACE
- if (iter->snapshot && iter->trace->use_max_tr)
+ if (iter->snapshot && tracer_uses_snapshot(iter->trace))
return;
-#endif
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;
}
@@ -5579,8 +5572,7 @@ int tracing_set_tracer(struct trace_array *tr, const char *buf)
if (trace == tr->current_trace)
return 0;
-#ifdef CONFIG_TRACER_SNAPSHOT
- if (trace->use_max_tr) {
+ if (tracer_uses_snapshot(trace)) {
local_irq_disable();
arch_spin_lock(&tr->max_lock);
ret = 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, const char *buf)
if (tr->current_trace->reset)
tr->current_trace->reset(tr);
-#ifdef CONFIG_TRACER_MAX_TRACE
- had_max_tr = tr->current_trace->use_max_tr;
+ had_max_tr = tracer_uses_snapshot(tr->current_trace);
/* Current trace needs to be nop_trace before synchronize_rcu */
tr->current_trace = &nop_trace;
tr->current_trace_flags = nop_trace.flags;
- 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, const char *buf)
tracing_disarm_snapshot(tr);
}
- if (!had_max_tr && trace->use_max_tr) {
+ if (!had_max_tr && tracer_uses_snapshot(trace)) {
ret = tracing_arm_snapshot_locked(tr);
if (ret)
return ret;
}
-#else
- tr->current_trace = &nop_trace;
-#endif
tr->current_trace_flags = t->flags ? : t->tracer->flags;
if (trace->init) {
ret = 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 = nop_trace.flags;
return ret;
}
@@ -7207,7 +7193,7 @@ tracing_snapshot_write(struct file *filp, const char __user *ubuf, size_t cnt,
guard(mutex)(&trace_types_lock);
- if (tr->current_trace->use_max_tr)
+ if (tracer_uses_snapshot(tr->current_trace))
return -EBUSY;
local_irq_disable();
@@ -7306,7 +7292,7 @@ static int snapshot_raw_open(struct inode *inode, struct file *filp)
info = filp->private_data;
- 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;
-#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
page_size = ring_buffer_subbuf_size_get(iter->array_buffer->buffer);
@@ -8049,10 +8033,8 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos,
int entries, i;
ssize_t ret = 0;
-#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
page_size = 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 *tr, unsigned int trace_ctx,
}
#endif /* CONFIG_STACKTRACE */
+#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);
--
2.51.0
Hi Steven,
kernel test robot noticed the following build errors:
[auto build test ERROR on trace/for-next]
[also build test ERROR on linus/master v6.19-rc8 next-20260205]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Steven-Rostedt/tracing-Rename-trace_array-field-max_buffer-to-snapshot_buffer/20260208-120355
base: https://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace for-next
patch link: https://lore.kernel.org/r/20260208040221.900653834%40kernel.org
patch subject: [PATCH v2 2/3] tracing: Add tracer_uses_snapshot() helper to remove #ifdefs
config: x86_64-kexec (https://download.01.org/0day-ci/archive/20260208/202602082013.PnPZCdsA-lkp@intel.com/config)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260208/202602082013.PnPZCdsA-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202602082013.PnPZCdsA-lkp@intel.com/
All errors (new ones prefixed by >>):
>> kernel/trace/trace.c:6337:13: error: no member named 'cond_snapshot' in 'struct trace_array'
6337 | ret = tr->cond_snapshot ? -EBUSY : 0;
| ~~ ^
kernel/trace/trace.c:6366:2: error: use of undeclared identifier 'had_max_tr'
6366 | had_max_tr = tracer_uses_snapshot(tr->current_trace);
| ^
kernel/trace/trace.c:6372:6: error: use of undeclared identifier 'had_max_tr'
6372 | if (had_max_tr && !tracer_uses_snapshot(trace)) {
| ^
kernel/trace/trace.c:6385:7: error: use of undeclared identifier 'had_max_tr'
6385 | if (!had_max_tr && tracer_uses_snapshot(trace)) {
| ^
kernel/trace/trace.c:9795:23: warning: shift count is negative [-Wshift-count-negative]
9795 | !((1ULL << i) & TOP_LEVEL_TRACE_FLAGS)) {
| ^~~~~~~~~~~~~~~~~~~~~
kernel/trace/trace.c:523:9: note: expanded from macro 'TOP_LEVEL_TRACE_FLAGS'
523 | TRACE_ITER(PROF_TEXT_OFFSET) | FPROFILE_DEFAULT_FLAGS)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
kernel/trace/trace.h:1452:42: note: expanded from macro 'TRACE_ITER'
1452 | (TRACE_ITER_##flag##_BIT < 0 ? 0 : 1ULL << (TRACE_ITER_##flag##_BIT))
| ^ ~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning and 4 errors generated.
vim +6337 kernel/trace/trace.c
ef9188bcc6ca1d Mark-PK Tsai 2022-04-26 6300
9c5b9d3d65e485 Masami Hiramatsu 2020-01-11 6301 int tracing_set_tracer(struct trace_array *tr, const char *buf)
09d23a1d8a82e8 Steven Rostedt (Red Hat 2015-02-03 6302) {
428add559b6923 Steven Rostedt 2025-11-11 6303 struct tracer *trace = NULL;
428add559b6923 Steven Rostedt 2025-11-11 6304 struct tracers *t;
12883efb670c28 Steven Rostedt (Red Hat 2013-03-05 6305) #ifdef CONFIG_TRACER_MAX_TRACE
34600f0e9c33c9 Steven Rostedt 2013-01-22 6306 bool had_max_tr;
12883efb670c28 Steven Rostedt (Red Hat 2013-03-05 6307) #endif
d33b10c0c73adc Steven Rostedt 2024-12-24 6308 int ret;
bc0c38d139ec7f Steven Rostedt 2008-05-12 6309
d33b10c0c73adc Steven Rostedt 2024-12-24 6310 guard(mutex)(&trace_types_lock);
1027fcb206a0fb Steven Rostedt 2009-03-12 6311
7a1d1e4b9639ff Steven Rostedt (Google 2024-06-12 6312) update_last_data(tr);
7a1d1e4b9639ff Steven Rostedt (Google 2024-06-12 6313)
a1f157c7a3bb34 Zheng Yejian 2023-09-06 6314 if (!tr->ring_buffer_expanded) {
2b6080f28c7cc3 Steven Rostedt 2012-05-11 6315 ret = __tracing_resize_ring_buffer(tr, trace_buf_size,
438ced1720b584 Vaibhav Nagarnaik 2012-02-02 6316 RING_BUFFER_ALL_CPUS);
73c5162aa362a5 Steven Rostedt 2009-03-11 6317 if (ret < 0)
d33b10c0c73adc Steven Rostedt 2024-12-24 6318 return ret;
73c5162aa362a5 Steven Rostedt 2009-03-11 6319 ret = 0;
73c5162aa362a5 Steven Rostedt 2009-03-11 6320 }
73c5162aa362a5 Steven Rostedt 2009-03-11 6321
428add559b6923 Steven Rostedt 2025-11-11 6322 list_for_each_entry(t, &tr->tracers, list) {
428add559b6923 Steven Rostedt 2025-11-11 6323 if (strcmp(t->tracer->name, buf) == 0) {
428add559b6923 Steven Rostedt 2025-11-11 6324 trace = t->tracer;
bc0c38d139ec7f Steven Rostedt 2008-05-12 6325 break;
bc0c38d139ec7f Steven Rostedt 2008-05-12 6326 }
428add559b6923 Steven Rostedt 2025-11-11 6327 }
428add559b6923 Steven Rostedt 2025-11-11 6328 if (!trace)
d33b10c0c73adc Steven Rostedt 2024-12-24 6329 return -EINVAL;
d33b10c0c73adc Steven Rostedt 2024-12-24 6330
428add559b6923 Steven Rostedt 2025-11-11 6331 if (trace == tr->current_trace)
d33b10c0c73adc Steven Rostedt 2024-12-24 6332 return 0;
bc0c38d139ec7f Steven Rostedt 2008-05-12 6333
b1e5d74d04bbcf Steven Rostedt 2026-02-07 6334 if (tracer_uses_snapshot(trace)) {
c0a581d7126c0b Waiman Long 2022-09-22 6335 local_irq_disable();
a35873a0993b4d Tom Zanussi 2019-02-13 6336 arch_spin_lock(&tr->max_lock);
22bec11a569983 Steven Rostedt 2025-01-06 @6337 ret = tr->cond_snapshot ? -EBUSY : 0;
a35873a0993b4d Tom Zanussi 2019-02-13 6338 arch_spin_unlock(&tr->max_lock);
c0a581d7126c0b Waiman Long 2022-09-22 6339 local_irq_enable();
a35873a0993b4d Tom Zanussi 2019-02-13 6340 if (ret)
d33b10c0c73adc Steven Rostedt 2024-12-24 6341 return ret;
a35873a0993b4d Tom Zanussi 2019-02-13 6342 }
b1e5d74d04bbcf Steven Rostedt 2026-02-07 6343
c7b3ae0bd2ca65 Ziqian SUN (Zamir 2017-09-11 6344) /* Some tracers won't work on kernel command line */
428add559b6923 Steven Rostedt 2025-11-11 6345 if (system_state < SYSTEM_RUNNING && trace->noboot) {
c7b3ae0bd2ca65 Ziqian SUN (Zamir 2017-09-11 6346) pr_warn("Tracer '%s' is not allowed on command line, ignored\n",
428add559b6923 Steven Rostedt 2025-11-11 6347 trace->name);
d1e27ee9c6f21c Steven Rostedt 2024-12-19 6348 return -EINVAL;
c7b3ae0bd2ca65 Ziqian SUN (Zamir 2017-09-11 6349) }
c7b3ae0bd2ca65 Ziqian SUN (Zamir 2017-09-11 6350)
607e2ea167e56d Steven Rostedt (Red Hat 2013-11-06 6351) /* Some tracers are only allowed for the top level buffer */
428add559b6923 Steven Rostedt 2025-11-11 6352 if (!trace_ok_for_array(trace, tr))
d33b10c0c73adc Steven Rostedt 2024-12-24 6353 return -EINVAL;
607e2ea167e56d Steven Rostedt (Red Hat 2013-11-06 6354)
cf6ab6d9143b15 Steven Rostedt (Red Hat 2014-12-15 6355) /* If trace pipe files are being read, we can't change the tracer */
d33b10c0c73adc Steven Rostedt 2024-12-24 6356 if (tr->trace_ref)
d33b10c0c73adc Steven Rostedt 2024-12-24 6357 return -EBUSY;
cf6ab6d9143b15 Steven Rostedt (Red Hat 2014-12-15 6358)
9f029e83e968e5 Steven Rostedt 2008-11-12 6359 trace_branch_disable();
613f04a0f51e6e Steven Rostedt (Red Hat 2013-03-14 6360)
50512ab576e1ce Steven Rostedt (Red Hat 2014-01-14 6361) tr->current_trace->enabled--;
613f04a0f51e6e Steven Rostedt (Red Hat 2013-03-14 6362)
2b6080f28c7cc3 Steven Rostedt 2012-05-11 6363 if (tr->current_trace->reset)
2b6080f28c7cc3 Steven Rostedt 2012-05-11 6364 tr->current_trace->reset(tr);
613f04a0f51e6e Steven Rostedt (Red Hat 2013-03-14 6365)
b1e5d74d04bbcf Steven Rostedt 2026-02-07 6366 had_max_tr = tracer_uses_snapshot(tr->current_trace);
a541a9559bb0a8 Steven Rostedt (Google 2022-10-05 6367)
7440172974e85b Paul E. McKenney 2018-11-06 6368 /* Current trace needs to be nop_trace before synchronize_rcu */
2b6080f28c7cc3 Steven Rostedt 2012-05-11 6369 tr->current_trace = &nop_trace;
428add559b6923 Steven Rostedt 2025-11-11 6370 tr->current_trace_flags = nop_trace.flags;
34600f0e9c33c9 Steven Rostedt 2013-01-22 6371
b1e5d74d04bbcf Steven Rostedt 2026-02-07 6372 if (had_max_tr && !tracer_uses_snapshot(trace)) {
34600f0e9c33c9 Steven Rostedt 2013-01-22 6373 /*
34600f0e9c33c9 Steven Rostedt 2013-01-22 6374 * We need to make sure that the update_max_tr sees that
34600f0e9c33c9 Steven Rostedt 2013-01-22 6375 * current_trace changed to nop_trace to keep it from
34600f0e9c33c9 Steven Rostedt 2013-01-22 6376 * swapping the buffers after we resize it.
34600f0e9c33c9 Steven Rostedt 2013-01-22 6377 * The update_max_tr is called from interrupts disabled
34600f0e9c33c9 Steven Rostedt 2013-01-22 6378 * so a synchronized_sched() is sufficient.
34600f0e9c33c9 Steven Rostedt 2013-01-22 6379 */
7440172974e85b Paul E. McKenney 2018-11-06 6380 synchronize_rcu();
3209cff4490bee Steven Rostedt (Red Hat 2013-03-12 6381) free_snapshot(tr);
180e4e390978af Vincent Donnefort 2024-02-20 6382 tracing_disarm_snapshot(tr);
ef710e100c1068 KOSAKI Motohiro 2010-07-01 6383 }
12883efb670c28 Steven Rostedt (Red Hat 2013-03-05 6384)
b1e5d74d04bbcf Steven Rostedt 2026-02-07 6385 if (!had_max_tr && tracer_uses_snapshot(trace)) {
180e4e390978af Vincent Donnefort 2024-02-20 6386 ret = tracing_arm_snapshot_locked(tr);
180e4e390978af Vincent Donnefort 2024-02-20 6387 if (ret)
d33b10c0c73adc Steven Rostedt 2024-12-24 6388 return ret;
ef710e100c1068 KOSAKI Motohiro 2010-07-01 6389 }
577b785f55168d Steven Rostedt 2009-02-26 6390
428add559b6923 Steven Rostedt 2025-11-11 6391 tr->current_trace_flags = t->flags ? : t->tracer->flags;
428add559b6923 Steven Rostedt 2025-11-11 6392
428add559b6923 Steven Rostedt 2025-11-11 6393 if (trace->init) {
428add559b6923 Steven Rostedt 2025-11-11 6394 ret = tracer_init(trace, tr);
180e4e390978af Vincent Donnefort 2024-02-20 6395 if (ret) {
b1e5d74d04bbcf Steven Rostedt 2026-02-07 6396 if (tracer_uses_snapshot(trace))
180e4e390978af Vincent Donnefort 2024-02-20 6397 tracing_disarm_snapshot(tr);
428add559b6923 Steven Rostedt 2025-11-11 6398 tr->current_trace_flags = nop_trace.flags;
d33b10c0c73adc Steven Rostedt 2024-12-24 6399 return ret;
1c80025a49855b Frederic Weisbecker 2008-11-16 6400 }
180e4e390978af Vincent Donnefort 2024-02-20 6401 }
bc0c38d139ec7f Steven Rostedt 2008-05-12 6402
428add559b6923 Steven Rostedt 2025-11-11 6403 tr->current_trace = trace;
50512ab576e1ce Steven Rostedt (Red Hat 2014-01-14 6404) tr->current_trace->enabled++;
9f029e83e968e5 Steven Rostedt 2008-11-12 6405 trace_branch_enable(tr);
bc0c38d139ec7f Steven Rostedt 2008-05-12 6406
d33b10c0c73adc Steven Rostedt 2024-12-24 6407 return 0;
d9e540762f5cdd Peter Zijlstra 2008-11-01 6408 }
d9e540762f5cdd Peter Zijlstra 2008-11-01 6409
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Steven,
kernel test robot noticed the following build errors:
[auto build test ERROR on trace/for-next]
[also build test ERROR on linus/master v6.19-rc8 next-20260205]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Steven-Rostedt/tracing-Rename-trace_array-field-max_buffer-to-snapshot_buffer/20260208-120355
base: https://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace for-next
patch link: https://lore.kernel.org/r/20260208040221.900653834%40kernel.org
patch subject: [PATCH v2 2/3] tracing: Add tracer_uses_snapshot() helper to remove #ifdefs
config: sh-defconfig (https://download.01.org/0day-ci/archive/20260208/202602081945.dguj4FF6-lkp@intel.com/config)
compiler: sh4-linux-gcc (GCC) 15.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260208/202602081945.dguj4FF6-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202602081945.dguj4FF6-lkp@intel.com/
All errors (new ones prefixed by >>):
kernel/trace/trace.c: In function 'tracing_set_tracer':
>> kernel/trace/trace.c:6337:25: error: 'struct trace_array' has no member named 'cond_snapshot'
6337 | ret = tr->cond_snapshot ? -EBUSY : 0;
| ^~
kernel/trace/trace.c:6366:9: error: 'had_max_tr' undeclared (first use in this function)
6366 | had_max_tr = tracer_uses_snapshot(tr->current_trace);
| ^~~~~~~~~~
kernel/trace/trace.c:6366:9: note: each undeclared identifier is reported only once for each function it appears in
vim +6337 kernel/trace/trace.c
ef9188bcc6ca1d Mark-PK Tsai 2022-04-26 6300
9c5b9d3d65e485 Masami Hiramatsu 2020-01-11 6301 int tracing_set_tracer(struct trace_array *tr, const char *buf)
09d23a1d8a82e8 Steven Rostedt (Red Hat 2015-02-03 6302) {
428add559b6923 Steven Rostedt 2025-11-11 6303 struct tracer *trace = NULL;
428add559b6923 Steven Rostedt 2025-11-11 6304 struct tracers *t;
12883efb670c28 Steven Rostedt (Red Hat 2013-03-05 6305) #ifdef CONFIG_TRACER_MAX_TRACE
34600f0e9c33c9 Steven Rostedt 2013-01-22 6306 bool had_max_tr;
12883efb670c28 Steven Rostedt (Red Hat 2013-03-05 6307) #endif
d33b10c0c73adc Steven Rostedt 2024-12-24 6308 int ret;
bc0c38d139ec7f Steven Rostedt 2008-05-12 6309
d33b10c0c73adc Steven Rostedt 2024-12-24 6310 guard(mutex)(&trace_types_lock);
1027fcb206a0fb Steven Rostedt 2009-03-12 6311
7a1d1e4b9639ff Steven Rostedt (Google 2024-06-12 6312) update_last_data(tr);
7a1d1e4b9639ff Steven Rostedt (Google 2024-06-12 6313)
a1f157c7a3bb34 Zheng Yejian 2023-09-06 6314 if (!tr->ring_buffer_expanded) {
2b6080f28c7cc3 Steven Rostedt 2012-05-11 6315 ret = __tracing_resize_ring_buffer(tr, trace_buf_size,
438ced1720b584 Vaibhav Nagarnaik 2012-02-02 6316 RING_BUFFER_ALL_CPUS);
73c5162aa362a5 Steven Rostedt 2009-03-11 6317 if (ret < 0)
d33b10c0c73adc Steven Rostedt 2024-12-24 6318 return ret;
73c5162aa362a5 Steven Rostedt 2009-03-11 6319 ret = 0;
73c5162aa362a5 Steven Rostedt 2009-03-11 6320 }
73c5162aa362a5 Steven Rostedt 2009-03-11 6321
428add559b6923 Steven Rostedt 2025-11-11 6322 list_for_each_entry(t, &tr->tracers, list) {
428add559b6923 Steven Rostedt 2025-11-11 6323 if (strcmp(t->tracer->name, buf) == 0) {
428add559b6923 Steven Rostedt 2025-11-11 6324 trace = t->tracer;
bc0c38d139ec7f Steven Rostedt 2008-05-12 6325 break;
bc0c38d139ec7f Steven Rostedt 2008-05-12 6326 }
428add559b6923 Steven Rostedt 2025-11-11 6327 }
428add559b6923 Steven Rostedt 2025-11-11 6328 if (!trace)
d33b10c0c73adc Steven Rostedt 2024-12-24 6329 return -EINVAL;
d33b10c0c73adc Steven Rostedt 2024-12-24 6330
428add559b6923 Steven Rostedt 2025-11-11 6331 if (trace == tr->current_trace)
d33b10c0c73adc Steven Rostedt 2024-12-24 6332 return 0;
bc0c38d139ec7f Steven Rostedt 2008-05-12 6333
b1e5d74d04bbcf Steven Rostedt 2026-02-07 6334 if (tracer_uses_snapshot(trace)) {
c0a581d7126c0b Waiman Long 2022-09-22 6335 local_irq_disable();
a35873a0993b4d Tom Zanussi 2019-02-13 6336 arch_spin_lock(&tr->max_lock);
22bec11a569983 Steven Rostedt 2025-01-06 @6337 ret = tr->cond_snapshot ? -EBUSY : 0;
a35873a0993b4d Tom Zanussi 2019-02-13 6338 arch_spin_unlock(&tr->max_lock);
c0a581d7126c0b Waiman Long 2022-09-22 6339 local_irq_enable();
a35873a0993b4d Tom Zanussi 2019-02-13 6340 if (ret)
d33b10c0c73adc Steven Rostedt 2024-12-24 6341 return ret;
a35873a0993b4d Tom Zanussi 2019-02-13 6342 }
b1e5d74d04bbcf Steven Rostedt 2026-02-07 6343
c7b3ae0bd2ca65 Ziqian SUN (Zamir 2017-09-11 6344) /* Some tracers won't work on kernel command line */
428add559b6923 Steven Rostedt 2025-11-11 6345 if (system_state < SYSTEM_RUNNING && trace->noboot) {
c7b3ae0bd2ca65 Ziqian SUN (Zamir 2017-09-11 6346) pr_warn("Tracer '%s' is not allowed on command line, ignored\n",
428add559b6923 Steven Rostedt 2025-11-11 6347 trace->name);
d1e27ee9c6f21c Steven Rostedt 2024-12-19 6348 return -EINVAL;
c7b3ae0bd2ca65 Ziqian SUN (Zamir 2017-09-11 6349) }
c7b3ae0bd2ca65 Ziqian SUN (Zamir 2017-09-11 6350)
607e2ea167e56d Steven Rostedt (Red Hat 2013-11-06 6351) /* Some tracers are only allowed for the top level buffer */
428add559b6923 Steven Rostedt 2025-11-11 6352 if (!trace_ok_for_array(trace, tr))
d33b10c0c73adc Steven Rostedt 2024-12-24 6353 return -EINVAL;
607e2ea167e56d Steven Rostedt (Red Hat 2013-11-06 6354)
cf6ab6d9143b15 Steven Rostedt (Red Hat 2014-12-15 6355) /* If trace pipe files are being read, we can't change the tracer */
d33b10c0c73adc Steven Rostedt 2024-12-24 6356 if (tr->trace_ref)
d33b10c0c73adc Steven Rostedt 2024-12-24 6357 return -EBUSY;
cf6ab6d9143b15 Steven Rostedt (Red Hat 2014-12-15 6358)
9f029e83e968e5 Steven Rostedt 2008-11-12 6359 trace_branch_disable();
613f04a0f51e6e Steven Rostedt (Red Hat 2013-03-14 6360)
50512ab576e1ce Steven Rostedt (Red Hat 2014-01-14 6361) tr->current_trace->enabled--;
613f04a0f51e6e Steven Rostedt (Red Hat 2013-03-14 6362)
2b6080f28c7cc3 Steven Rostedt 2012-05-11 6363 if (tr->current_trace->reset)
2b6080f28c7cc3 Steven Rostedt 2012-05-11 6364 tr->current_trace->reset(tr);
613f04a0f51e6e Steven Rostedt (Red Hat 2013-03-14 6365)
b1e5d74d04bbcf Steven Rostedt 2026-02-07 6366 had_max_tr = tracer_uses_snapshot(tr->current_trace);
a541a9559bb0a8 Steven Rostedt (Google 2022-10-05 6367)
7440172974e85b Paul E. McKenney 2018-11-06 6368 /* Current trace needs to be nop_trace before synchronize_rcu */
2b6080f28c7cc3 Steven Rostedt 2012-05-11 6369 tr->current_trace = &nop_trace;
428add559b6923 Steven Rostedt 2025-11-11 6370 tr->current_trace_flags = nop_trace.flags;
34600f0e9c33c9 Steven Rostedt 2013-01-22 6371
b1e5d74d04bbcf Steven Rostedt 2026-02-07 6372 if (had_max_tr && !tracer_uses_snapshot(trace)) {
34600f0e9c33c9 Steven Rostedt 2013-01-22 6373 /*
34600f0e9c33c9 Steven Rostedt 2013-01-22 6374 * We need to make sure that the update_max_tr sees that
34600f0e9c33c9 Steven Rostedt 2013-01-22 6375 * current_trace changed to nop_trace to keep it from
34600f0e9c33c9 Steven Rostedt 2013-01-22 6376 * swapping the buffers after we resize it.
34600f0e9c33c9 Steven Rostedt 2013-01-22 6377 * The update_max_tr is called from interrupts disabled
34600f0e9c33c9 Steven Rostedt 2013-01-22 6378 * so a synchronized_sched() is sufficient.
34600f0e9c33c9 Steven Rostedt 2013-01-22 6379 */
7440172974e85b Paul E. McKenney 2018-11-06 6380 synchronize_rcu();
3209cff4490bee Steven Rostedt (Red Hat 2013-03-12 6381) free_snapshot(tr);
180e4e390978af Vincent Donnefort 2024-02-20 6382 tracing_disarm_snapshot(tr);
ef710e100c1068 KOSAKI Motohiro 2010-07-01 6383 }
12883efb670c28 Steven Rostedt (Red Hat 2013-03-05 6384)
b1e5d74d04bbcf Steven Rostedt 2026-02-07 6385 if (!had_max_tr && tracer_uses_snapshot(trace)) {
180e4e390978af Vincent Donnefort 2024-02-20 6386 ret = tracing_arm_snapshot_locked(tr);
180e4e390978af Vincent Donnefort 2024-02-20 6387 if (ret)
d33b10c0c73adc Steven Rostedt 2024-12-24 6388 return ret;
ef710e100c1068 KOSAKI Motohiro 2010-07-01 6389 }
577b785f55168d Steven Rostedt 2009-02-26 6390
428add559b6923 Steven Rostedt 2025-11-11 6391 tr->current_trace_flags = t->flags ? : t->tracer->flags;
428add559b6923 Steven Rostedt 2025-11-11 6392
428add559b6923 Steven Rostedt 2025-11-11 6393 if (trace->init) {
428add559b6923 Steven Rostedt 2025-11-11 6394 ret = tracer_init(trace, tr);
180e4e390978af Vincent Donnefort 2024-02-20 6395 if (ret) {
b1e5d74d04bbcf Steven Rostedt 2026-02-07 6396 if (tracer_uses_snapshot(trace))
180e4e390978af Vincent Donnefort 2024-02-20 6397 tracing_disarm_snapshot(tr);
428add559b6923 Steven Rostedt 2025-11-11 6398 tr->current_trace_flags = nop_trace.flags;
d33b10c0c73adc Steven Rostedt 2024-12-24 6399 return ret;
1c80025a49855b Frederic Weisbecker 2008-11-16 6400 }
180e4e390978af Vincent Donnefort 2024-02-20 6401 }
bc0c38d139ec7f Steven Rostedt 2008-05-12 6402
428add559b6923 Steven Rostedt 2025-11-11 6403 tr->current_trace = trace;
50512ab576e1ce Steven Rostedt (Red Hat 2014-01-14 6404) tr->current_trace->enabled++;
9f029e83e968e5 Steven Rostedt 2008-11-12 6405 trace_branch_enable(tr);
bc0c38d139ec7f Steven Rostedt 2008-05-12 6406
d33b10c0c73adc Steven Rostedt 2024-12-24 6407 return 0;
d9e540762f5cdd Peter Zijlstra 2008-11-01 6408 }
d9e540762f5cdd Peter Zijlstra 2008-11-01 6409
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
© 2016 - 2026 Red Hat, Inc.