mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: linux-kernel@vger.kernel.org
Cc: mingo@elte.hu, laijs@cn.fujitsu.com, dipankar@in.ibm.com,
	akpm@linux-foundation.org, mathieu.desnoyers@polymtl.ca,
	josh@joshtriplett.org, niv@us.ibm.com, tglx@linutronix.de,
	peterz@infradead.org, rostedt@goodmis.org,
	Valdis.Kletnieks@vt.edu, dhowells@redhat.com,
	eric.dumazet@gmail.com, darren@dvhart.com, patches@linaro.org,
	"Paul E. McKenney" <paul.mckenney@linaro.org>,
	"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Subject: [PATCH tip/core/rcu 27/86] rcu: Converge TINY_RCU expedited and normal boosting
Date: Sun,  1 May 2011 06:21:07 -0700	[thread overview]
Message-ID: <1304256126-26015-27-git-send-email-paulmck@linux.vnet.ibm.com> (raw)
In-Reply-To: <20110501132142.GA25494@linux.vnet.ibm.com>

From: Paul E. McKenney <paul.mckenney@linaro.org>

This applies a trick from TREE_RCU boosting to TINY_RCU, eliminating
code and adding comments.  The key point is that it is possible for
the booster thread itself to work out whether there is a normal or
expedited boost required based solely on local information.  There
is therefore no need for boost initiation to know or care what type
of boosting is required.  In addition, when boosting is complete for
a given grace period, then by definition there cannot be any more
boosting for that grace period.  This allows eliminating yet more
state and statistics.

Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
 kernel/rcutiny_plugin.h |  163 +++++++++++++++++++++++++---------------------
 1 files changed, 89 insertions(+), 74 deletions(-)

diff --git a/kernel/rcutiny_plugin.h b/kernel/rcutiny_plugin.h
index 2b8d529..f259c67 100644
--- a/kernel/rcutiny_plugin.h
+++ b/kernel/rcutiny_plugin.h
@@ -106,15 +106,22 @@ struct rcu_preempt_ctrlblk {
 	unsigned long n_grace_periods;
 #ifdef CONFIG_RCU_BOOST
 	unsigned long n_tasks_boosted;
+				/* Total number of tasks boosted. */
 	unsigned long n_exp_boosts;
+				/* Number of tasks boosted for expedited GP. */
 	unsigned long n_normal_boosts;
-	unsigned long n_normal_balk_blkd_tasks;
-	unsigned long n_normal_balk_gp_tasks;
-	unsigned long n_normal_balk_boost_tasks;
-	unsigned long n_normal_balk_notyet;
-	unsigned long n_normal_balk_nos;
-	unsigned long n_exp_balk_blkd_tasks;
-	unsigned long n_exp_balk_nos;
+				/* Number of tasks boosted for normal GP. */
+	unsigned long n_balk_blkd_tasks;
+				/* Refused to boost: no blocked tasks. */
+	unsigned long n_balk_exp_gp_tasks;
+				/* Refused to boost: nothing blocking GP. */
+	unsigned long n_balk_boost_tasks;
+				/* Refused to boost: already boosting. */
+	unsigned long n_balk_notyet;
+				/* Refused to boost: not yet time. */
+	unsigned long n_balk_nos;
+				/* Refused to boost: not sure why, though. */
+				/*  This can happen due to race conditions. */
 #endif /* #ifdef CONFIG_RCU_BOOST */
 #endif /* #ifdef CONFIG_RCU_TRACE */
 };
@@ -199,7 +206,6 @@ static struct list_head *rcu_next_node_entry(struct task_struct *t)
 
 #ifdef CONFIG_RCU_BOOST
 static void rcu_initiate_boost_trace(void);
