static_call: Add static_call_cond()
authorPeter Zijlstra <peterz@infradead.org>
Tue, 18 Aug 2020 13:57:48 +0000 (15:57 +0200)
committerIngo Molnar <mingo@kernel.org>
Tue, 1 Sep 2020 07:58:05 +0000 (09:58 +0200)
commit452cddbff74b6a15b9354505671011700fe03710
tree75bd4702221b4ca983ef387cfd33f49262e050f0
parentc43a43e439e00ad2a4d98716895d961ade6bbbfc
static_call: Add static_call_cond()

Extend the static_call infrastructure to optimize the following common
pattern:

if (func_ptr)
func_ptr(args...)

For the trampoline (which is in effect a tail-call), we patch the
JMP.d32 into a RET, which then directly consumes the trampoline call.

For the in-line sites we replace the CALL with a NOP5.

NOTE: this is 'obviously' limited to functions with a 'void' return type.

NOTE: DEFINE_STATIC_COND_CALL() only requires a typename, as opposed
      to a full function.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: https://lore.kernel.org/r/20200818135805.042977182@infradead.org
arch/x86/include/asm/static_call.h
arch/x86/kernel/static_call.c
include/linux/static_call.h