Hi Florent, On Wed, 9 Aug 2023 12:28:38 +0200 Florent Revest <revest@xxxxxxxxxxxx> wrote: > On Mon, Aug 7, 2023 at 8:48 AM Masami Hiramatsu (Google) > <mhiramat@xxxxxxxxxx> wrote: > > > > From: Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx> > > > > This allows fprobes to be available with CONFIG_DYNAMIC_FTRACE_WITH_ARGS > > instead of CONFIG_DYNAMIC_FTRACE_WITH_REGS, then we can enable fprobe > > on arm64. > > This patch lets fprobe code build on configs WITH_ARGS and !WITH_REGS > but fprobe wouldn't run on these builds because fprobe still registers > to ftrace with FTRACE_OPS_FL_SAVE_REGS, which would fail on > !WITH_REGS. Shouldn't we also let the fprobe_init callers decide > whether they want REGS or not ? Ah, I think you meant FPROBE_EVENTS? Yes I forgot to add the dependency on it. But fprobe itself can work because fprobe just pass the ftrace_regs to the handlers. (Note that exit callback may not work until next patch) > > > static int > > kprobe_multi_link_handler(struct fprobe *fp, unsigned long fentry_ip, > > - unsigned long ret_ip, struct pt_regs *regs, > > + unsigned long ret_ip, struct ftrace_regs *fregs, > > void *data) > > { > > struct bpf_kprobe_multi_link *link; > > + struct pt_regs *regs = ftrace_get_regs(fregs); > > + > > + if (!regs) > > + return 0; > > (with the above comment addressed) this means that BPF multi_kprobe > would successfully attach on builds WITH_ARGS but the programs would > never actually run because here regs would be 0. This is a confusing > failure mode for the user. I think that if multi_kprobe won't work > (because we don't have a pt_regs conversion path yet), the user should > be notified at attachment time that they won't be getting any events. Yes, so I changed it will not be compiled in that case. @@ -2460,7 +2460,7 @@ static int __init bpf_event_init(void) fs_initcall(bpf_event_init); #endif /* CONFIG_MODULES */ -#ifdef CONFIG_FPROBE +#ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS struct bpf_kprobe_multi_link { struct bpf_link link; struct fprobe fp; > That's why I think kprobe_multi should inform fprobe_init that it > wants FTRACE_OPS_FL_SAVE_REGS and fail if that's not possible (no > trampoline for it for example) Yeah, that's another possibility, but in the previous thread we discussed and agreed to introduce the ftrace_partial_regs() which will copy the partial registers from ftrace_regs to pt_regs. Thank you, -- Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx>