diff -r a7642acd9caf xen/arch/x86/time.c --- a/xen/arch/x86/time.c Fri Jul 25 10:06:53 2008 +0100 +++ b/xen/arch/x86/time.c Sun Jul 27 06:31:19 2008 -0600 @@ -35,7 +35,8 @@ static char opt_clocksource[10]; static char opt_clocksource[10]; string_param("clocksource", opt_clocksource); -#define EPOCH MILLISECS(1000) +#define EPOCH (1ULL<<30) +#define NEXT_ROUNDED_EPOCH(now) (((now) + (EPOCH+(EPOCH/2))) & ~(EPOCH-1)) unsigned long cpu_khz; /* CPU clock frequency in kHz. */ DEFINE_SPINLOCK(rtc_lock); @@ -1021,7 +1022,7 @@ static void local_time_calibration(void update_vcpu_system_time(current); out: - set_timer(&t->calibration_timer, NOW() + EPOCH); + set_timer(&t->calibration_timer, NEXT_ROUNDED_EPOCH(curr_local_stime)); if ( smp_processor_id() == 0 ) platform_time_calibration(); @@ -1050,7 +1051,7 @@ void init_percpu_time(void) out: init_timer(&t->calibration_timer, local_time_calibration, NULL, smp_processor_id()); - set_timer(&t->calibration_timer, NOW() + EPOCH); + set_timer(&t->calibration_timer, NEXT_ROUNDED_EPOCH(NOW())); } /* Late init function (after all CPUs are booted). */