All of lore.kernel.org
 help / color / mirror / Atom feed
From: Menglong Dong <menglong.dong@linux.dev>
To: Menglong Dong <menglong8.dong@gmail.com>,
	Masami Hiramatsu <mhiramat@kernel.org>
Cc: rostedt@goodmis.org, jolsa@kernel.org,
	mathieu.desnoyers@efficios.com, jiang.biao@linux.dev,
	linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org
Subject: Re: [PATCH v2] tracing: fprobe: use ftrace if CONFIG_DYNAMIC_FTRACE_WITH_ARGS
Date: Mon, 03 Nov 2025 14:17:39 +0800	[thread overview]
Message-ID: <2803973.mvXUDI8C0e@7950hx> (raw)
In-Reply-To: <20251103121606.bb5b1405e1e64267f7f3ebe5@kernel.org>

On 2025/11/3 11:16, Masami Hiramatsu wrote:
> On Fri, 31 Oct 2025 10:40:38 +0800
> Menglong Dong <menglong8.dong@gmail.com> wrote:
> 
> > For now, we will use ftrace for the fprobe if fp->exit_handler not exists
> > and CONFIG_DYNAMIC_FTRACE_WITH_REGS is enabled.
> > 
> > However, CONFIG_DYNAMIC_FTRACE_WITH_REGS is not supported by some arch,
> > such as arm. What we need in the fprobe is the function arguments, so we
> > can use ftrace for fprobe if CONFIG_DYNAMIC_FTRACE_WITH_ARGS is enabled.
> > 
> > Therefore, use ftrace if CONFIG_DYNAMIC_FTRACE_WITH_REGS or
> > CONFIG_DYNAMIC_FTRACE_WITH_ARGS enabled.
> > 
> > Signed-off-by: Menglong Dong <dongml2@chinatelecom.cn>
> > ---
> > v2:
> > - remove the definition of FPROBE_USE_FTRACE
> > ---
> >  kernel/trace/fprobe.c | 30 +++++++++++++++++++-----------
> >  1 file changed, 19 insertions(+), 11 deletions(-)
> > 
> > diff --git a/kernel/trace/fprobe.c b/kernel/trace/fprobe.c
> > index ecd623eef68b..742ad5a61d46 100644
> > --- a/kernel/trace/fprobe.c
> > +++ b/kernel/trace/fprobe.c
> > @@ -44,6 +44,7 @@
> >  static struct hlist_head fprobe_table[FPROBE_TABLE_SIZE];
> >  static struct rhltable fprobe_ip_table;
> >  static DEFINE_MUTEX(fprobe_mutex);
> > +static struct fgraph_ops fprobe_graph_ops;
> >  
> >  static u32 fprobe_node_hashfn(const void *data, u32 len, u32 seed)
> >  {
> > @@ -254,7 +255,7 @@ static inline int __fprobe_kprobe_handler(unsigned long ip, unsigned long parent
> >  	return ret;
> >  }
> >  
> > -#ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS
> > +#if defined(CONFIG_DYNAMIC_FTRACE_WITH_ARGS) || defined(CONFIG_DYNAMIC_FTRACE_WITH_REGS)
> >  /* ftrace_ops callback, this processes fprobes which have only entry_handler. */
> >  static void fprobe_ftrace_entry(unsigned long ip, unsigned long parent_ip,
> >  	struct ftrace_ops *ops, struct ftrace_regs *fregs)
> > @@ -295,7 +296,7 @@ NOKPROBE_SYMBOL(fprobe_ftrace_entry);
> >  
> >  static struct ftrace_ops fprobe_ftrace_ops = {
> >  	.func	= fprobe_ftrace_entry,
> > -	.flags	= FTRACE_OPS_FL_SAVE_REGS,
> > +	.flags	= FTRACE_OPS_FL_SAVE_ARGS,
> >  };
> >  static int fprobe_ftrace_active;
> >  
> > @@ -335,6 +336,13 @@ static bool fprobe_is_ftrace(struct fprobe *fp)
> >  {
> >  	return !fp->exit_handler;
> >  }
> > +
> 
> Ah, the new function depends on MODULES. 
> 
> #ifdef CONFIG_MODULES
> 
> > +static void fprobe_set_ips(unsigned long *ips, unsigned int cnt, int remove,
> > +			   int reset)
> > +{
> > +	ftrace_set_filter_ips(&fprobe_graph_ops.ops, ips, cnt, remove, reset);
> > +	ftrace_set_filter_ips(&fprobe_ftrace_ops, ips, cnt, remove, reset);
> > +}
> 
> #endif	/* CONFIG_MODULES */

Yeah, I saw the CI's build warning. I'll send a V3 to fix
this issue.

Thanks!
Menglong Dong

> 
> >  #else
> 
> #ifdef CONFIG_MODULES
> 
> >  static int fprobe_ftrace_add_ips(unsigned long *addrs, int num)
> >  {
> > @@ -349,7 +357,13 @@ static bool fprobe_is_ftrace(struct fprobe *fp)
> >  {
> >  	return false;
> >  }
> 
> #endif	/* CONFIG_MODULES */
> 
> are needed.
> 
> Thank you,
> 
> > -#endif
> > +
> > +static void fprobe_set_ips(unsigned long *ips, unsigned int cnt, int remove,
> > +			   int reset)
> > +{
> > +	ftrace_set_filter_ips(&fprobe_graph_ops.ops, ips, cnt, remove, reset);
> > +}
> > +#endif /* !CONFIG_DYNAMIC_FTRACE_WITH_ARGS && !CONFIG_DYNAMIC_FTRACE_WITH_REGS */
> >  
> >  /* fgraph_ops callback, this processes fprobes which have exit_handler. */
> >  static int fprobe_fgraph_entry(struct ftrace_graph_ent *trace, struct fgraph_ops *gops,
> > @@ -596,14 +610,8 @@ static int fprobe_module_callback(struct notifier_block *nb,
> >  	} while (node == ERR_PTR(-EAGAIN));
> >  	rhashtable_walk_exit(&iter);
> >  
> > -	if (alist.index > 0) {
> > -		ftrace_set_filter_ips(&fprobe_graph_ops.ops,
> > -				      alist.addrs, alist.index, 1, 0);
> > -#ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS
> > -		ftrace_set_filter_ips(&fprobe_ftrace_ops,
> > -				      alist.addrs, alist.index, 1, 0);
> > -#endif
> > -	}
> > +	if (alist.index > 0)
> > +		fprobe_set_ips(alist.addrs, alist.index, 1, 0);
> >  	mutex_unlock(&fprobe_mutex);
> >  
> >  	kfree(alist.addrs);
> 
> 
> 





      reply	other threads:[~2025-11-03  6:18 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-31  2:40 [PATCH v2] tracing: fprobe: use ftrace if CONFIG_DYNAMIC_FTRACE_WITH_ARGS Menglong Dong
2025-11-01 18:20 ` kernel test robot
2025-11-03  3:16 ` Masami Hiramatsu
2025-11-03  6:17   ` Menglong Dong [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2803973.mvXUDI8C0e@7950hx \
    --to=menglong.dong@linux.dev \
    --cc=jiang.biao@linux.dev \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-trace-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=menglong8.dong@gmail.com \
    --cc=mhiramat@kernel.org \
    --cc=rostedt@goodmis.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.