• Lai Jiangshan's avatar
    rcu: Implement per-domain single-threaded call_srcu() state machine · 931ea9d1
    Lai Jiangshan authored
    This commit implements an SRCU state machine in support of call_srcu().
    The state machine is preemptible, light-weight, and single-threaded,
    minimizing synchronization overhead.  In particular, there is no longer
    any need for synchronize_srcu() to be guarded by a mutex.
    
    Expedited processing is handled, at least in the absence of concurrent
    grace-period operations on that same srcu_struct structure, by having
    the synchronize_srcu_expedited() thread take on the role of the
    workqueue thread for one iteration.
    
    There is a reasonable probability that a given SRCU callback will
    be invoked on the same CPU that registered it, however, there is no
    guarantee.  Concurrent SRCU grace-period primitives can cause callbacks
    to be executed elsewhere, even in absence of CPU-hotplug operations.
    
    Callbacks execute in process context, but under the influence of
    local_bh_disable(), so it is illegal to sleep in an SRCU callback
    function.
    Signed-off-by: default avatarLai Jiangshan <laijs@cn.fujitsu.com>
    Acked-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
    Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    931ea9d1
srcu.c 19.5 KB