lkml.org 
[lkml]   [2020]   [Aug]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH v7 11/18] static_call: Simple self-test

    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    ---
    arch/Kconfig | 6 ++++++
    kernel/static_call.c | 43 +++++++++++++++++++++++++++++++++++++++++++
    2 files changed, 49 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
    @@ -365,3 +365,46 @@ 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 struct static_call_data {
    + int (*func)(int);
    + int val;
    + int expect;
    +} static_call_data [] __initdata = {
    + { NULL, 2, 3 },
    + { func_b, 2, 4 },
    + { func_a, 2, 3 }
    +};
    +
    +static int __init test_static_call_init(void)
    +{
    + int i;
    +
    + for (i = 0; i < ARRAY_SIZE(static_call_data); i++ ) {
    + struct static_call_data *scd = &static_call_data[i];
    +
    + if (scd->func)
    + static_call_update(sc_selftest, scd->func);
    +
    + WARN_ON(static_call(sc_selftest)(scd->val) != scd->expect);
    + }
    +
    + return 0;
    +}
    +early_initcall(test_static_call_init);
    +
    +#endif /* CONFIG_STATIC_CALL_SELFTEST */

    \
     
     \ /
      Last update: 2020-08-18 16:13    [W:3.642 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site