static void wallclock_test(void *data) { int *p_err = data; long ksec, offset; struct timespec ts; kvm_get_wallclock(&ts); ksec = ts.tv_sec; offset = ksec - sec; printf("Seconds get from kvmclock: %ld (cpu %d, offset: %ld)\n", ksec, smp_id(), offset); if (offset > threshold || offset < -threshold) { printf("offset too large!\n"); (*p_err)++; } }
/* not static: needed by APM */ unsigned long get_cmos_time(void) { unsigned long retval; unsigned long flags; spin_lock_irqsave(&rtc_lock, flags); if (use_kvm_time) retval = kvm_get_wallclock(); else if (efi_enabled) retval = efi_get_time(); else retval = mach_get_cmos_time(); spin_unlock_irqrestore(&rtc_lock, flags); return retval; }
static int wallclock_test(long sec, long threshold) { long ksec, offset; struct timespec ts; printf("Wallclock test, threshold %ld\n", threshold); kvm_get_wallclock(&ts); ksec = ts.tv_sec; offset = ksec - sec; printf("Seconds get from host: %ld\n", sec); printf("Seconds get from kvmclock: %ld\n", ksec); printf("Offset: %ld\n", offset); if (offset > threshold || offset < -threshold) { printf("offset too large!\n"); return 1; } return 0; }