-static void rcu_initiate_exp_boost_trace(void);
 #endif /* #ifdef CONFIG_RCU_BOOST */
 
 /*
@@ -225,16 +231,13 @@ static void show_tiny_preempt_stats(struct seq_file *m)
 		   rcu_preempt_ctrlblk.n_normal_boosts,
 		   (int)(jiffies & 0xffff),
 		   (int)(rcu_preempt_ctrlblk.boost_time & 0xffff));
-	seq_printf(m, "             %s: nt=%lu gt=%lu bt=%lu ny=%lu nos=%lu\n",
-		   "normal balk",
-		   rcu_preempt_ctrlblk.n_normal_balk_blkd_tasks,
-		   rcu_preempt_ctrlblk.n_normal_balk_gp_tasks,
-		   rcu_preempt_ctrlblk.n_normal_balk_boost_tasks,
-		   rcu_preempt_ctrlblk.n_normal_balk_notyet,
-		   rcu_preempt_ctrlblk.n_normal_balk_nos);
-	seq_printf(m, "             exp balk: bt=%lu nos=%lu\n",
-		   rcu_preempt_ctrlblk.n_exp_balk_blkd_tasks,
-		   rcu_preempt_ctrlblk.n_exp_balk_nos);
+	seq_printf(m, "%s: nt=%lu egt=%lu bt=%lu ny=%lu nos=%lu\n",
+		   "             balk",
+		   rcu_preempt_ctrlblk.n_balk_blkd_tasks,
+		   rcu_preempt_ctrlblk.n_balk_exp_gp_tasks,
+		   rcu_preempt_ctrlblk.n_balk_boost_tasks,
+		   rcu_preempt_ctrlblk.n_balk_notyet,
+		   rcu_preempt_ctrlblk.n_balk_nos);
 #endif /* #ifdef CONFIG_RCU_BOOST */
 }
 
