Messages in this thread Patch in this message | | | Date | Fri, 10 Jul 2020 15:38:42 +0200 | From | Peter Zijlstra <> | Subject | [PATCH v6 11/17] static_call: Simple self-test |
| |
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.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 */
| |