Message ID | 1472042632-12883-2-git-send-email-joao.m.martins@oracle.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
>>> On 24.08.16 at 14:43, <joao.m.martins@oracle.com> wrote: > And accomodate platform time source initialization in > try_platform_time(). This is a preparatory patch for deferring > TSC clocksource initialization to the stage where all CPUS are > up (verify_tsc_reliability init call). > > Signed-off-by: Joao Martins <joao.m.martins@oracle.com> > Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Reviewed-by: Jan Beulich <jbeulich@suse.com> But not really useful to apply imo without the next patch. Jan
On 08/25/2016 11:03 AM, Jan Beulich wrote: >>>> On 24.08.16 at 14:43, <joao.m.martins@oracle.com> wrote: >> And accomodate platform time source initialization in >> try_platform_time(). This is a preparatory patch for deferring >> TSC clocksource initialization to the stage where all CPUS are >> up (verify_tsc_reliability init call). >> >> Signed-off-by: Joao Martins <joao.m.martins@oracle.com> >> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> > > Reviewed-by: Jan Beulich <jbeulich@suse.com> > > But not really useful to apply imo without the next patch. > I also agree with you. Thanks!
diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c index b316f23..6750e46 100644 --- a/xen/arch/x86/time.c +++ b/xen/arch/x86/time.c @@ -576,6 +576,24 @@ static void resume_platform_timer(void) plt_stamp = plt_src.read_counter(); } +static s64 __init try_platform_timer(struct platform_timesource *pts) +{ + s64 rc = pts->init(pts); + + if ( rc <= 0 ) + return rc; + + plt_mask = (u64)~0ull >> (64 - pts->counter_bits); + + set_time_scale(&plt_scale, pts->frequency); + + plt_overflow_period = scale_delta( + 1ull << (pts->counter_bits - 1), &plt_scale); + plt_src = *pts; + + return rc; +} + static u64 __init init_platform_timer(void) { static struct platform_timesource * __initdata plt_timers[] = { @@ -593,7 +611,7 @@ static u64 __init init_platform_timer(void) pts = plt_timers[i]; if ( !strcmp(opt_clocksource, pts->id) ) { - rc = pts->init(pts); + rc = try_platform_timer(pts); break; } } @@ -609,21 +627,13 @@ static u64 __init init_platform_timer(void) for ( i = 0; i < ARRAY_SIZE(plt_timers); i++ ) { pts = plt_timers[i]; - if ( (rc = pts->init(pts)) > 0 ) + if ( (rc = try_platform_timer(pts)) > 0 ) break; } } BUG_ON(rc <= 0); - plt_mask = (u64)~0ull >> (64 - pts->counter_bits); - - set_time_scale(&plt_scale, pts->frequency); - - plt_overflow_period = scale_delta( - 1ull << (pts->counter_bits-1), &plt_scale); - plt_src = *pts; - printk("Platform timer is %s %s\n", freq_string(pts->frequency), pts->name);