> On Jul 13, 2022, at 4:18 PM, Steven Rostedt <rostedt@xxxxxxxxxxx> wrote: > > On Thu, 2 Jun 2022 12:37:02 -0700 > Song Liu <song@xxxxxxxxxx> wrote: > >> This enables users of ftrace_direct_multi to specify the flags based on >> the actual use case. For example, some users may not set flag IPMODIFY. > > If we apply this patch without any of the others, then we are relying on > the caller to get it right? > > That is, can we register a direct function with this function and pick a > function with IPMODIFY already attached? Yes, if the direct function follows regs->ip, it works. For example, BPF trampoline with only fentry calls will just work with only this patch. Thanks, Song > > -- Steve > > >> >> Signed-off-by: Song Liu <song@xxxxxxxxxx> >> --- >> kernel/trace/ftrace.c | 5 ++--- >> 1 file changed, 2 insertions(+), 3 deletions(-) >> >> diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c >> index 2fcd17857ff6..afe782ae28d3 100644 >> --- a/kernel/trace/ftrace.c >> +++ b/kernel/trace/ftrace.c >> @@ -5456,8 +5456,7 @@ int modify_ftrace_direct(unsigned long ip, >> } >> EXPORT_SYMBOL_GPL(modify_ftrace_direct); >> >> -#define MULTI_FLAGS (FTRACE_OPS_FL_IPMODIFY | FTRACE_OPS_FL_DIRECT | \ >> - FTRACE_OPS_FL_SAVE_REGS) >> +#define MULTI_FLAGS (FTRACE_OPS_FL_DIRECT | FTRACE_OPS_FL_SAVE_REGS) >> >> static int check_direct_multi(struct ftrace_ops *ops) >> { >> @@ -5547,7 +5546,7 @@ int register_ftrace_direct_multi(struct ftrace_ops *ops, unsigned long addr) >> } >> >> ops->func = call_direct_funcs; >> - ops->flags = MULTI_FLAGS; >> + ops->flags |= MULTI_FLAGS; >> ops->trampoline = FTRACE_REGS_ADDR; >> >> err = register_ftrace_function(ops); >