Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
---
 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 */


Reply via email to