From: Steven Rostedt <rostedt@goodmis.org>
The persistent ring buffer from a previous boot has to be careful printing
events as the print formats of random events can have pointers to strings
and such that are not available.
Ftrace static events (like the function tracer event) are stable and are
printed normally.
System call event formats are also stable. Allow them to be printed
normally as well:
Instead of:
<...>-1 [005] ...1. 57.240405: sys_enter_waitid: __syscall_nr=0xf7 (247) which=0x1 (1) upid=0x499 (1177) infop=0x7ffd5294d690 (140725988939408) options=0x5 (5) ru=0x0 (0)
<...>-1 [005] ...1. 57.240433: sys_exit_waitid: __syscall_nr=0xf7 (247) ret=0x0 (0)
<...>-1 [005] ...1. 57.240437: sys_enter_rt_sigprocmask: __syscall_nr=0xe (14) how=0x2 (2) nset=0x7ffd5294d7c0 (140725988939712) oset=0x0 (0) sigsetsize=0x8 (8)
<...>-1 [005] ...1. 57.240438: sys_exit_rt_sigprocmask: __syscall_nr=0xe (14) ret=0x0 (0)
<...>-1 [005] ...1. 57.240442: sys_enter_close: __syscall_nr=0x3 (3) fd=0x4 (4)
<...>-1 [005] ...1. 57.240463: sys_exit_close: __syscall_nr=0x3 (3) ret=0x0 (0)
<...>-1 [005] ...1. 57.240485: sys_enter_openat: __syscall_nr=0x101 (257) dfd=0xffffffffffdfff9c (-2097252) filename=(0xffff8b81639ca01c) flags=0x80000 (524288) mode=0x0 (0) __filename_val=/run/systemd/reboot-param
<...>-1 [005] ...1. 57.240555: sys_exit_openat: __syscall_nr=0x101 (257) ret=0xffffffffffdffffe (-2097154)
<...>-1 [005] ...1. 57.240571: sys_enter_openat: __syscall_nr=0x101 (257) dfd=0xffffffffffdfff9c (-2097252) filename=(0xffff8b81639ca01c) flags=0x80000 (524288) mode=0x0 (0) __filename_val=/run/systemd/reboot-param
<...>-1 [005] ...1. 57.240620: sys_exit_openat: __syscall_nr=0x101 (257) ret=0xffffffffffdffffe (-2097154)
<...>-1 [005] ...1. 57.240629: sys_enter_writev: __syscall_nr=0x14 (20) fd=0x3 (3) vec=0x7ffd5294ce50 (140725988937296) vlen=0x7 (7)
<...>-1 [005] ...1. 57.242281: sys_exit_writev: __syscall_nr=0x14 (20) ret=0x24 (36)
<...>-1 [005] ...1. 57.242286: sys_enter_reboot: __syscall_nr=0xa9 (169) magic1=0xfee1dead (4276215469) magic2=0x28121969 (672274793) cmd=0x1234567 (19088743) arg=0x0 (0)
Have:
<...>-1 [000] ...1. 91.446011: sys_waitid(which: 1, upid: 0x4d2, infop: 0x7ffdccdadfd0, options: 5, ru: 0)
<...>-1 [000] ...1. 91.446042: sys_waitid -> 0x0
<...>-1 [000] ...1. 91.446045: sys_rt_sigprocmask(how: 2, nset: 0x7ffdccdae100, oset: 0, sigsetsize: 8)
<...>-1 [000] ...1. 91.446047: sys_rt_sigprocmask -> 0x0
<...>-1 [000] ...1. 91.446051: sys_close(fd: 4)
<...>-1 [000] ...1. 91.446073: sys_close -> 0x0
<...>-1 [000] ...1. 91.446095: sys_openat(dfd: 18446744073709551516, filename: 139732544945794 "/run/systemd/reboot-param", flags: O_RDONLY|O_CLOEXEC)
<...>-1 [000] ...1. 91.446165: sys_openat -> 0xfffffffffffffffe
<...>-1 [000] ...1. 91.446182: sys_openat(dfd: 18446744073709551516, filename: 139732544945794 "/run/systemd/reboot-param", flags: O_RDONLY|O_CLOEXEC)
<...>-1 [000] ...1. 91.446233: sys_openat -> 0xfffffffffffffffe
<...>-1 [000] ...1. 91.446242: sys_writev(fd: 3, vec: 0x7ffdccdad790, vlen: 7)
<...>-1 [000] ...1. 91.447877: sys_writev -> 0x24
<...>-1 [000] ...1. 91.447883: sys_reboot(magic1: 0xfee1dead, magic2: 0x28121969, cmd: 0x1234567, arg: 0)
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
kernel/trace/trace.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 2aee9a3088f4..98d8a33d03ff 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -20,6 +20,7 @@
#include <linux/security.h>
#include <linux/seq_file.h>
#include <linux/irqflags.h>
+#include <linux/syscalls.h>
#include <linux/debugfs.h>
#include <linux/tracefs.h>
#include <linux/pagemap.h>
@@ -4251,10 +4252,13 @@ static enum print_line_t print_trace_fmt(struct trace_iterator *iter)
* safe to use if the array has delta offsets
* Force printing via the fields.
*/
- if ((tr->text_delta) &&
- event->type > __TRACE_LAST_TYPE)
+ if ((tr->text_delta)) {
+ /* ftrace and system call events are still OK */
+ if ((event->type > __TRACE_LAST_TYPE) &&
+ (event->funcs != &enter_syscall_print_funcs) &&
+ (event->funcs != &exit_syscall_print_funcs))
return print_event_fields(iter, event);
-
+ }
return event->funcs->trace(iter, sym_flags, event);
}
--
2.51.0
Hi Steven,
kernel test robot noticed the following build errors:
[auto build test ERROR on akpm-mm/mm-everything]
[also build test ERROR on linus/master v6.18-rc1 next-20251015]
[cannot apply to trace/for-next acme/perf/core]
[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-Make-trace_user_fault_read-exposed-to-rest-of-tracing/20251016-014059
base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
patch link: https://lore.kernel.org/r/20251015173550.225723717%40kernel.org
patch subject: [PATCH v3 13/13] tracing: Have persistent ring buffer print syscalls normally
config: x86_64-defconfig (https://download.01.org/0day-ci/archive/20251016/202510161956.5wnA6TUc-lkp@intel.com/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251016/202510161956.5wnA6TUc-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/202510161956.5wnA6TUc-lkp@intel.com/
All errors (new ones prefixed by >>):
kernel/trace/trace.c: In function 'print_trace_fmt':
>> kernel/trace/trace.c:4258:47: error: 'enter_syscall_print_funcs' undeclared (first use in this function)
4258 | (event->funcs != &enter_syscall_print_funcs) &&
| ^~~~~~~~~~~~~~~~~~~~~~~~~
kernel/trace/trace.c:4258:47: note: each undeclared identifier is reported only once for each function it appears in
>> kernel/trace/trace.c:4259:47: error: 'exit_syscall_print_funcs' undeclared (first use in this function)
4259 | (event->funcs != &exit_syscall_print_funcs))
| ^~~~~~~~~~~~~~~~~~~~~~~~
kernel/trace/trace.c: In function 'tracer_alloc_buffers':
kernel/trace/trace.c:11443:39: error: 'CONFIG_TRACE_SYSCALL_BUF_SIZE_DEFAULT' undeclared (first use in this function)
11443 | global_trace.syscall_buf_sz = CONFIG_TRACE_SYSCALL_BUF_SIZE_DEFAULT;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vim +/enter_syscall_print_funcs +4258 kernel/trace/trace.c
4222
4223 static enum print_line_t print_trace_fmt(struct trace_iterator *iter)
4224 {
4225 struct trace_array *tr = iter->tr;
4226 struct trace_seq *s = &iter->seq;
4227 unsigned long sym_flags = (tr->trace_flags & TRACE_ITER_SYM_MASK);
4228 struct trace_entry *entry;
4229 struct trace_event *event;
4230
4231 entry = iter->ent;
4232
4233 test_cpu_buff_start(iter);
4234
4235 event = ftrace_find_event(entry->type);
4236
4237 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) {
4238 if (iter->iter_flags & TRACE_FILE_LAT_FMT)
4239 trace_print_lat_context(iter);
4240 else
4241 trace_print_context(iter);
4242 }
4243
4244 if (trace_seq_has_overflowed(s))
4245 return TRACE_TYPE_PARTIAL_LINE;
4246
4247 if (event) {
4248 if (tr->trace_flags & TRACE_ITER_FIELDS)
4249 return print_event_fields(iter, event);
4250 /*
4251 * For TRACE_EVENT() events, the print_fmt is not
4252 * safe to use if the array has delta offsets
4253 * Force printing via the fields.
4254 */
4255 if ((tr->text_delta)) {
4256 /* ftrace and system call events are still OK */
4257 if ((event->type > __TRACE_LAST_TYPE) &&
> 4258 (event->funcs != &enter_syscall_print_funcs) &&
> 4259 (event->funcs != &exit_syscall_print_funcs))
4260 return print_event_fields(iter, event);
4261 }
4262 return event->funcs->trace(iter, sym_flags, event);
4263 }
4264
4265 trace_seq_printf(s, "Unknown type %d\n", entry->type);
4266
4267 return trace_handle_return(s);
4268 }
4269
--
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 akpm-mm/mm-everything]
[also build test ERROR on linus/master v6.18-rc1 next-20251015]
[cannot apply to trace/for-next acme/perf/core]
[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-Make-trace_user_fault_read-exposed-to-rest-of-tracing/20251016-014059
base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
patch link: https://lore.kernel.org/r/20251015173550.225723717%40kernel.org
patch subject: [PATCH v3 13/13] tracing: Have persistent ring buffer print syscalls normally
config: s390-randconfig-001-20251016 (https://download.01.org/0day-ci/archive/20251016/202510161708.yF2I7Qqq-lkp@intel.com/config)
compiler: clang version 18.1.8 (https://github.com/llvm/llvm-project 3b5b5c1ec4a3095ab096dd780e84d7ab81f3d7ff)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251016/202510161708.yF2I7Qqq-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/202510161708.yF2I7Qqq-lkp@intel.com/
All errors (new ones prefixed by >>):
>> kernel/trace/trace.c:4258:26: error: use of undeclared identifier 'enter_syscall_print_funcs'
4258 | (event->funcs != &enter_syscall_print_funcs) &&
| ^
>> kernel/trace/trace.c:4259:26: error: use of undeclared identifier 'exit_syscall_print_funcs'
4259 | (event->funcs != &exit_syscall_print_funcs))
| ^
kernel/trace/trace.c:11443:32: error: use of undeclared identifier 'CONFIG_TRACE_SYSCALL_BUF_SIZE_DEFAULT'
11443 | global_trace.syscall_buf_sz = CONFIG_TRACE_SYSCALL_BUF_SIZE_DEFAULT;
| ^
3 errors generated.
vim +/enter_syscall_print_funcs +4258 kernel/trace/trace.c
4222
4223 static enum print_line_t print_trace_fmt(struct trace_iterator *iter)
4224 {
4225 struct trace_array *tr = iter->tr;
4226 struct trace_seq *s = &iter->seq;
4227 unsigned long sym_flags = (tr->trace_flags & TRACE_ITER_SYM_MASK);
4228 struct trace_entry *entry;
4229 struct trace_event *event;
4230
4231 entry = iter->ent;
4232
4233 test_cpu_buff_start(iter);
4234
4235 event = ftrace_find_event(entry->type);
4236
4237 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) {
4238 if (iter->iter_flags & TRACE_FILE_LAT_FMT)
4239 trace_print_lat_context(iter);
4240 else
4241 trace_print_context(iter);
4242 }
4243
4244 if (trace_seq_has_overflowed(s))
4245 return TRACE_TYPE_PARTIAL_LINE;
4246
4247 if (event) {
4248 if (tr->trace_flags & TRACE_ITER_FIELDS)
4249 return print_event_fields(iter, event);
4250 /*
4251 * For TRACE_EVENT() events, the print_fmt is not
4252 * safe to use if the array has delta offsets
4253 * Force printing via the fields.
4254 */
4255 if ((tr->text_delta)) {
4256 /* ftrace and system call events are still OK */
4257 if ((event->type > __TRACE_LAST_TYPE) &&
> 4258 (event->funcs != &enter_syscall_print_funcs) &&
> 4259 (event->funcs != &exit_syscall_print_funcs))
4260 return print_event_fields(iter, event);
4261 }
4262 return event->funcs->trace(iter, sym_flags, event);
4263 }
4264
4265 trace_seq_printf(s, "Unknown type %d\n", entry->type);
4266
4267 return trace_handle_return(s);
4268 }
4269
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
© 2016 - 2025 Red Hat, Inc.