diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2015-09-29 10:55:41 -0400 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2015-12-04 15:27:30 -0500 |
commit | 8ba9153b2c3ab733d64e22adb57820ccb6afc496 (patch) | |
tree | 4cee3952fd004cdfeda6d39d8f7456c3be3aacb2 | |
parent | fecbf6f01fbd83e6419ccb7f61d9a6eb987f1d92 (diff) |
rcu: Remove lock-acquisition loop from rcu_read_unlock_special()
Several releases have come and gone without the warning triggering,
so remove the lock-acquisition loop. Retain the WARN_ON_ONCE()
out of sheer paranoia.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-rw-r--r-- | kernel/rcu/tree_plugin.h | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h index 57ba873d2f18..ae4ce2b665f8 100644 --- a/kernel/rcu/tree_plugin.h +++ b/kernel/rcu/tree_plugin.h | |||
@@ -449,19 +449,13 @@ void rcu_read_unlock_special(struct task_struct *t) | |||
449 | 449 | ||
450 | /* | 450 | /* |
451 | * Remove this task from the list it blocked on. The task | 451 | * Remove this task from the list it blocked on. The task |
452 | * now remains queued on the rcu_node corresponding to | 452 | * now remains queued on the rcu_node corresponding to the |
453 | * the CPU it first blocked on, so the first attempt to | 453 | * CPU it first blocked on, so there is no longer any need |
454 | * acquire the task's rcu_node's ->lock will succeed. | 454 | * to loop. Retain a WARN_ON_ONCE() out of sheer paranoia. |
455 | * Keep the loop and add a WARN_ON() out of sheer paranoia. | ||
456 | */ | 455 | */ |
457 | for (;;) { | 456 | rnp = t->rcu_blocked_node; |
458 | rnp = t->rcu_blocked_node; | 457 | raw_spin_lock_rcu_node(rnp); /* irqs already disabled. */ |
459 | raw_spin_lock_rcu_node(rnp); /* irqs already disabled. */ | 458 | WARN_ON_ONCE(rnp != t->rcu_blocked_node); |
460 | if (rnp == t->rcu_blocked_node) | ||
461 | break; | ||
462 | WARN_ON_ONCE(1); | ||
463 | raw_spin_unlock(&rnp->lock); /* irqs remain disabled. */ | ||
464 | } | ||
465 | empty_norm = !rcu_preempt_blocked_readers_cgp(rnp); | 459 | empty_norm = !rcu_preempt_blocked_readers_cgp(rnp); |
466 | empty_exp = sync_rcu_preempt_exp_done(rnp); | 460 | empty_exp = sync_rcu_preempt_exp_done(rnp); |
467 | smp_mb(); /* ensure expedited fastpath sees end of RCU c-s. */ | 461 | smp_mb(); /* ensure expedited fastpath sees end of RCU c-s. */ |