Messages in this thread Patch in this message | | | Date | Mon, 5 Dec 2005 16:32:39 +0530 | From | Srivatsa Vaddagiri <> | Subject | [PATCH] Fix RCU race in access of nohz_cpu_mask |
| |
Accessing nohz_cpu_mask before incrementing rcp->cur is racy. It can cause tickless idle CPUs to be included in rsp->cpumask, which will extend graceperiods unnecessarily.
Patch below (against 2.6.15-rc5-mm1) fixes this race. It has been tested using extensions to RCU torture module that forces various CPUs to become idle.
Signed-off-by : Srivatsa Vaddagiri <vatsa@in.ibm.com>
---
linux-2.6.15-rc5-mm1-root/kernel/rcupdate.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-)
diff -puN kernel/rcupdate.c~rcu-lock kernel/rcupdate.c --- linux-2.6.15-rc5-mm1/kernel/rcupdate.c~rcu-lock 2005-12-05 15:28:33.000000000 +0530 +++ linux-2.6.15-rc5-mm1-root/kernel/rcupdate.c 2005-12-05 15:28:40.000000000 +0530 @@ -244,15 +244,15 @@ static void rcu_start_batch(struct rcu_c if (rcp->next_pending && rcp->completed == rcp->cur) { - /* Can't change, since spin lock held. */ - cpus_andnot(rsp->cpumask, cpu_online_map, nohz_cpu_mask); - rcp->next_pending = 0; /* next_pending == 0 must be visible in __rcu_process_callbacks() * before it can see new value of cur. */ smp_wmb(); rcp->cur++; + smp_mb(); + cpus_andnot(rsp->cpumask, cpu_online_map, nohz_cpu_mask); + } } _
Thanks and Regards, Srivatsa Vaddagiri, Linux Technology Center, IBM Software Labs, Bangalore, INDIA - 560017 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |