03 Oct, 2020

1 commit

  • Functions that are passed to early_initcall should be of type
    initcall_t, which expects a return type of int. This is not currently an
    error but a patch in the Clang LTO series could change that in the
    future.

    Fixes: 9183c3f9ed71 ("static_call: Add inline static call infrastructure")
    Signed-off-by: Nathan Chancellor
    Signed-off-by: Peter Zijlstra (Intel)
    Reviewed-by: Sami Tolvanen
    Link: https://lore.kernel.org/lkml/20200903203053.3411268-17-samitolvanen@google.com/

    Nathan Chancellor
     

01 Sep, 2020

5 commits

  • In order to use static_call() to wire up x86_pmu, we need to
    initialize earlier, specifically before memory allocation works; copy
    some of the tricks from jump_label to enable this.

    Primarily we overload key->next to store a sites pointer when there
    are no modules, this avoids having to use kmalloc() to initialize the
    sites and allows us to run much earlier.

    Signed-off-by: Peter Zijlstra (Intel)
    Signed-off-by: Ingo Molnar
    Reviewed-by: Steven Rostedt (VMware)
    Link: https://lore.kernel.org/r/20200818135805.220737930@infradead.org

    Peter Zijlstra
     
  • GCC can turn our static_call(name)(args...) into a tail call, in which
    case we get a JMP.d32 into the trampoline (which then does a further
    tail-call).

    Teach objtool to recognise and mark these in .static_call_sites and
    adjust the code patching to deal with this.

    Signed-off-by: Peter Zijlstra (Intel)
    Signed-off-by: Ingo Molnar
    Cc: Linus Torvalds
    Link: https://lore.kernel.org/r/20200818135805.101186767@infradead.org

    Peter Zijlstra
     
  • Signed-off-by: Peter Zijlstra (Intel)
    Signed-off-by: Ingo Molnar
    Link: https://lore.kernel.org/r/20200818135804.922581202@infradead.org

    Peter Zijlstra
     
  • Similar to how we disallow kprobes on any other dynamic text
    (ftrace/jump_label) also disallow kprobes on inline static_call()s.

    Signed-off-by: Peter Zijlstra (Intel)
    Signed-off-by: Ingo Molnar
    Link: https://lore.kernel.org/r/20200818135804.744920586@infradead.org

    Peter Zijlstra
     
  • Add infrastructure for an arch-specific CONFIG_HAVE_STATIC_CALL_INLINE
    option, which is a faster version of CONFIG_HAVE_STATIC_CALL. At
    runtime, the static call sites are patched directly, rather than using
    the out-of-line trampolines.

    Compared to out-of-line static calls, the performance benefits are more
    modest, but still measurable. Steven Rostedt did some tracepoint
    measurements:

    https://lkml.kernel.org/r/20181126155405.72b4f718@gandalf.local.home

    This code is heavily inspired by the jump label code (aka "static
    jumps"), as some of the concepts are very similar.

    For more details, see the comments in include/linux/static_call.h.

    [peterz: simplified interface; merged trampolines]

    Signed-off-by: Josh Poimboeuf
    Signed-off-by: Peter Zijlstra (Intel)
    Signed-off-by: Ingo Molnar
    Reviewed-by: Steven Rostedt (VMware)
    Cc: Linus Torvalds
    Link: https://lore.kernel.org/r/20200818135804.684334440@infradead.org

    Josh Poimboeuf