From: Nick Piggin Thanks to Paul for catching this. Should be merged into sched-rcu-domains.patch Signed-off-by: Andrew Morton --- 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-05-03 16:14:39.000000000 -0700 +++ 25-akpm/kernel/sched.c 2005-05-03 16:14:39.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)) @@ -4929,7 +4929,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 */ _