aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/kernel
diff options
context:
space:
mode:
authorPeter Zijlstra <peterz@infradead.org>2021-01-18 15:12:16 +0100
committerIngo Molnar <mingo@kernel.org>2021-02-17 14:08:43 +0100
commit3f2a8fc4b15de18644e8a80a09edda168676e22c (patch)
treeecceaeff23b07b1e7e7e611fdd64d9646b04e099 /kernel
parentstatic_call: Pull some static_call declarations to the type headers (diff)
downloadwireguard-linux-3f2a8fc4b15de18644e8a80a09edda168676e22c.tar.xz
wireguard-linux-3f2a8fc4b15de18644e8a80a09edda168676e22c.zip
static_call/x86: Add __static_call_return0()
Provide a stub function that return 0 and wire up the static call site patching to replace the CALL with a single 5 byte instruction that clears %RAX, the return value register. The function can be cast to any function pointer type that has a single %RAX return (including pointers). Also provide a version that returns an int for convenience. We are clearing the entire %RAX register in any case, whether the return value is 32 or 64 bits, since %RAX is always a scratch register anyway. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Frederic Weisbecker <frederic@kernel.org> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Ingo Molnar <mingo@kernel.org> Link: https://lkml.kernel.org/r/20210118141223.123667-2-frederic@kernel.org
Diffstat (limited to 'kernel')
-rw-r--r--kernel/static_call.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/kernel/static_call.c b/kernel/static_call.c
index 84565c2a41b8..0bc11b5ce681 100644
--- a/kernel/static_call.c
+++ b/kernel/static_call.c
@@ -438,6 +438,11 @@ int __init static_call_init(void)
}
early_initcall(static_call_init);
+long __static_call_return0(void)
+{
+ return 0;
+}
+
#ifdef CONFIG_STATIC_CALL_SELFTEST
static int func_a(int x)