All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: linux-kernel@vger.kernel.org
Cc: mingo@kernel.org, laijs@cn.fujitsu.com, dipankar@in.ibm.com,
	akpm@linux-foundation.org, mathieu.desnoyers@efficios.com,
	josh@joshtriplett.org, tglx@linutronix.de, peterz@infradead.org,
	rostedt@goodmis.org, dhowells@redhat.com, edumazet@google.com,
	dvhart@linux.intel.com, fweisbec@gmail.com, oleg@redhat.com,
	bobby.prani@gmail.com,
	"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Subject: [PATCH tip/core/rcu 2/9] rcu: Adjust ->lock acquisition for tasks no longer migrating
Date: Tue, 12 May 2015 14:50:00 -0700	[thread overview]
Message-ID: <1431467407-1223-2-git-send-email-paulmck@linux.vnet.ibm.com> (raw)
In-Reply-To: <1431467407-1223-1-git-send-email-paulmck@linux.vnet.ibm.com>

From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>

Tasks are no longer migrated away from a given rcu_node structure
when all CPUs corresponding to that rcu_node structure have gone offline.
This means that rcu_read_unlock_special() no longer needs to loop
retrying rcu_node ->lock acquisition because the current task is
guaranteed to stay put.

This commit takes a small and paranoid step towards relying on this
guarantee by placing a WARN_ON_ONCE() just after the early exit from
the lock-acquisition loop.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
 kernel/rcu/tree_plugin.h | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
index 58b1ebdc4387..c8340e929eb4 100644
--- a/kernel/rcu/tree_plugin.h
+++ b/kernel/rcu/tree_plugin.h
@@ -307,9 +307,11 @@ void rcu_read_unlock_special(struct task_struct *t)
 		t->rcu_read_unlock_special.b.blocked = false;
 
 		/*
-		 * Remove this task from the list it blocked on.  The
-		 * task can migrate while we acquire the lock, but at
-		 * most one time.  So at most two passes through loop.
+		 * Remove this task from the list it blocked on.  The task
+		 * now remains queued on the rcu_node corresponding to
+		 * the CPU it first blocked on, so the first attempt to
+		 * acquire the task's rcu_node's ->lock will succeed.
+		 * Keep the loop and add a WARN_ON() out of sheer paranoia.
 		 */
 		for (;;) {
 			rnp = t->rcu_blocked_node;
@@ -317,6 +319,7 @@ void rcu_read_unlock_special(struct task_struct *t)
 			smp_mb__after_unlock_lock();
 			if (rnp == t->rcu_blocked_node)
 				break;
+			WARN_ON_ONCE(1);
 			raw_spin_unlock(&rnp->lock); /* irqs remain disabled. */
 		}
 		empty_norm = !rcu_preempt_blocked_readers_cgp(rnp);
-- 
1.8.1.5


  reply	other threads:[~2015-05-12 21:53 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-12 21:49 [PATCH tip/core/rcu 0/9] CPU-hotplug updates for 4.2 Paul E. McKenney
2015-05-12 21:49 ` [PATCH tip/core/rcu 1/9] rcu: Eliminate HOTPLUG_CPU #ifdef in favor of IS_ENABLED() Paul E. McKenney
2015-05-12 21:50   ` Paul E. McKenney [this message]
2015-05-12 21:50   ` [PATCH tip/core/rcu 3/9] rcu: Remove dead code from force_qs_rnp() Paul E. McKenney
2015-05-12 21:50   ` [PATCH tip/core/rcu 4/9] rcu: Remove redundant offline check Paul E. McKenney
2015-05-12 21:50   ` [PATCH tip/core/rcu 5/9] rcu: Correctly initialize ->rcu_qs_ctr_snap at online time Paul E. McKenney
2015-05-12 21:50   ` [PATCH tip/core/rcu 6/9] cpu: Handle smpboot_unpark_threads() uniformly Paul E. McKenney
2015-05-12 21:50   ` [PATCH tip/core/rcu 7/9] arm64: Use common outgoing-CPU-notification code Paul E. McKenney
2015-05-12 21:50     ` Paul E. McKenney
2015-05-21  8:58     ` Will Deacon
2015-05-21  8:58       ` Will Deacon
2015-05-21 12:48       ` Paul E. McKenney
2015-05-21 12:48         ` Paul E. McKenney
2015-05-21 13:25         ` Catalin Marinas
2015-05-21 13:25           ` Catalin Marinas
2015-05-22  3:26           ` Paul E. McKenney
2015-05-22  3:26             ` Paul E. McKenney
2015-05-12 21:50   ` [PATCH tip/core/rcu 8/9] arm: " Paul E. McKenney
2015-05-12 21:50     ` Paul E. McKenney
2015-12-14 12:18     ` Geert Uytterhoeven
2015-12-14 12:18       ` Geert Uytterhoeven
2015-12-14 12:18       ` Geert Uytterhoeven
2015-05-12 21:50   ` [PATCH tip/core/rcu 9/9] cpu: Remove new instance of __cpuinit that crept back in Paul E. McKenney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1431467407-1223-2-git-send-email-paulmck@linux.vnet.ibm.com \
    --to=paulmck@linux.vnet.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=bobby.prani@gmail.com \
    --cc=dhowells@redhat.com \
    --cc=dipankar@in.ibm.com \
    --cc=dvhart@linux.intel.com \
    --cc=edumazet@google.com \
    --cc=fweisbec@gmail.com \
    --cc=josh@joshtriplett.org \
    --cc=laijs@cn.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mingo@kernel.org \
    --cc=oleg@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.