• P
    rcu: Eliminate __rcu_pending() false positives · 2f51f988
    Paul E. McKenney 提交于
    Now that there are both ->gpnum and ->completed fields in the
    rcu_node structure, __rcu_pending() should check rdp->gpnum and
    rdp->completed against rnp->gpnum and rdp->completed, respectively,
    instead of the prior comparison against the rcu_state fields
    rsp->gpnum and rsp->completed.
    
    Given the old comparison, __rcu_pending() could return 1, resulting
    in a needless raise_softirq(RCU_SOFTIRQ).  This useless work would
    happen if RCU responded to a scheduling-clock interrupt after the
    rcu_state fields had been updated, but before the rcu_node fields
    had been updated.
    
    Changing the comparison from the rcu_state fields to the rcu_node
    fields prevents this useless work from happening.
    Signed-off-by: NPaul 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: <12581706991966-git-send-email->
    Signed-off-by: NIngo Molnar <mingo@elte.hu>
    2f51f988
rcutree.c 51.2 KB