• Paul E. McKenney's avatar
    rcu: Simplify association of quiescent states with grace periods · c64ac3ce
    Paul E. McKenney authored
    The rdp->passed_quiesc_completed fields are used to properly
    associate the recorded quiescent state with a grace period.  It
    is OK to wrongly associate a given quiescent state with a
    preceding grace period, but it is fatal to associate a given
    quiescent state with a grace period that begins after the
    quiescent state occurred.  Grace periods are numbered, and the
    following fields track them:
    
    o	->gpnum is the number of the grace period currently in
    	progress, or the number of the last grace period to
    	complete if no grace period is currently in progress.
    
    o	->completed is the number of the last grace period to
    	have completed.
    
    These two fields are equal if there is no grace period in
    progress, otherwise ->gpnum is one greater than ->completed.
    But the rdp->passed_quiesc_completed field compared against
    ->completed, and if equal, the quiescent state is presumed to
    count against the current grace period.
    
    The earlier code copied rdp->completed to
    rdp->passed_quiesc_completed, which has been made to work, but
    is error-prone.  In contrast, copying one less than rdp->gpnum
    is guaranteed safe, because rdp->gpnum is not incremented until
    after the start of the corresponding grace period. At the end of
    the grace period, when ->completed has incremented, then any
    quiescent periods recorded previously will be discarded.
    Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: laijs@cn.fujitsu.com
    Cc: dipankar@in.ibm.com
    Cc: mathieu.desnoyers@polymtl.ca
    Cc: josh@joshtriplett.org
    Cc: dvhltc@us.ibm.com
    Cc: niv@us.ibm.com
    Cc: peterz@infradead.org
    Cc: rostedt@goodmis.org
    Cc: Valdis.Kletnieks@vt.edu
    Cc: dhowells@redhat.com
    LKML-Reference: <12578890421011-git-send-email->
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    c64ac3ce
rcutree.c 51.3 KB