• Linus Torvalds's avatar
    Merge tag 'core-static_call-2020-10-12' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · dd502a81
    Linus Torvalds authored
    Pull static call support from Ingo Molnar:
     "This introduces static_call(), which is the idea of static_branch()
      applied to indirect function calls. Remove a data load (indirection)
      by modifying the text.
    
      They give the flexibility of function pointers, but with better
      performance. (This is especially important for cases where retpolines
      would otherwise be used, as retpolines can be pretty slow.)
    
      API overview:
    
          DECLARE_STATIC_CALL(name, func);
          DEFINE_STATIC_CALL(name, func);
          DEFINE_STATIC_CALL_NULL(name, typename);
    
          static_call(name)(args...);
          static_call_cond(name)(args...);
          static_call_update(name, func);
    
      x86 is supported via text patching, otherwise basic indirect calls are
      used, with function pointers.
    
      There's a second variant using inline code patching, inspired by
      jump-labels, implemented on x86 as well.
    
      The new APIs are utilized in the x86 perf code, a heavy user of
      function pointers, where static calls speed up the PMU handler by
      4.2% (!).
    
      The generic implementation is not really excercised on other
      architectures, outside of the trivial test_static_call_init()
      self-test"
    
    * tag 'core-static_call-2020-10-12' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (21 commits)
      static_call: Fix return type of static_call_init
      tracepoint: Fix out of sync data passing by static caller
      tracepoint: Fix overly long tracepoint names
      x86/perf, static_call: Optimize x86_pmu methods
      tracepoint: Optimize using static_call()
      static_call: Allow early init
      static_call: Add some validation
      static_call: Handle tail-calls
      static_call: Add static_call_cond()
      x86/alternatives: Teach text_poke_bp() to emulate RET
      static_call: Add simple self-test for static calls
      x86/static_call: Add inline static call implementation for x86-64
      x86/static_call: Add out-of-line static call implementation
      static_call: Avoid kprobes on inline static_call()s
      static_call: Add inline static call infrastructure
      static_call: Add basic static call infrastructure
      compiler.h: Make __ADDRESSABLE() symbol truly unique
      jump_label,module: Fix module lifetime for __jump_label_mod_text_reserved()
      module: Properly propagate MODULE_STATE_COMING failure
      module: Fix up module_notifier return values
      ...
    dd502a81
check.c 72.9 KB