[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] x86: Clean up early time setup.
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1229001019 0 # Node ID 1391e1a444c2e986322d72258c0e92eaa2268168 # Parent 33ae75b60de289bb72d8480dddea55dd07c032ab x86: Clean up early time setup. Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx> --- xen/arch/x86/time.c | 19 +++++++++++-------- 1 files changed, 11 insertions(+), 8 deletions(-) diff -r 33ae75b60de2 -r 1391e1a444c2 xen/arch/x86/time.c --- a/xen/arch/x86/time.c Thu Dec 11 13:09:59 2008 +0000 +++ b/xen/arch/x86/time.c Thu Dec 11 13:10:19 2008 +0000 @@ -1125,19 +1125,19 @@ void init_percpu_time(void) /* Late init function (after all CPUs are booted). */ int __init init_xen_time(void) { - /* check if TSC is invariant during deep C state - this is a new feature introduced by Nehalem*/ + /* Is TSC invariant during deep C state? */ if ( cpuid_edx(0x80000007) & (1u<<8) ) tsc_invariant = 1; open_softirq(TIME_CALIBRATE_SOFTIRQ, local_time_calibration); + /* NB. get_cmos_time() can take over one second to execute. */ + do_settime(get_cmos_time(), 0, NOW()); + + stime_platform_stamp = NOW(); + init_platform_timer(); + init_percpu_time(); - - stime_platform_stamp = 0; - init_platform_timer(); - - do_settime(get_cmos_time(), 0, NOW()); return 0; } @@ -1146,9 +1146,12 @@ int __init init_xen_time(void) /* Early init function. */ void __init early_time_init(void) { + struct cpu_time *t = &this_cpu(cpu_time); u64 tmp = init_pit_and_calibrate_tsc(); - set_time_scale(&this_cpu(cpu_time).tsc_scale, tmp); + /* So we can use get_s_time() during early boot. */ + set_time_scale(&t->tsc_scale, tmp); + rdtscll(t->local_tsc_stamp); do_div(tmp, 1000); cpu_khz = (unsigned long)tmp; _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |