• Zqiang's avatar
    rcuscale: Fix smp_processor_id()-in-preemptible warnings · 92366810
    Zqiang authored
    Systems built with CONFIG_DEBUG_PREEMPT=y can trigger the following
    BUG while running the rcuscale performance test:
    
    BUG: using smp_processor_id() in preemptible [00000000] code: rcu_scale_write/69
    CPU: 0 PID: 66 Comm: rcu_scale_write Not tainted 5.18.0-rc7-next-20220517-yoctodev-standard+
    caller is debug_smp_processor_id+0x17/0x20
    Call Trace:
    <TASK>
    dump_stack_lvl+0x49/0x5e
    dump_stack+0x10/0x12
    check_preemption_disabled+0xdf/0xf0
    debug_smp_processor_id+0x17/0x20
    rcu_scale_writer+0x2b5/0x580
    kthread+0x177/0x1b0
    ret_from_fork+0x22/0x30
    </TASK>
    
    Reproduction method:
    runqemu kvm slirp nographic qemuparams="-m 4096 -smp 8" bootparams="isolcpus=2,3
    nohz_full=2,3 rcu_nocbs=2,3 rcutree.dump_tree=1 rcuscale.shutdown=false
    rcuscale.gp_async=true" -d
    
    The problem is that the rcu_scale_writer() kthreads fail to set the
    PF_NO_SETAFFINITY flags, which causes is_percpu_thread() to assume
    that the kthread's affinity might change at any time, thus the BUG
    noted above.
    
    This commit therefore causes rcu_scale_writer() to set PF_NO_SETAFFINITY
    in its kthread's ->flags field, thus preventing this BUG.
    Signed-off-by: default avatarZqiang <qiang1.zhang@intel.com>
    Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
    92366810
rcuscale.c 23.5 KB