On Tue, 7 Nov 2023 08:48:44 -0500 Steven Rostedt <rostedt@xxxxxxxxxxx> wrote: > On Tue, 7 Nov 2023 14:43:28 +0900 > Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx> wrote: > > > > > > > It's only needed if an architecture supports direct trampolines. > > > > I see, and x86_64 needs it. > > OK, maybe better to keep it clear on x86-64 even on the > > return handler. > > As it is arch specific, I'm not sure it matters for the return handler, as > the return should never call a direct trampoline. Just to clarify, the return trampoline should not bother touching that register. The register was cleared in the fentry trampoline before calling all the callbacks because the arch_ftrace_set_direct_caller() would set it. Then on return of calling the function callbacks, it would test if something set it or not. If the return trampoline is not testing it after the return from the callbacks, there's no reason to clear it. The fentry trampoline used it to communicate to itself: orig_rax = 0; call ftrace_ops_list_func() /* Did something set orig_rax? */ if (orig_rax != 0) return orig_rax; It's not setting it to communicate with the callbacks. That is, the callback does not expect it to be set. -- Steve