lkml.org 
[lkml]   [2022]   [Jun]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH rcu 06/12] locking/csd_lock: Change csdlock_debug from early_param to __setup
    Date
    From: Chen Zhongjin <chenzhongjin@huawei.com>

    The csdlock_debug kernel-boot parameter is parsed by the
    early_param() function csdlock_debug(). If set, csdlock_debug()
    invokes static_branch_enable() to enable csd_lock_wait feature, which
    triggers a panic on arm64 for kernels built with CONFIG_SPARSEMEM=y and
    CONFIG_SPARSEMEM_VMEMMAP=n.

    With CONFIG_SPARSEMEM_VMEMMAP=n, __nr_to_section is called in
    static_key_enable() and returns NULL, resulting in a NULL dereference
    because mem_section is initialized only later in sparse_init().

    This is also a problem for powerpc because early_param() functions
    are invoked earlier than jump_label_init(), also resulting in
    static_key_enable() failures. These failures cause the warning "static
    key 'xxx' used before call to jump_label_init()".

    Thus, early_param is too early for csd_lock_wait to run
    static_branch_enable(), so changes it to __setup to fix these.

    Fixes: 8d0968cc6b8f ("locking/csd_lock: Add boot parameter for controlling CSD lock debugging")
    Cc: stable@vger.kernel.org
    Reported-by: Chen jingwen <chenjingwen6@huawei.com>
    Signed-off-by: Chen Zhongjin <chenzhongjin@huawei.com>
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    ---
    kernel/smp.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/kernel/smp.c b/kernel/smp.c
    index dd215f4394264..650810a6f29b3 100644
    --- a/kernel/smp.c
    +++ b/kernel/smp.c
    @@ -174,9 +174,9 @@ static int __init csdlock_debug(char *str)
    if (val)
    static_branch_enable(&csdlock_debug_enabled);

    - return 0;
    + return 1;
    }
    -early_param("csdlock_debug", csdlock_debug);
    +__setup("csdlock_debug=", csdlock_debug);

    static DEFINE_PER_CPU(call_single_data_t *, cur_csd);
    static DEFINE_PER_CPU(smp_call_func_t, cur_csd_func);
    --
    2.31.1.189.g2e36527f23
    \
     
     \ /
      Last update: 2022-06-21 00:21    [W:4.119 / U:0.180 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site