• Zqiang's avatar
    rcu: Fix __this_cpu_read() lockdep warning in rcu_force_quiescent_state() · ceb1c8c9
    Zqiang authored
    Running rcutorture with non-zero fqs_duration module parameter in a
    kernel built with CONFIG_PREEMPTION=y results in the following splat:
    
    BUG: using __this_cpu_read() in preemptible [00000000]
    code: rcu_torture_fqs/398
    caller is __this_cpu_preempt_check+0x13/0x20
    CPU: 3 PID: 398 Comm: rcu_torture_fqs Not tainted 6.0.0-rc1-yoctodev-standard+
    Call Trace:
    <TASK>
    dump_stack_lvl+0x5b/0x86
    dump_stack+0x10/0x16
    check_preemption_disabled+0xe5/0xf0
    __this_cpu_preempt_check+0x13/0x20
    rcu_force_quiescent_state.part.0+0x1c/0x170
    rcu_force_quiescent_state+0x1e/0x30
    rcu_torture_fqs+0xca/0x160
    ? rcu_torture_boost+0x430/0x430
    kthread+0x192/0x1d0
    ? kthread_complete_and_exit+0x30/0x30
    ret_from_fork+0x22/0x30
    </TASK>
    
    The problem is that rcu_force_quiescent_state() uses __this_cpu_read()
    in preemptible code instead of the proper raw_cpu_read().  This commit
    therefore changes __this_cpu_read() to raw_cpu_read().
    Signed-off-by: default avatarZqiang <qiang1.zhang@intel.com>
    Reviewed-by: default avatarJoel Fernandes (Google) <joel@joelfernandes.org>
    Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
    ceb1c8c9
tree.c 156 KB