[PATCH v5 11/17] static_call: Simple self-test

From: Peter Zijlstra
Date: Wed Jun 24 2020 - 11:51:55 EST



Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx>
---
arch/Kconfig | 6 ++++++
kernel/static_call.c | 28 ++++++++++++++++++++++++++++
2 files changed, 34 insertions(+)

--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -103,6 +103,12 @@ config STATIC_KEYS_SELFTEST
help
Boot time self-test of the branch patching code.

+config STATIC_CALL_SELFTEST
+ bool "Static call selftest"
+ depends on HAVE_STATIC_CALL
+ help
+ Boot time self-test of the call patching code.
+
config OPTPROBES
def_bool y
depends on KPROBES && HAVE_OPTPROBES
--- a/kernel/static_call.c
+++ b/kernel/static_call.c
@@ -364,3 +364,31 @@ static void __init static_call_init(void
#endif
}
early_initcall(static_call_init);
+
+#ifdef CONFIG_STATIC_CALL_SELFTEST
+
+static int func_a(int x)
+{
+ return x+1;
+}
+
+static int func_b(int x)
+{
+ return x+2;
+}
+
+DEFINE_STATIC_CALL(sc_selftest, func_a);
+
+static int __init test_static_call_init(void)
+{
+ WARN_ON(static_call(sc_selftest)(2) != 3);
+ static_call_update(sc_selftest, &func_b);
+ WARN_ON(static_call(sc_selftest)(2) != 4);
+ static_call_update(sc_selftest, &func_a);
+ WARN_ON(static_call(sc_selftest)(2) != 3);
+
+ return 0;
+}
+early_initcall(test_static_call_init);
+
+#endif /* CONFIG_STATIC_CALL_SELFTEST */