[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 |