diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c index 5680d299e7..503c43499a 100644 --- a/xen/arch/x86/time.c +++ b/xen/arch/x86/time.c @@ -2567,6 +2567,8 @@ __initcall(verify_tsc_reliability); /* Late init function (after interrupts are enabled). */ int __init init_xen_time(void) { + unsigned long wc; + tsc_check_writability(); open_softirq(TIME_CALIBRATE_SOFTIRQ, local_time_calibration); @@ -2584,7 +2586,8 @@ int __init init_xen_time(void) printk(XENLOG_INFO "Wallclock source: %s\n", wallclock_type_to_string()); /* NB. get_wallclock_time() can take over one second to execute. */ - do_settime(get_wallclock_time(), 0, NOW()); + wc = get_wallclock_time(); + do_settime(wc, 0, NOW()); /* Finish platform timer initialization. */ try_platform_timer_tail(); @@ -2737,6 +2740,8 @@ int time_suspend(void) int time_resume(void) { + unsigned long wc; + preinit_pit(); resume_platform_timer(); @@ -2748,7 +2753,8 @@ int time_resume(void) set_timer(&calibration_timer, NOW() + EPOCH); - do_settime(get_wallclock_time() + cmos_utc_offset, 0, NOW()); + wc = get_wallclock_time(); + do_settime(wc + cmos_utc_offset, 0, NOW()); update_vcpu_system_time(current);