2024-05-26 11:29:58

by Tatsuya S

[permalink] [raw]
Subject: [PATCH] ftrace: Fix stack trace entry generated by ftrace_pid_func()

On setting set_ftrace_pid, a extra entry generated by ftrace_pid_func()
is shown on stack trace(CONFIG_UNWINDER_FRAME_POINTER=y).

[004] ..... 68.459382: <stack trace>
=> 0xffffffffa00090af
=> ksys_read
=> __x64_sys_read
=> x64_sys_call
=> do_syscall_64
=> entry_SYSCALL_64_after_hwframe

To resolve this issue, increment skip count
in function_stack_trace_call() if pids are set.

Signed-off-by: Tatsuya S <[email protected]>
---
include/linux/ftrace.h | 1 +
kernel/trace/ftrace.c | 2 +-
kernel/trace/trace_functions.c | 7 ++++++-
3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h
index 800995c425e0..d14447c0d0e9 100644
--- a/include/linux/ftrace.h
+++ b/include/linux/ftrace.h
@@ -666,6 +666,7 @@ unsigned long ftrace_location(unsigned long ip);
unsigned long ftrace_location_range(unsigned long start, unsigned long end);
unsigned long ftrace_get_addr_new(struct dyn_ftrace *rec);
unsigned long ftrace_get_addr_curr(struct dyn_ftrace *rec);
+bool ftrace_pids_enabled(struct ftrace_ops *ops);

extern ftrace_func_t ftrace_trace_function;

diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 65208d3b5ed9..e8ddd56d1e55 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -99,7 +99,7 @@ struct ftrace_ops *function_trace_op __read_mostly = &ftrace_list_end;
/* What to set function_trace_op to */
static struct ftrace_ops *set_function_trace_op;

