From patchwork Thu Mar 17 16:12:15 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joao Martins X-Patchwork-Id: 8612901 Return-Path: X-Original-To: patchwork-xen-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id A3D31C0553 for ; Thu, 17 Mar 2016 16:16:48 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id C9513202EC for ; Thu, 17 Mar 2016 16:16:47 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D20A320361 for ; Thu, 17 Mar 2016 16:16:46 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1agaYy-0004VI-Ac; Thu, 17 Mar 2016 16:14:16 +0000 Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1agaYx-0004UN-31 for xen-devel@lists.xen.org; Thu, 17 Mar 2016 16:14:15 +0000 Received: from [193.109.254.147] by server-1.bemta-14.messagelabs.com id 21/3C-02901-6D7DAE65; Thu, 17 Mar 2016 16:14:14 +0000 X-Env-Sender: joao.m.martins@oracle.com X-Msg-Ref: server-3.tower-27.messagelabs.com!1458231252!31723852!1 X-Originating-IP: [141.146.126.69] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogMTQxLjE0Ni4xMjYuNjkgPT4gMjc3MjE4\n X-StarScan-Received: X-StarScan-Version: 8.11; banners=-,-,- X-VirusChecked: Checked Received: (qmail 26129 invoked from network); 17 Mar 2016 16:14:13 -0000 Received: from aserp1040.oracle.com (HELO aserp1040.oracle.com) (141.146.126.69) by server-3.tower-27.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 17 Mar 2016 16:14:13 -0000 Received: from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id u2HGEAZG012561 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 17 Mar 2016 16:14:11 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by userv0022.oracle.com (8.14.4/8.13.8) with ESMTP id u2HGEA48014979 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 17 Mar 2016 16:14:10 GMT Received: from abhmp0008.oracle.com (abhmp0008.oracle.com [141.146.116.14]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id u2HGEA30007143; Thu, 17 Mar 2016 16:14:10 GMT Received: from localhost.localdomain (/89.181.14.119) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 17 Mar 2016 09:12:40 -0700 MIME-Version: 1.0 Message-ID: <1458231136-13457-5-git-send-email-joao.m.martins@oracle.com> Date: Thu, 17 Mar 2016 09:12:15 -0700 (PDT) From: Joao Martins To: xen-devel@lists.xen.org References: <1458231136-13457-1-git-send-email-joao.m.martins@oracle.com> In-Reply-To: <1458231136-13457-1-git-send-email-joao.m.martins@oracle.com> X-Mailer: git-send-email 2.1.4 X-Source-IP: userv0022.oracle.com [156.151.31.74] Cc: Andrew Cooper , Joao Martins , Keir Fraser , Jan Beulich Subject: [Xen-devel] [PATCH 4/5] x86/time: refactor read_platform_stime() X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP To fetch the last read from the clocksource which was used to calculate system_time. In the case of clocksource=tsc we will use it to set tsc_timestamp. Signed-off-by: Joao Martins --- Cc: Keir Fraser Cc: Jan Beulich Cc: Andrew Cooper --- xen/arch/x86/time.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c index 5af8902..89c35d0 100644 --- a/xen/arch/x86/time.c +++ b/xen/arch/x86/time.c @@ -508,6 +508,7 @@ static s_time_t stime_platform_stamp; /* System time at below platform time */ static u64 platform_timer_stamp; /* Platform time at above system time */ static u64 plt_stamp64; /* 64-bit platform counter stamp */ static u64 plt_stamp; /* hardware-width platform counter stamp */ +static u64 plt_stamp_counter; /* last read since read_counter */ static struct timer plt_overflow_timer; static s_time_t __read_platform_stime(u64 platform_time) @@ -566,7 +567,7 @@ static void plt_overflow(void *unused) set_timer(&plt_overflow_timer, NOW() + plt_overflow_period); } -static s_time_t read_platform_stime(void) +static s_time_t read_platform_stime(u64 *stamp) { u64 count; s_time_t stime; @@ -574,8 +575,11 @@ static s_time_t read_platform_stime(void) ASSERT(!local_irq_is_enabled()); spin_lock(&platform_timer_lock); - count = plt_stamp64 + ((plt_src.read_counter() - plt_stamp) & plt_mask); + plt_stamp_counter = plt_src.read_counter(); + count = plt_stamp64 + ((plt_stamp_counter - plt_stamp) & plt_mask); stime = __read_platform_stime(count); + if (stamp) + *stamp = plt_stamp_counter; spin_unlock(&platform_timer_lock); return stime; @@ -693,7 +697,7 @@ void cstate_restore_tsc(void) if ( boot_cpu_has(X86_FEATURE_NONSTOP_TSC) ) return; - write_tsc(stime2tsc(read_platform_stime())); + write_tsc(stime2tsc(read_platform_stime(NULL))); } /*************************************************************************** @@ -1012,7 +1016,7 @@ int cpu_frequency_change(u64 freq) local_irq_disable(); /* Platform time /first/, as we may be delayed by platform_timer_lock. */ - t->stime_master_stamp = read_platform_stime(); + t->stime_master_stamp = read_platform_stime(NULL); /* TSC-extrapolated time may be bogus after frequency change. */ /*t->stime_local_stamp = get_s_time();*/ t->stime_local_stamp = t->stime_master_stamp; @@ -1330,7 +1334,7 @@ static void time_calibration_tsc_rendezvous(void *_r) if ( r->master_stime == 0 ) { - r->master_stime = read_platform_stime(); + r->master_stime = read_platform_stime(NULL); r->master_tsc_stamp = rdtsc(); } atomic_inc(&r->semaphore); @@ -1422,7 +1426,7 @@ void init_percpu_time(void) local_irq_save(flags); t->local_tsc_stamp = rdtsc(); - now = read_platform_stime(); + now = read_platform_stime(NULL); local_irq_restore(flags); t->stime_master_stamp = now;