[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20191007083830.92867794.0@infradead.org>
Date: Mon, 07 Oct 2019 10:27:15 +0200
From: Peter Zijlstra <peterz@...radead.org>
To: x86@...nel.org
Cc: peterz@...radead.org, linux-kernel@...r.kernel.org,
rostedt@...dmis.org, mhiramat@...nel.org, bristot@...hat.com,
jbaron@...mai.com, torvalds@...ux-foundation.org,
tglx@...utronix.de, mingo@...nel.org, namit@...are.com,
hpa@...or.com, luto@...nel.org, ard.biesheuvel@...aro.org,
jpoimboe@...hat.com
Subject: [PATCH v2 07/13] static_call: Simple self-test
Signed-off-by: Peter Zijlstra (Intel) <peterz@...radead.org>
---
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 */
Powered by blists - more mailing lists