-static bool ftrace_pids_enabled(struct ftrace_ops *ops)
+bool ftrace_pids_enabled(struct ftrace_ops *ops)
{
struct trace_array *tr;

diff --git a/kernel/trace/trace_functions.c b/kernel/trace/trace_functions.c
index 9f1bfbe105e8..455c9a880199 100644
--- a/kernel/trace/trace_functions.c
+++ b/kernel/trace/trace_functions.c
@@ -223,6 +223,7 @@ function_stack_trace_call(unsigned long ip, unsigned long parent_ip,
long disabled;
int cpu;
unsigned int trace_ctx;
+ int skip = STACK_SKIP;

if (unlikely(!tr->function_enabled))
return;
@@ -239,7 +240,11 @@ function_stack_trace_call(unsigned long ip, unsigned long parent_ip,
if (likely(disabled == 1)) {
trace_ctx = tracing_gen_ctx_flags(flags);
trace_function(tr, ip, parent_ip, trace_ctx);
- __trace_stack(tr, trace_ctx, STACK_SKIP);
+#ifdef CONFIG_UNWINDER_FRAME_POINTER
+ if (ftrace_pids_enabled(op))
+ skip++;
+#endif
+ __trace_stack(tr, trace_ctx, skip);
}

atomic_dec(&data->disabled);
--
2.45.1



2024-05-26 14:52:29

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH] ftrace: Fix stack trace entry generated by ftrace_pid_func()

Hi Tatsuya,

kernel test robot noticed the following build warnings:

[auto build test WARNING on linus/master]
[also build test WARNING on rostedt-trace/for-next v6.9 next-20240523]
[cannot apply to rostedt-trace/for-next-urgent]
[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/Tatsuya-S/ftrace-Fix-stack-trace-entry-generated-by-ftrace_pid_func/20240526-193149
base: linus/master
patch link: https://lore.kernel.org/r/20240526112658.46740-1-tatsuya.s2862%40gmail.com
patch subject: [PATCH] ftrace: Fix stack trace entry generated by ftrace_pid_func()
config: x86_64-buildonly-randconfig-002-20240526 (https://download.01.org/0day-ci/archive/20240526/[email protected]/config)
compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240526/[email protected]/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 <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All warnings (new ones prefixed by >>):

>> kernel/trace/ftrace.c:102:6: warning: no previous prototype for function 'ftrace_pids_enabled' [-Wmissing-prototypes]
102 | bool ftrace_pids_enabled(struct ftrace_ops *ops)
| ^
kernel/trace/ftrace.c:102:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
102 | bool ftrace_pids_enabled(struct ftrace_ops *ops)
| ^
| static
1 warning generated.


vim +/ftrace_pids_enabled +102 kernel/trace/ftrace.c

101
> 102 bool ftrace_pids_enabled(struct ftrace_ops *ops)
103 {
104 struct trace_array *tr;
105
106 if (!(ops->flags & FTRACE_OPS_FL_PID) || !ops->private)
107 return false;
108
109 tr = ops->private;
110
111 return tr->function_pids != NULL || tr->function_no_pids != NULL;
112 }
113

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

2024-05-26 23:17:30

by Masami Hiramatsu

[permalink] [raw]
Subject: Re: [PATCH] ftrace: Fix stack trace entry generated by ftrace_pid_func()

On Sun, 26 May 2024 22:51:53 +0800
kernel test robot <[email protected]> wrote:

> Hi Tatsuya,
>
> kernel test robot noticed the following build warnings:
>
> [auto build test WARNING on linus/master]
> [also build test WARNING on rostedt-trace/for-next v6.9 next-20240523]
> [cannot apply to rostedt-trace/for-next-urgent]
> [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/Tatsuya-S/ftrace-Fix-stack-trace-entry-generated-by-ftrace_pid_func/20240526-193149
> base: linus/master
> patch link: https://lore.kernel.org/r/20240526112658.46740-1-tatsuya.s2862%40gmail.com
> patch subject: [PATCH] ftrace: Fix stack trace entry generated by ftrace_pid_func()
> config: x86_64-buildonly-randconfig-002-20240526 (https://download.01.org/0day-ci/archive/20240526/[email protected]/config)
> compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1)
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240526/[email protected]/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 <[email protected]>
> | Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
>
> All warnings (new ones prefixed by >>):
>
> >> kernel/trace/ftrace.c:102:6: warning: no previous prototype for function 'ftrace_pids_enabled' [-Wmissing-prototypes]
> 102 | bool ftrace_pids_enabled(struct ftrace_ops *ops)
> | ^
> kernel/trace/ftrace.c:102:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
> 102 | bool ftrace_pids_enabled(struct ftrace_ops *ops)
> | ^
> | static
> 1 warning generated.

This is because the prototype in linux/ftrace.h is placed in the
#ifdef CONFIG_DYNAMIC_FTRACE block. The prototype needs to be moved
outside of the block.

Thank you,

>
>
> vim +/ftrace_pids_enabled +102 kernel/trace/ftrace.c
>
> 101
> > 102 bool ftrace_pids_enabled(struct ftrace_ops *ops)
> 103 {
> 104 struct trace_array *tr;
> 105
> 106 if (!(ops->flags & FTRACE_OPS_FL_PID) || !ops->private)
> 107 return false;
> 108
> 109 tr = ops->private;
> 110
> 111 return tr->function_pids != NULL || tr->function_no_pids != NULL;
> 112 }
> 113
>
> --
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki


--
Masami Hiramatsu (Google) <[email protected]>

2024-05-27 05:47:42

by Tatsuya S

[permalink] [raw]
Subject: Re: [PATCH] ftrace: Fix stack trace entry generated by ftrace_pid_func()

On Mon, May 27, 2024 at 08:17:19AM GMT, Masami Hiramatsu wrote:
> On Sun, 26 May 2024 22:51:53 +0800
> kernel test robot <[email protected]> wrote:
>
> > Hi Tatsuya,
> >
> > kernel test robot noticed the following build warnings:
> >
> > [auto build test WARNING on linus/master]
> > [also build test WARNING on rostedt-trace/for-next v6.9 next-20240523]
> > [cannot apply to rostedt-trace/for-next-urgent]
> > [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/Tatsuya-S/ftrace-Fix-stack-trace-entry-generated-by-ftrace_pid_func/20240526-193149
> > base: linus/master
> > patch link: https://lore.kernel.org/r/20240526112658.46740-1-tatsuya.s2862%40gmail.com
> > patch subject: [PATCH] ftrace: Fix stack trace entry generated by ftrace_pid_func()
> > config: x86_64-buildonly-randconfig-002-20240526 (https://download.01.org/0day-ci/archive/20240526/[email protected]/config)
> > compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1)
> > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240526/[email protected]/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 <[email protected]>
> > | Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
> >
> > All warnings (new ones prefixed by >>):
> >
> > >> kernel/trace/ftrace.c:102:6: warning: no previous prototype for function 'ftrace_pids_enabled' [-Wmissing-prototypes]
> > 102 | bool ftrace_pids_enabled(struct ftrace_ops *ops)
> > | ^
> > kernel/trace/ftrace.c:102:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
> > 102 | bool ftrace_pids_enabled(struct ftrace_ops *ops)
> > | ^
> > | static
> > 1 warning generated.
>
> This is because the prototype in linux/ftrace.h is placed in the
> #ifdef CONFIG_DYNAMIC_FTRACE block. The prototype needs to be moved
> outside of the block.
>
> Thank you,
>
> >
> >
> > vim +/ftrace_pids_enabled +102 kernel/trace/ftrace.c
> >
> > 101
> > > 102 bool ftrace_pids_enabled(struct ftrace_ops *ops)
> > 103 {
> > 104 struct trace_array *tr;
> > 105
> > 106 if (!(ops->flags & FTRACE_OPS_FL_PID) || !ops->private)
> > 107 return false;
> > 108
> > 109 tr = ops->private;
> > 110
> > 111 return tr->function_pids != NULL || tr->function_no_pids != NULL;
> > 112 }
> > 113
> >
> > --
> > 0-DAY CI Kernel Test Service
> > https://github.com/intel/lkp-tests/wiki
>
>
> --
> Masami Hiramatsu (Google) <[email protected]>

I understand. Thank you.