From d3b45534af1205b71ff570d1bb32b348e61b78bc Mon Sep 17 00:00:00 2001 From: Lai Jiangshan Date: Wed, 22 Feb 2012 13:06:51 -0800 Subject: [PATCH] --- yaml --- r: 302757 b: refs/heads/master c: 4b7a3e9e32114a09c61995048f055615b5d4c26d h: refs/heads/master i: 302755: 5af5fb6df1ae63b6be9ca81336498bfb677e8da9 v: v3 --- [refs] | 2 +- trunk/kernel/srcu.c | 25 +------------------------ 2 files changed, 2 insertions(+), 25 deletions(-) diff --git a/[refs] b/[refs] index fdf9472a2527..7bf1346b9ec6 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: cef50120b61c2af4ce34bc165e19cad66296f93d +refs/heads/master: 4b7a3e9e32114a09c61995048f055615b5d4c26d diff --git a/trunk/kernel/srcu.c b/trunk/kernel/srcu.c index 84c9b97dc3d9..17e95bcc901c 100644 --- a/trunk/kernel/srcu.c +++ b/trunk/kernel/srcu.c @@ -308,7 +308,7 @@ static void flip_idx_and_wait(struct srcu_struct *sp, bool expedited) */ static void __synchronize_srcu(struct srcu_struct *sp, bool expedited) { - int idx; + int idx = 0; rcu_lockdep_assert(!lock_is_held(&sp->dep_map) && !lock_is_held(&rcu_bh_lock_map) && @@ -316,31 +316,8 @@ static void __synchronize_srcu(struct srcu_struct *sp, bool expedited) !lock_is_held(&rcu_sched_lock_map), "Illegal synchronize_srcu() in same-type SRCU (or RCU) read-side critical section"); - smp_mb(); /* Ensure prior action happens before grace period. */ - idx = ACCESS_ONCE(sp->completed); - smp_mb(); /* Access to ->completed before lock acquisition. */ mutex_lock(&sp->mutex); - /* - * Check to see if someone else did the work for us while we were - * waiting to acquire the lock. We need -three- advances of - * the counter, not just one. If there was but one, we might have - * shown up -after- our helper's first synchronize_sched(), thus - * having failed to prevent CPU-reordering races with concurrent - * srcu_read_unlock()s on other CPUs (see comment below). If there - * was only two, we are guaranteed to have waited through only one - * full index-flip phase. So we either (1) wait for three or - * (2) supply the additional ones we need. - */ - - if (sp->completed == idx + 2) - idx = 1; - else if (sp->completed == idx + 3) { - mutex_unlock(&sp->mutex); - return; - } else - idx = 0; - /* * If there were no helpers, then we need to do two flips of * the index. The first flip is required if there are any