ia64/xen-unstable

view patches/linux-2.6.12/rcu-nohz.patch @ 5867:932fc8a1b38d

# HG changeset patch
# User Rusty Russell <rusty@rustcorp.com.au>
# Node ID a92163adedcfcff0d05c965d09da747f3c8aa13e
# Parent 63ab20781afa311300f3a8e832744292014ea7f6

Remove ill-conceived concept of watches blocking reply on connection which did write/mkdir/rm/setperm etc.
This causes deadlocks in real life, and I can't see a sane way of avoiding them: it is reasonable for someone to ignore watch notifications while doing other actions, and that means that we can do other writes. These writes can block pending other watchers; if one of these is the process blocked awaiting our ack, we deadlock.

diff -r 63ab20781afa -r a92163adedcf tools/xenstore/xenstored_core.c
author cl349@firebug.cl.cam.ac.uk
date Tue Jul 26 13:11:01 2005 +0000 (2005-07-26)
parents 56a63f9f378f
children 8799d14bef77 8799d14bef77 9312a3e8a6f8 dfaf788ab18c
line source
1 diff -ur linux-2.6.11/kernel/rcupdate.c linux-2.6.11-rcu/kernel/rcupdate.c
2 --- linux-2.6.11/kernel/rcupdate.c 2005-05-30 10:51:41 +01:00
3 +++ linux-2.6.11-rcu/kernel/rcupdate.c 2005-05-30 10:53:53 +01:00
4 @@ -202,8 +202,11 @@
5 */
6 static void cpu_quiet(int cpu, struct rcu_ctrlblk *rcp, struct rcu_state *rsp)
7 {
8 + cpumask_t mask;
9 +
10 cpu_clear(cpu, rsp->cpumask);
11 - if (cpus_empty(rsp->cpumask)) {
12 + cpus_andnot(mask, rsp->cpumask, nohz_cpu_mask);
13 + if (cpus_empty(mask)) {
14 /* batch completed ! */
15 rcp->completed = rcp->cur;
16 rcu_start_batch(rcp, rsp, 0);