From: Nick Piggin <nickpiggin@yahoo.com.au>

Thanks to Paul for catching this.
Should be merged into sched-rcu-domains.patch

Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 kernel/sched.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff -puN kernel/sched.c~sched-rcu-domains-fix kernel/sched.c
--- 25/kernel/sched.c~sched-rcu-domains-fix	2005-06-18 02:55:38.000000000 -0700
+++ 25-akpm/kernel/sched.c	2005-06-18 02:55:38.000000000 -0700
@@ -270,7 +270,7 @@ static DEFINE_PER_CPU(struct runqueue, r
  * preempt-disabled sections.
  */
 #define for_each_domain(cpu, domain) \
-	for (domain = cpu_rq(cpu)->sd; domain; domain = domain->parent)
+for (domain = rcu_dereference(cpu_rq(cpu)->sd); domain; domain = domain->parent)
 
 #define cpu_rq(cpu)		(&per_cpu(runqueues, (cpu)))
 #define this_rq()		(&__get_cpu_var(runqueues))
@@ -4932,7 +4932,7 @@ void __devinit cpu_attach_domain(struct 
 
 	sched_domain_debug(sd, cpu);
 
-	rq->sd = sd;
+	rcu_assign_pointer(rq->sd, sd);
 }
 
 /* cpus with isolated domains */
_