diff options
-rw-r--r-- | .rootkeys | 1 | ||||
-rw-r--r-- | linux-2.6.11-xen-sparse/arch/xen/i386/kernel/process.c | 17 | ||||
-rw-r--r-- | patches/linux-2.6.11/rcu-nohz.patch | 16 |
3 files changed, 22 insertions, 12 deletions
@@ -471,6 +471,7 @@ 42372652KCUP-IOH9RN19YQmGhs4aA patches/linux-2.6.11/iomap.patch 428359d4b3fDYtazwXi4UUmSWaOUew patches/linux-2.6.11/linux-2.6.11.10.patch 4296fb998LGSWCcljGKbOCUv3h9uRQ patches/linux-2.6.11/net-csum.patch +429ae875I9ZrqrRDjGD34IC2kzDREw patches/linux-2.6.11/rcu-nohz.patch 424f001e_M1Tnxc52rDrmCLelnDWMQ patches/linux-2.6.11/x86_64-linux.patch 3f776bd1Hy9rn69ntXBhPReUFw9IEA tools/Makefile 40e1b09db5mN69Ijj0X_Eol-S7dXiw tools/Rules.mk diff --git a/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/process.c b/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/process.c index 9061053081..d428b2305f 100644 --- a/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/process.c +++ b/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/process.c @@ -94,25 +94,18 @@ void enable_hlt(void) EXPORT_SYMBOL(enable_hlt); /* XXX XEN doesn't use default_idle(), poll_idle(). Use xen_idle() instead. */ -extern int set_timeout_timer(void); +extern void stop_hz_timer(void); +extern void start_hz_timer(void); void xen_idle(void) { - int cpu; - local_irq_disable(); - cpu = smp_processor_id(); - if (rcu_pending(cpu)) - rcu_check_callbacks(cpu, 0); - if (need_resched()) { local_irq_enable(); - } else if (set_timeout_timer() == 0) { - /* NB. Blocking reenable events in a race-free manner. */ - HYPERVISOR_block(); } else { - local_irq_enable(); - HYPERVISOR_yield(); + stop_hz_timer(); + HYPERVISOR_block(); /* implicit local_irq_enable() */ + start_hz_timer(); } } diff --git a/patches/linux-2.6.11/rcu-nohz.patch b/patches/linux-2.6.11/rcu-nohz.patch new file mode 100644 index 0000000000..d7bafb3a62 --- /dev/null +++ b/patches/linux-2.6.11/rcu-nohz.patch @@ -0,0 +1,16 @@ +diff -ur linux-2.6.11/kernel/rcupdate.c linux-2.6.11-rcu/kernel/rcupdate.c +--- linux-2.6.11/kernel/rcupdate.c 2005-05-30 10:51:41 +01:00 ++++ linux-2.6.11-rcu/kernel/rcupdate.c 2005-05-30 10:53:53 +01:00 +@@ -202,8 +202,11 @@ + */ + static void cpu_quiet(int cpu, struct rcu_ctrlblk *rcp, struct rcu_state *rsp) + { ++ cpumask_t mask; ++ + cpu_clear(cpu, rsp->cpumask); +- if (cpus_empty(rsp->cpumask)) { ++ cpus_andnot(mask, rsp->cpumask, nohz_cpu_mask); ++ if (cpus_empty(mask)) { + /* batch completed ! */ + rcp->completed = rcp->cur; + rcu_start_batch(rcp, rsp, 0); |