Skip to content
  1. Aug 27, 2021
  2. Aug 25, 2021
  3. Aug 18, 2021
  4. Aug 05, 2021
  5. Aug 03, 2021
    • Ilya Leoshkevich's avatar
      s390/ftrace: implement hotpatching · de5012b4
      Ilya Leoshkevich authored
      
      
      s390 allows hotpatching the mask of a conditional jump instruction.
      Make use of this feature in order to avoid the expensive stop_machine()
      call.
      
      The new trampolines are split in 3 stages:
      
      - A first stage is a 6-byte relative conditional long branch located at
        each function's entry point. Its offset always points to the second
        stage for the corresponding function, and its mask is either all 0s
        (ftrace off) or all 1s (ftrace on). The code for flipping the mask is
        borrowed from ftrace_{enable,disable}_ftrace_graph_caller. After
        flipping, ftrace_arch_code_modify_post_process() syncs with all the
        other CPUs by sending SIGPs.
      
      - Second stages for vmlinux are stored in a separate part of the .text
        section reserved by the linker script, and in dynamically allocated
        memory for modules. This prevents the icache pollution. The total
        size of second stages is about 1.5% of that of the kernel image.
      
        Putting second stages in the .bss section is possible and decreases
        the size of the non-compressed vmlinux, but splits the kernel 1:1
        mapping, which is a bad tradeoff.
      
        Each second stage contains a call to the third stage, a pointer to
        the part of the intercepted function right after the first stage, and
        a pointer to an interceptor function (e.g. ftrace_caller).
      
        Second stages are 8-byte aligned for the future direct calls
        implementation.
      
      - There are only two copies of the third stage: in the .text section
        for vmlinux and in dynamically allocated memory for modules. It can be
        an expoline, which is relatively large, so inlining it into each
        second stage is prohibitively expensive.
      
      As a result of this organization, phoronix-test-suite with ftrace off
      does not show any performance degradation.
      
      Suggested-by: default avatarSven Schnelle <svens@linux.ibm.com>
      Suggested-by: default avatarVasily Gorbik <gor@linux.ibm.com>
      Co-developed-by: default avatarHeiko Carstens <hca@linux.ibm.com>
      Signed-off-by: default avatarIlya Leoshkevich <iii@linux.ibm.com>
      Link: https://lore.kernel.org/r/20210728212546.128248-3-iii@linux.ibm.com
      
      
      Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
      de5012b4