From: Joao Martins <joao.m.martins@oracle.com> To: xen-devel@lists.xen.org Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Joao Martins <joao.m.martins@oracle.com>, Keir Fraser <keir@xen.org>, Jan Beulich <jbeulich@suse.com> Subject: [PATCH 3/5] x86/time: streamline platform time init on plt_init() Date: Thu, 17 Mar 2016 09:12:14 -0700 (PDT) [thread overview] Message-ID: <1458231136-13457-4-git-send-email-joao.m.martins@oracle.com> (raw) In-Reply-To: <1458231136-13457-1-git-send-email-joao.m.martins@oracle.com> And use to initialize platform time solely for clocksource=tsc, as opposed to initializing platform overflow timer, which would only fire in ~180 years (on 2.2 Ghz Broadwell processor). Signed-off-by: Joao Martins <joao.m.martins@oracle.com> --- Cc: Keir Fraser <keir@xen.org> Cc: Jan Beulich <jbeulich@suse.com> Cc: Andrew Cooper <andrew.cooper3@citrix.com> Changes since RFC: - Move clocksource_is_tsc variable to this patch. - s/1000000000/SECONDS(1) --- xen/arch/x86/time.c | 44 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c index 1311c58..5af8902 100644 --- a/xen/arch/x86/time.c +++ b/xen/arch/x86/time.c @@ -434,6 +434,7 @@ uint64_t ns_to_acpi_pm_tick(uint64_t ns) /************************************************************ * PLATFORM TIMER 4: TSC */ +static bool_t clocksource_is_tsc = 0; static u64 tsc_freq; static unsigned long tsc_max_warp; static void tsc_check_reliability(void); @@ -466,7 +467,7 @@ static int __init init_tsctimer(struct platform_timesource *pts) } pts->frequency = tsc_freq; - return tsc_reliable; + return ( clocksource_is_tsc = tsc_reliable ); } static u64 read_tsc(void) @@ -516,17 +517,31 @@ static s_time_t __read_platform_stime(u64 platform_time) return (stime_platform_stamp + scale_delta(diff, &plt_scale)); } +static void __plt_init(void) +{ + u64 count; + + ASSERT(spin_is_locked(&platform_timer_lock)); + count = plt_src.read_counter(); + plt_stamp64 += (count - plt_stamp) & plt_mask; + plt_stamp = count; +} + +static void plt_init(void) +{ + spin_lock_irq(&platform_timer_lock); + __plt_init(); + spin_unlock_irq(&platform_timer_lock); +} + static void plt_overflow(void *unused) { int i; - u64 count; s_time_t now, plt_now, plt_wrap; spin_lock_irq(&platform_timer_lock); - count = plt_src.read_counter(); - plt_stamp64 += (count - plt_stamp) & plt_mask; - plt_stamp = count; + __plt_init(); now = NOW(); plt_wrap = __read_platform_stime(plt_stamp64); @@ -633,11 +648,22 @@ static void __init init_platform_timer(void) set_time_scale(&plt_scale, pts->frequency); - plt_overflow_period = scale_delta( - 1ull << (pts->counter_bits-1), &plt_scale); - init_timer(&plt_overflow_timer, plt_overflow, NULL, 0); plt_src = *pts; - plt_overflow(NULL); + + if ( clocksource_is_tsc ) + { + plt_init(); + } + else + { + plt_overflow_period = scale_delta( + 1ull << (pts->counter_bits-1), &plt_scale); + init_timer(&plt_overflow_timer, plt_overflow, NULL, 0); + plt_overflow(NULL); + + printk("Platform timer overflow period is %lu secs\n", + plt_overflow_period/SECONDS(1)); + } platform_timer_stamp = plt_stamp64; stime_platform_stamp = NOW(); -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
next prev parent reply other threads:[~2016-03-17 16:12 UTC|newest] Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-03-17 16:12 [PATCH 0/5] x86/time: PVCLOCK_TSC_STABLE_BIT support Joao Martins 2016-03-17 16:12 ` [PATCH 1/5] public/xen.h: add flags field to vcpu_time_info Joao Martins 2016-03-18 20:12 ` Andrew Cooper 2016-03-21 11:42 ` Joao Martins 2016-03-21 11:43 ` Andrew Cooper 2016-03-21 11:51 ` Joao Martins 2016-03-21 15:10 ` Jan Beulich 2016-03-21 15:27 ` Andrew Cooper 2016-03-21 15:40 ` Joao Martins 2016-03-17 16:12 ` [PATCH 2/5] x86/time: implement tsc as clocksource Joao Martins 2016-03-18 20:21 ` Andrew Cooper 2016-03-21 11:43 ` Joao Martins 2016-03-22 12:41 ` Joao Martins 2016-03-22 12:46 ` Jan Beulich 2016-03-22 15:51 ` Joao Martins 2016-03-22 16:02 ` Jan Beulich 2016-03-22 20:40 ` Joao Martins 2016-03-23 7:28 ` Jan Beulich 2016-03-23 12:05 ` Joao Martins 2016-03-23 14:05 ` Jan Beulich 2016-03-17 16:12 ` Joao Martins [this message] 2016-03-18 20:32 ` [PATCH 3/5] x86/time: streamline platform time init on plt_init() Andrew Cooper 2016-03-21 11:45 ` Joao Martins 2016-03-17 16:12 ` [PATCH 4/5] x86/time: refactor read_platform_stime() Joao Martins 2016-03-18 20:34 ` Andrew Cooper 2016-03-21 11:45 ` Joao Martins 2016-03-21 13:08 ` Andrew Cooper 2016-03-17 16:12 ` [PATCH 5/5] x86/time: implement PVCLOCK_TSC_STABLE_BIT Joao Martins 2016-03-18 20:58 ` Andrew Cooper 2016-03-21 11:50 ` Joao Martins
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1458231136-13457-4-git-send-email-joao.m.martins@oracle.com \ --to=joao.m.martins@oracle.com \ --cc=andrew.cooper3@citrix.com \ --cc=jbeulich@suse.com \ --cc=keir@xen.org \ --cc=xen-devel@lists.xen.org \ --subject='Re: [PATCH 3/5] x86/time: streamline platform time init on plt_init()' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).