|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] [xen-unstable] timers: Migrate timers away from an offli
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1274266471 -3600
# Node ID 14a273565ad5e22f089e2fee8a86d5b0c760ada1
# Parent a6f24be72f667b2a339b6412dcebe72d94d757a9
timers: Migrate timers away from an offlined CPU.
Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
xen/common/timer.c | 26 ++++++++++++++++++++++++--
1 files changed, 24 insertions(+), 2 deletions(-)
diff -r a6f24be72f66 -r 14a273565ad5 xen/common/timer.c
--- a/xen/common/timer.c Wed May 19 11:39:08 2010 +0100
+++ b/xen/common/timer.c Wed May 19 11:54:31 2010 +0100
@@ -515,6 +515,29 @@ static struct keyhandler dump_timerq_key
.desc = "dump timer queues"
};
+static void migrate_timers_from_cpu(unsigned int cpu)
+{
+ struct timers *ts;
+ struct timer *t;
+
+ ASSERT((cpu != 0) && cpu_online(0));
+
+ ts = &per_cpu(timers, cpu);
+
+ spin_lock_irq(&per_cpu(timers, 0).lock);
+ spin_lock(&ts->lock);
+
+ while ( (t = GET_HEAP_SIZE(ts->heap) ? ts->heap[1] : ts->list) != NULL )
+ {
+ remove_entry(ts, t);
+ t->cpu = 0;
+ __add_timer(t);
+ }
+
+ spin_unlock(&ts->lock);
+ spin_unlock_irq(&per_cpu(timers, 0).lock);
+}
+
static struct timer *dummy_heap;
static int cpu_callback(
@@ -531,8 +554,7 @@ static int cpu_callback(
break;
case CPU_UP_CANCELED:
case CPU_DEAD:
- /* Enable this later. */
- /*WARN_ON(GET_HEAP_SIZE(ts->heap) || ts->list);*/
+ migrate_timers_from_cpu(cpu);
break;
default:
break;
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-changelog] [xen-unstable] timers: Migrate timers away from an offlined CPU.,
Xen patchbot-unstable <=
|
|
|
|
|