summaryrefslogtreecommitdiffstats
path: root/rcu-prevent-early-schedule.patch
diff options
context:
space:
mode:
authorJosh Boyer <jwboyer@redhat.com>2011-08-04 09:55:54 -0400
committerJosh Boyer <jwboyer@redhat.com>2011-08-04 11:12:43 -0400
commit8e3ae989b3feba97db709d667ae39fbe2c7ace31 (patch)
treea04dcb7ae27ecf3a0c4620f82c72c3e71641d0e7 /rcu-prevent-early-schedule.patch
parent1aa2339b01b1e13a2a4f660e54656ab0df1ecfb5 (diff)
downloadkernel-8e3ae989b3feba97db709d667ae39fbe2c7ace31.tar.gz
kernel-8e3ae989b3feba97db709d667ae39fbe2c7ace31.tar.xz
kernel-8e3ae989b3feba97db709d667ae39fbe2c7ace31.zip
3.0-git19 snapshot
Add epoll patch until it gets upstreamed Add trial patch to fix the scheduling while atomic issues around pidmap_init
Diffstat (limited to 'rcu-prevent-early-schedule.patch')
-rw-r--r--rcu-prevent-early-schedule.patch34
1 files changed, 34 insertions, 0 deletions
diff --git a/rcu-prevent-early-schedule.patch b/rcu-prevent-early-schedule.patch
new file mode 100644
index 000000000..849aaa628
--- /dev/null
+++ b/rcu-prevent-early-schedule.patch
@@ -0,0 +1,34 @@
+From 05b0c3b7b05471a6d53300cf6d7d88ee66eff7ed Mon Sep 17 00:00:00 2001
+From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
+Date: Thu, 4 Aug 2011 11:10:24 -0400
+Subject: [PATCH] rcu: Prevent early boot set_need_resched() from
+ __rcu_pending()
+
+There isn't a whole lot of point in poking the scheduler before there
+are other tasks to switch to. This commit therefore adds a check
+for rcu_scheduler_fully_active in __rcu_pending() to suppress any
+pre-scheduler calls to set_need_resched(). The downside of this approach
+is additional runtime overhead in a reasonably hot code path.
+
+Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
+Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
+---
+ kernel/rcutree.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/kernel/rcutree.c b/kernel/rcutree.c
+index ba06207..9c8a3f9 100644
+--- a/kernel/rcutree.c
++++ b/kernel/rcutree.c
+@@ -1671,7 +1671,7 @@ static int __rcu_pending(struct rcu_state *rsp, struct rcu_data *rdp)
+ check_cpu_stall(rsp, rdp);
+
+ /* Is the RCU core waiting for a quiescent state from this CPU? */
+- if (rdp->qs_pending && !rdp->passed_quiesc) {
++ if (rcu_scheduler_fully_active && rdp->qs_pending && !rdp->passed_quiesc) {
+
+ /*
+ * If force_quiescent_state() coming soon and this CPU
+--
+1.7.6
+