• Paul E. McKenney's avatar
    srcu: Prevent sdp->srcu_gp_seq_needed counter wrap · c350c008
    Paul E. McKenney authored
    If a given CPU never happens to ever start an SRCU grace period, the
    grace-period sequence counter might wrap.  If this CPU were to decide to
    finally start a grace period, the state of its sdp->srcu_gp_seq_needed
    might make it appear that it has already requested this grace period,
    which would prevent starting the grace period.  If no other CPU ever started
    a grace period again, this would look like a grace-period hang.  Even
    if some other CPU took pity and started the needed grace period, the
    leaf rcu_node structure's ->srcu_data_have_cbs field won't have record
    of the fact that this CPU has a callback pending, which would look like
    a very localized grace-period hang.
    
    This might seem very unlikely, but SRCU grace periods can take less than
    a microsecond on small systems, which means that overflow can happen
    in much less than an hour on a 32-bit embedded system.  And embedded
    systems are especially likely to have long-term idle CPUs.  Therefore,
    it makes sense to prevent this scenario from happening.
    
    This commit therefore scans each srcu_data structure occasionally,
    with frequency controlled by the srcutree.counter_wrap_check kernel
    boot parameter.  This parameter can be set to something like 255
    in order to exercise the counter-wrap-prevention code.
    Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    c350c008
srcutree.c 40 KB