• Naveen N Rao's avatar
    powerpc/ftrace: Stop re-purposing linker generated long branches for ftrace · 33bb8a0b
    Naveen N Rao authored
    Commit 67361cf8 ("powerpc/ftrace: Handle large kernel configs")
    added ftrace support for ppc64 kernel images with a text section larger
    than 32MB. The patch did two things:
    1. Add stubs at the end of .text to branch into ftrace_[regs_]caller for
       functions that were out of branch range.
    2. Re-purpose linker-generated long branches to _mcount to instead branch
       to ftrace_[regs_]caller.
    
    Before that, we only supported kernel .text up to ~32MB. With the above,
    we now support up to ~96MB:
    - The first 32MB of kernel text can branch directly into
      ftrace_[regs_]caller since that symbol is usually at the beginning.
    - The modified long_branch from (2) above is used by the next 32MB of
      kernel text.
    - The next 32MB of kernel text can use the stub at the end of text to
      branch back to ftrace_[regs_]caller.
    
    While re-purposing the long branch works in practice, it still restricts
    ftrace to kernel text up to ~96MB. The stub at the end of kernel text
    from (1) already enables us to extend ftrace support for kernel text
    up to 64MB, which fulfils the original requirement. Further, once we
    switch to -fpatchable-function-entry, there will not be a long branch
    that we can use.
    
    Stop re-purposing the linker-generated long branches for ftrace to
    simplify the code. If there are good reasons to support ftrace on
    kernels beyond 64MB, we can consider adding support by using
    -fpatchable-function-entry.
    Signed-off-by: default avatarNaveen N Rao <naveen@kernel.org>
    Reviewed-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/33fa3be97f8e1f2171254ef2e1b0d5c8836c11fd.1687166935.git.naveen@kernel.org
    33bb8a0b
ftrace.c 18.3 KB