Messages in this thread | | | Date | Fri, 11 Sep 2015 14:40:20 -0700 | From | "Paul E. McKenney" <> | Subject | Re: [PATCH 1/1] rcu_sync: Cleanup the CONFIG_PROVE_RCU checks |
| |
On Fri, Sep 11, 2015 at 05:59:18PM +0200, Oleg Nesterov wrote: > 1. Rename __rcu_sync_is_idle() to rcu_sync_lockdep_assert() and > change it to use rcu_lockdep_assert(). > > 2. Change rcu_sync_is_idle() to return rsp->gp_state == GP_IDLE > unconditonally, this way we can remove the same check from > rcu_sync_lockdep_assert() and clearly isolate the debugging > code. > > Note: rcu_sync_enter()->wait_event(gp_state == GP_PASSED) needs > another CONFIG_PROVE_RCU check, the same we do in ->sync(); but > this needs some simple preparations in the core RCU code to avoid > the code duplication. > > Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Queued for v4.4, thank you, Oleg!
Thanx, Paul
> --- > include/linux/rcu_sync.h | 7 +++---- > kernel/rcu/sync.c | 6 +++--- > 2 files changed, 6 insertions(+), 7 deletions(-) > > diff --git a/include/linux/rcu_sync.h b/include/linux/rcu_sync.h > index 8069d64..a63a33e 100644 > --- a/include/linux/rcu_sync.h > +++ b/include/linux/rcu_sync.h > @@ -40,7 +40,7 @@ struct rcu_sync { > enum rcu_sync_type gp_type; > }; > > -extern bool __rcu_sync_is_idle(struct rcu_sync *); > +extern void rcu_sync_lockdep_assert(struct rcu_sync *); > > /** > * rcu_sync_is_idle() - Are readers permitted to use their fastpaths? > @@ -53,10 +53,9 @@ extern bool __rcu_sync_is_idle(struct rcu_sync *); > static inline bool rcu_sync_is_idle(struct rcu_sync *rsp) > { > #ifdef CONFIG_PROVE_RCU > - return __rcu_sync_is_idle(rsp); > -#else > - return !rsp->gp_state; /* GP_IDLE */ > + rcu_sync_lockdep_assert(rsp); > #endif > + return !rsp->gp_state; /* GP_IDLE */ > } > > extern void rcu_sync_init(struct rcu_sync *, enum rcu_sync_type); > diff --git a/kernel/rcu/sync.c b/kernel/rcu/sync.c > index 1c73c57..a8cf199 100644 > --- a/kernel/rcu/sync.c > +++ b/kernel/rcu/sync.c > @@ -63,10 +63,10 @@ enum { CB_IDLE = 0, CB_PENDING, CB_REPLAY }; > #define rss_lock gp_wait.lock > > #ifdef CONFIG_PROVE_RCU > -bool __rcu_sync_is_idle(struct rcu_sync *rsp) > +void rcu_sync_lockdep_assert(struct rcu_sync *rsp) > { > - WARN_ON(!gp_ops[rsp->gp_type].held()); > - return rsp->gp_state == GP_IDLE; > + rcu_lockdep_assert(gp_ops[rsp->gp_type].held(), > + "suspicious rcu_sync_is_idle() usage"); > } > #endif > > -- > 1.5.5.1 > >
| |