On 12/16/2015 07:32 PM, Paolo Bonzini wrote: > rcu_read_lock cannot change rcu_gp_ongoing from true to false > (the previous value of p_rcu_reader->ctr is zero), hence > there is no need to check p_rcu_reader->waiting and wake up > a concurrent synchronize_rcu. > > While at it mark the wakeup as unlikely in rcu_read_unlock. > > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com>
Reviewed-by: Wen Congyang <we...@cn.fujitsu.com> > --- > include/qemu/rcu.h | 6 +----- > 1 file changed, 1 insertion(+), 5 deletions(-) > > diff --git a/include/qemu/rcu.h b/include/qemu/rcu.h > index f6d1d56..7c7cca7 100644 > --- a/include/qemu/rcu.h > +++ b/include/qemu/rcu.h > @@ -88,10 +88,6 @@ static inline void rcu_read_lock(void) > > ctr = atomic_read(&rcu_gp_ctr); > atomic_xchg(&p_rcu_reader->ctr, ctr); > - if (atomic_read(&p_rcu_reader->waiting)) { > - atomic_set(&p_rcu_reader->waiting, false); > - qemu_event_set(&rcu_gp_event); > - } > } > > static inline void rcu_read_unlock(void) > @@ -104,7 +100,7 @@ static inline void rcu_read_unlock(void) > } > > atomic_xchg(&p_rcu_reader->ctr, 0); > - if (atomic_read(&p_rcu_reader->waiting)) { > + if (unlikely(atomic_read(&p_rcu_reader->waiting))) { > atomic_set(&p_rcu_reader->waiting, false); > qemu_event_set(&rcu_gp_event); > } >