• Paul E. McKenney's avatar
    rcu: Remove redundant preempt_disable() from rcu_note_voluntary_context_switch() · 01a81330
    Paul E. McKenney authored
    In theory, synchronize_sched() requires a read-side critical section
    to order against.  In practice, preemption can be thought of as
    being disabled across every machine instruction, at least for those
    machine instructions that are not in the idle loop and not on offline
    CPUs.  So this commit removes the redundant preempt_disable() from
    rcu_note_voluntary_context_switch().
    
    Please note that the single instruction in question is the store of
    zero to ->rcu_tasks_holdout.  The "if" is simply a performance optimization
    that avoids unnecessary stores.  To see this, keep in mind that both
    the "if" condition and the store are in a quiescent state.  Therefore,
    even if the task is preempted for a full grace period (presumably due
    to its having done a context switch beforehand), the store will be
    recording a legitimate quiescent state.
    Reported-by: default avatarLai Jiangshan <laijs@cn.fujitsu.com>
    Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    
    Conflicts:
    	include/linux/rcupdate.h
    01a81330
rcupdate.h 42.5 KB