 
	
| [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] [Bugfix][pv-ops] Guest get stucked after migration
 In recent pv-ops kernel, pvclock is not guaranteed as monotone.
After a migration, pvclock can produce smaller cycle count.
[The test is performed on next-2.6.32 tree]
The issue occured when uptime(sender) > uptime(target), and with
CONFIG_GENERIC_TIME. The guest get stucked after the migration,
doing a huge loop inside update_wall_time, until the overflow of
64-bit unsigned offset.
The following patch fixed this issue by introducing a global sign.
Xen pvclock will update the cycle_last with the newest cycle count
on the first read after migration.
Signed-off-by: Frank Pan <frankpzh@xxxxxxxxx>
---
 linux-2.6-xen/arch/x86/xen/time.c |   12 +++++++++++-
 1 files changed, 11 insertions(+), 1 deletions(-)
diff --git a/linux-2.6-xen/arch/x86/xen/time.c
b/linux-2.6-xen/arch/x86/xen/time.c
index ab35140..ac6fe2a 100644
--- a/linux-2.6-xen/arch/x86/xen/time.c
+++ b/linux-2.6-xen/arch/x86/xen/time.c
@@ -41,6 +41,9 @@ static DEFINE_PER_CPU(struct vcpu_runstate_info,
runstate_snapshot);
 static DEFINE_PER_CPU(u64, residual_stolen);
 static DEFINE_PER_CPU(u64, residual_blocked);
+/* xen_clocksource_get_cycles should update cycle_last after resume */
+static int just_resume = 0;
+
 /* return an consistent snapshot of 64-bit time/counter value */
 static u64 get64(const u64 *p)
 {
@@ -177,7 +180,13 @@ cycle_t xen_clocksource_read(void)
 static cycle_t xen_clocksource_get_cycles(struct clocksource *cs)
 {
-       return xen_clocksource_read();
+       cycle_t c = xen_clocksource_read();
+
+       if (unlikely(just_resume)) {
+               cs->cycle_last = c++;
+               just_resume = 0;
+       }
+       return c;
 }
 static void xen_read_wallclock(struct timespec *ts)
@@ -441,6 +450,7 @@ void xen_timer_resume(void)
 {
        int cpu;
+       just_resume = 1;
        pvclock_resume();
        if (xen_clockevent != &xen_vcpuop_clockevent)
-- 
1.7.0.4
-- 
æéç, Frank Pan
Computer Science and Technology
Tsinghua University
Attachment:
0001-Bugfix-pv-ops-Guest-get-stucked-after-migration.patch _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel 
 
 | 
|  | Lists.xenproject.org is hosted with RackSpace, monitoring our |