aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.rootkeys1
-rw-r--r--linux-2.6.11-xen-sparse/arch/xen/i386/kernel/process.c17
-rw-r--r--patches/linux-2.6.11/rcu-nohz.patch16
3 files changed, 22 insertions, 12 deletions
diff --git a/.rootkeys b/.rootkeys
index 9cb513b242..bb993411e2 100644
--- a/.rootkeys
+++ b/.rootkeys
@@ -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);