@@ -252,23 +255,59 @@ static int rcu_boost(void)
 {
 	unsigned long flags;
 	struct rt_mutex mtx;
-	struct list_head *np;
 	struct task_struct *t;
+	struct list_head *tb;
 
-	if (rcu_preempt_ctrlblk.boost_tasks == NULL)
+	if (rcu_preempt_ctrlblk.boost_tasks == NULL &&
+	    rcu_preempt_ctrlblk.exp_tasks == NULL)
 		return 0;  /* Nothing to boost. */
+
 	raw_local_irq_save(flags);
-	t = container_of(rcu_preempt_ctrlblk.boost_tasks, struct task_struct,
-			 rcu_node_entry);
-	np = rcu_next_node_entry(t);
+
+	/*
+	 * Recheck with irqs disabled: all tasks in need of boosting
+	 * might exit their RCU read-side critical sections on their own
+	 * if we are preempted just before disabling irqs.
+	 */
+	if (rcu_preempt_ctrlblk.boost_tasks == NULL &&
+	    rcu_preempt_ctrlblk.exp_tasks == NULL) {
+		raw_local_irq_restore(flags);
+		return 0;
+	}
+
+	/*
+	 * Preferentially boost tasks blocking expedited grace periods.
+	 * This cannot starve the normal grace periods because a second
+	 * expedited grace period must boost all blocked tasks, including
+	 * those blocking the pre-existing normal grace period.
+	 */
+	if (rcu_preempt_ctrlblk.exp_tasks != NULL) {
+		tb = rcu_preempt_ctrlblk.exp_tasks;
+		RCU_TRACE(rcu_preempt_ctrlblk.n_exp_boosts++);
+	} else {
+		tb = rcu_preempt_ctrlblk.boost_tasks;
+		RCU_TRACE(rcu_preempt_ctrlblk.n_normal_boosts++);
+	}
+	RCU_TRACE(rcu_preempt_ctrlblk.n_tasks_boosted++);
+
+	/*
+	 * We boost task t by manufacturing an rt_mutex that appears to
+	 * be held by task t.  We leave a pointer to that rt_mutex where
+	 * task t can find it, and task t will release the mutex when it
+	 * exits its outermost RCU read-side critical section.  Then
+	 * simply acquiring this artificial rt_mutex will boost task
+	 * t's priority.  (Thanks to tglx for suggesting this approach!)
+	 */
+	t = container_of(tb, struct task_struct, rcu_node_entry);
 	rt_mutex_init_proxy_locked(&mtx, t);
 	t->rcu_boost_mutex = &mtx;
 	t->rcu_read_unlock_special |= RCU_READ_UNLOCK_BOOSTED;
 	raw_local_irq_restore(flags);
 	rt_mutex_lock(&mtx);
-	RCU_TRACE(rcu_preempt_ctrlblk.n_tasks_boosted++);
-	rt_mutex_unlock(&mtx);
-	return rcu_preempt_ctrlblk.boost_tasks != NULL;
+	rt_mutex_unlock(&mtx);  /* Keep lockdep happy. */
+
+	return rcu_preempt_ctrlblk.boost_tasks != NULL ||
+	       rcu_preempt_ctrlblk.exp_tasks != NULL;
 }
 
 /*
@@ -283,39 +322,24 @@ static int rcu_boost(void)
  */
 static int rcu_initiate_boost(void)
 {
-	if (!rcu_preempt_blocked_readers_cgp()) {
-		RCU_TRACE(rcu_preempt_ctrlblk.n_normal_balk_blkd_tasks++);
+	if (!rcu_preempt_blocked_readers_cgp() &&
+	    rcu_preempt_ctrlblk.exp_tasks == NULL) {
+		RCU_TRACE(rcu_preempt_ctrlblk.n_balk_exp_gp_tasks++);
 		return 0;
 	}
-	if (rcu_preempt_ctrlblk.gp_tasks != NULL &&
-	    rcu_preempt_ctrlblk.boost_tasks == NULL &&
-	    ULONG_CMP_GE(jiffies, rcu_preempt_ctrlblk.boost_time)) {
-		rcu_preempt_ctrlblk.boost_tasks = rcu_preempt_ctrlblk.gp_tasks;
+	if (rcu_preempt_ctrlblk.exp_tasks != NULL ||
+	    (rcu_preempt_ctrlblk.gp_tasks != NULL &&
+	     rcu_preempt_ctrlblk.boost_tasks == NULL &&
+	     ULONG_CMP_GE(jiffies, rcu_preempt_ctrlblk.boost_time))) {
+		if (rcu_preempt_ctrlblk.exp_tasks == NULL)
+			rcu_preempt_ctrlblk.boost_tasks =
+				rcu_preempt_ctrlblk.gp_tasks;
 		invoke_rcu_kthread();
-		RCU_TRACE(rcu_preempt_ctrlblk.n_normal_boosts++);
 	} else
 		RCU_TRACE(rcu_initiate_boost_trace());
 	return 1;
 }
 
-/*
- * Initiate boosting for an expedited grace period.
- */
-static void rcu_initiate_expedited_boost(void)
-{
-	unsigned long flags;
-
-	raw_local_irq_save(flags);
-	if (!list_empty(&rcu_preempt_ctrlblk.blkd_tasks)) {
-		rcu_preempt_ctrlblk.boost_tasks =
-			rcu_preempt_ctrlblk.blkd_tasks.next;
-		invoke_rcu_kthread();
-		RCU_TRACE(rcu_preempt_ctrlblk.n_exp_boosts++);
-	} else
-		RCU_TRACE(rcu_initiate_exp_boost_trace());
-	raw_local_irq_restore(flags);
-}
-
 #define RCU_BOOST_DELAY_JIFFIES DIV_ROUND_UP(CONFIG_RCU_BOOST_DELAY * HZ, 1000)
 
 /*
@@ -347,13 +371,6 @@ static int rcu_initiate_boost(void)
 }
 
 /*
- * If there is no RCU priority boosting, we don't initiate expedited boosting.
- */
-static void rcu_initiate_expedited_boost(void)
-{
-}
-
-/*
  * If there is no RCU priority boosting, nothing to do at grace-period start.
  */
 static void rcu_preempt_boost_start_gp(void)
@@ -786,13 +803,16 @@ void synchronize_rcu_expedited(void)
 	rpcp->exp_tasks = rpcp->blkd_tasks.next;
 	if (rpcp->exp_tasks == &rpcp->blkd_tasks)
 		rpcp->exp_tasks = NULL;
-	local_irq_restore(flags);
 
 	/* Wait for tail of ->blkd_tasks list to drain. */
-	if (rcu_preempted_readers_exp())
-		rcu_initiate_expedited_boost();
+	if (!rcu_preempted_readers_exp())
+		local_irq_restore(flags);
+	else {
+		rcu_initiate_boost();
+		local_irq_restore(flags);
 		wait_event(sync_rcu_preempt_exp_wq,
 			   !rcu_preempted_readers_exp());
+	}
 
 	/* Clean up and exit. */
 	barrier(); /* ensure expedited GP seen before counter increment. */
@@ -905,22 +925,17 @@ void __init rcu_scheduler_starting(void)
 
 static void rcu_initiate_boost_trace(void)
 {
-	if (rcu_preempt_ctrlblk.gp_tasks == NULL)
-		rcu_preempt_ctrlblk.n_normal_balk_gp_tasks++;
+	if (list_empty(&rcu_preempt_ctrlblk.blkd_tasks))
+		rcu_preempt_ctrlblk.n_balk_blkd_tasks++;
+	else if (rcu_preempt_ctrlblk.gp_tasks == NULL &&
+		 rcu_preempt_ctrlblk.exp_tasks == NULL)
+		rcu_preempt_ctrlblk.n_balk_exp_gp_tasks++;
 	else if (rcu_preempt_ctrlblk.boost_tasks != NULL)
-		rcu_preempt_ctrlblk.n_normal_balk_boost_tasks++;
+		rcu_preempt_ctrlblk.n_balk_boost_tasks++;
 	else if (!ULONG_CMP_GE(jiffies, rcu_preempt_ctrlblk.boost_time))
-		rcu_preempt_ctrlblk.n_normal_balk_notyet++;
-	else
-		rcu_preempt_ctrlblk.n_normal_balk_nos++;
-}
-
-static void rcu_initiate_exp_boost_trace(void)
-{
-	if (list_empty(&rcu_preempt_ctrlblk.blkd_tasks))
-		rcu_preempt_ctrlblk.n_exp_balk_blkd_tasks++;
+		rcu_preempt_ctrlblk.n_balk_notyet++;
 	else
-		rcu_preempt_ctrlblk.n_exp_balk_nos++;
+		rcu_preempt_ctrlblk.n_balk_nos++;
 }
 
 #endif /* #ifdef CONFIG_RCU_BOOST */
-- 
1.7.3.2


  parent reply	other threads:[~2011-05-01 13:23 UTC|newest]

Thread overview: 126+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-05-01 13:21 [PATCH tip/core/rcu 0/6] Preview of RCU patches for 2.6.40 Paul E. McKenney
2011-05-01 13:20 ` [PATCH tip/core/rcu 01/86] rcu: Remove conditional compilation for RCU CPU stall warnings Paul E. McKenney
2011-05-01 13:20 ` [PATCH tip/core/rcu 02/86] rcu: Decrease memory-barrier usage based on semi-formal proof Paul E. McKenney
2011-05-01 13:20 ` [PATCH tip/core/rcu 03/86] rcu: merge TREE_PREEPT_RCU blocked_tasks[] lists Paul E. McKenney
2011-05-01 13:20 ` [PATCH tip/core/rcu 04/86] rcu: Update documentation to reflect blocked_tasks[] merge Paul E. McKenney
2011-05-01 13:20 ` [PATCH tip/core/rcu 05/86] rcu: move TREE_RCU from softirq to kthread Paul E. McKenney
2011-05-05  9:31   ` Yong Zhang
2011-05-06  5:46     ` Paul E. McKenney
2011-05-01 13:20 ` [PATCH tip/core/rcu 06/86] rcu: priority boosting for TREE_PREEMPT_RCU Paul E. McKenney
2011-05-01 13:20 ` [PATCH tip/core/rcu 07/86] rcu: Force per-rcu_node kthreads off of the outgoing CPU Paul E. McKenney
2011-05-01 15:10   ` Josh Triplett
2011-05-02 10:25     ` Paul E. McKenney
2011-05-01 13:20 ` [PATCH tip/core/rcu 08/86] rcu: put per-CPU kthread at non-RT priority during CPU hotplug operations Paul E. McKenney
2011-05-01 13:20 ` [PATCH tip/core/rcu 09/86] rcu: avoid hammering sched with yet another bound RT kthread Paul E. McKenney
2011-05-01 15:48   ` Josh Triplett
2011-05-02  8:23     ` Paul E. McKenney
2011-05-01 13:20 ` [PATCH tip/core/rcu 10/86] rcu: eliminate unused boosting statistics Paul E. McKenney
2011-05-01 15:53   ` Josh Triplett
2011-05-02  8:25     ` Paul E. McKenney
2011-05-02 16:15       ` Paul E. McKenney
2011-05-01 13:20 ` [PATCH tip/core/rcu 11/86] rcu: Add boosting to TREE_PREEMPT_RCU tracing Paul E. McKenney
2011-05-01 15:52   ` Josh Triplett
2011-05-02  8:27     ` Paul E. McKenney
2011-05-02 17:53       ` Josh Triplett
2011-05-02 22:19         ` Paul E. McKenney
2011-05-01 13:20 ` [PATCH tip/core/rcu 12/86] rcu: Update RCU's trace.txt documentation for new format Paul E. McKenney
2011-05-01 13:20 ` [PATCH tip/core/rcu 13/86] rcu: add callback-queue information to rcudata output Paul E. McKenney
2011-05-01 13:20 ` [PATCH tip/core/rcu 14/86] rcu: document new callback-queue trace information Paul E. McKenney
2011-05-01 13:20 ` [PATCH tip/core/rcu 15/86] rcu: add tracing for RCU's kthread run states Paul E. McKenney
2011-05-01 13:20 ` [PATCH tip/core/rcu 16/86] rcu: make rcutorture version numbers available through debugfs Paul E. McKenney
2011-05-01 15:29   ` Josh Triplett
2011-05-02  8:30     ` Paul E. McKenney
2011-05-02 17:39       ` Josh Triplett
2011-05-01 13:20 ` [PATCH tip/core/rcu 17/86] rcu: fix boost-tracing bug and update tracing documentation Paul E. McKenney
2011-05-01 15:43   ` Josh Triplett
2011-05-02  8:33     ` Paul E. McKenney
2011-05-02 16:18       ` Paul E. McKenney
2011-05-02 16:19         ` Paul E. McKenney
2011-05-02 17:44       ` Josh Triplett
2011-05-02 22:19         ` Paul E. McKenney
2011-05-01 13:20 ` [PATCH tip/core/rcu 18/86] rcu: add grace-period age to tracing Paul E. McKenney
2011-05-01 15:25   ` Josh Triplett
2011-05-02  8:34     ` Paul E. McKenney
2011-05-02 10:52       ` Paul E. McKenney
2011-05-02 16:21         ` Paul E. McKenney
2011-05-01 13:20 ` [PATCH tip/core/rcu 19/86] rcu: Add forward-progress diagnostic for per-CPU kthreads Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 20/86] rcu: Enable DEBUG_OBJECTS_RCU_HEAD from !PREEMPT Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 21/86] rcu: add DEBUG_OBJECTS_RCU_HEAD check for alignment Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 22/86] rcu: mark rcutorture boosting callback as being on-stack Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 23/86] rcu: Use WARN_ON_ONCE for DEBUG_OBJECTS_RCU_HEAD warnings Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 24/86] rcu: Switch to this_cpu() primitives Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 25/86] rcu: code cleanups in TINY_RCU priority boosting Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 26/86] rcu: remove useless ->boosted_this_gp field Paul E. McKenney
2011-05-01 16:05   ` Josh Triplett
2011-05-02  8:34     ` Paul E. McKenney
2011-05-01 13:21 ` Paul E. McKenney [this message]
2011-05-01 13:21 ` [PATCH tip/core/rcu 28/86] rcu: call __rcu_read_unlock() in exit_rcu for tree RCU Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 29/86] rcu: fix spelling Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 30/86] rcu: introduce kfree_rcu() Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 31/86] rcu: further lower priority in rcu_yield() Paul E. McKenney
2011-05-01 17:51   ` Mike Galbraith
2011-05-02  8:11     ` Paul E. McKenney
2011-05-02  9:33       ` Mike Galbraith
2011-05-01 13:21 ` [PATCH tip/core/rcu 32/86] rcu: prevent call_rcu() from diving into rcu core if irqs disabled Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 33/86] rcu: optimize rcutiny Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 34/86] cgroup,rcu: convert call_rcu(free_css_set_rcu) to kfree_rcu() Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 35/86] cgroup,rcu: convert call_rcu(free_cgroup_rcu) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 36/86] cgroup,rcu: convert call_rcu(__free_css_id_cb) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 37/86] net,rcu: convert call_rcu(tcf_common_free_rcu) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 38/86] net,rcu: convert call_rcu(tcf_police_free_rcu) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 39/86] net,rcu: convert call_rcu(in6_dev_finish_destroy_rcu) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 40/86] net,rcu: convert call_rcu(inet6_ifa_finish_destroy_rcu) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 41/86] net,rcu: convert call_rcu(listeners_free_rcu) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 42/86] net,rcu: convert call_rcu(sctp_local_addr_free) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 43/86] net,rcu: convert call_rcu(ha_rcu_free) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 44/86] net,rcu: convert call_rcu(dn_dev_free_ifa_rcu) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 45/86] net,act_police,rcu: remove rcu_barrier() Paul E. McKenney
2011-05-01 15:59   ` Josh Triplett
2011-05-02  8:36     ` Paul E. McKenney
2011-05-02 17:50       ` Josh Triplett
2011-05-02 22:21         ` Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 46/86] security,rcu: convert call_rcu(user_update_rcu_disposal) to kfree_rcu() Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 47/86] net,rcu: convert call_rcu(fc_rport_free_rcu) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 48/86] net,rcu: convert call_rcu(__leaf_info_free_rcu) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 49/86] net,rcu: convert call_rcu(__gen_kill_estimator) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 50/86] net,rcu: convert call_rcu(ip_mc_list_reclaim) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 51/86] net,rcu: convert call_rcu(ip_sf_socklist_reclaim) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 52/86] net,rcu: convert call_rcu(ip_mc_socklist_reclaim) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 53/86] net,rcu: convert call_rcu(free_dm_hw_stat) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 54/86] ixgbe,rcu: convert call_rcu(ring_free_rcu) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 55/86] macvlan,rcu: convert call_rcu(macvlan_port_rcu_free) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 56/86] net,rcu: convert call_rcu(ipv6_mc_socklist_reclaim) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 57/86] net,rcu: convert call_rcu(rps_map_release) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 58/86] net,rcu: convert call_rcu(xps_map_release) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 59/86] net,rcu: convert call_rcu(xps_dev_maps_release) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 60/86] security,rcu: convert call_rcu(sel_netif_free) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 61/86] net,rcu: convert call_rcu(netlbl_unlhsh_free_addr4) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 62/86] net,rcu: convert call_rcu(netlbl_unlhsh_free_addr6) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 63/86] net,rcu: convert call_rcu(net_generic_release) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 64/86] net,rcu: convert call_rcu(__nf_ct_ext_free_rcu) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 65/86] perf,rcu: convert call_rcu(free_ctx) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 66/86] perf,rcu: convert call_rcu(swevent_hlist_release_rcu) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 67/86] net,rcu: convert call_rcu(phonet_device_rcu_free) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 68/86] net,rcu: convert call_rcu(wq_free_rcu) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 69/86] net/mac80211,rcu: convert call_rcu(work_free_rcu) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 70/86] net,rcu: convert call_rcu(xt_osf_finger_free_rcu) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 71/86] net,rcu: convert call_rcu(kfree_tid_tx) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 72/86] audit_tree,rcu: convert call_rcu(__put_tree) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 73/86] block,rcu: convert call_rcu(cfq_cfqd_free) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 74/86] nfs,rcu: convert call_rcu(nfs_free_delegation_callback) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 75/86] security,rcu: convert call_rcu(whitelist_item_free) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 76/86] scsi,rcu: convert call_rcu(fc_rport_free_rcu) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 77/86] block,rcu: convert call_rcu(disk_free_ptbl_rcu_cb) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 78/86] ia64,rcu: convert call_rcu(sn_irq_info_free) " Paul E. McKenney
2011-05-01 13:21 ` [PATCH tip/core/rcu 79/86] jbd2,rcu: convert call_rcu(free_devcache) " Paul E. McKenney
2011-05-01 13:22 ` [PATCH tip/core/rcu 80/86] md,rcu: convert call_rcu(free_conf) " Paul E. McKenney
2011-05-01 13:22 ` [PATCH tip/core/rcu 81/86] security,rcu: convert call_rcu(sel_netnode_free) " Paul E. McKenney
2011-05-01 13:22 ` [PATCH tip/core/rcu 82/86] security,rcu: convert call_rcu(sel_netport_free) " Paul E. McKenney
2011-05-01 13:22 ` [PATCH tip/core/rcu 83/86] ipc,rcu: convert call_rcu(free_un) " Paul E. McKenney
2011-05-01 13:22 ` [PATCH tip/core/rcu 84/86] ipc,rcu: convert call_rcu(ipc_immediate_free) " Paul E. McKenney
2011-05-01 13:22 ` [PATCH tip/core/rcu 85/86] vmalloc,rcu: convert call_rcu(rcu_free_va) " Paul E. McKenney
2011-05-01 13:22 ` [PATCH tip/core/rcu 86/86] vmalloc,rcu: convert call_rcu(rcu_free_vb) " Paul E. McKenney
2011-05-01 16:14 ` [PATCH tip/core/rcu 0/6] Preview of RCU patches for 2.6.40 Josh Triplett
2011-05-02  8:37   ` Paul E. McKenney
2011-05-01 23:49 ` Dave Chinner
2011-05-02  8:09   ` 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=1304256126-26015-27-git-send-email-paulmck@linux.vnet.ibm.com \
    --to=paulmck@linux.vnet.ibm.com \
    --cc=Valdis.Kletnieks@vt.edu \
    --cc=akpm@linux-foundation.org \
    --cc=darren@dvhart.com \
    --cc=dhowells@redhat.com \
    --cc=dipankar@in.ibm.com \
    --cc=eric.dumazet@gmail.com \
    --cc=josh@joshtriplett.org \
    --cc=laijs@cn.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@polymtl.ca \
    --cc=mingo@elte.hu \
    --cc=niv@us.ibm.com \
    --cc=patches@linaro.org \
    --cc=paul.mckenney@linaro.org \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®