Received: by 10.223.176.5 with SMTP id f5csp495343wra; Tue, 30 Jan 2018 15:03:27 -0800 (PST) X-Google-Smtp-Source: AH8x225M4iiCUSw123n81XCpVnxx4uWIHJqqlQNhR2hwYOlJIUVZgRbhyLIqvafSljFEuZiOQcxK X-Received: by 10.98.17.193 with SMTP id 62mr31602186pfr.126.1517353407194; Tue, 30 Jan 2018 15:03:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1517353407; cv=none; d=google.com; s=arc-20160816; b=vd2hjKGmbsnRlB8/GNyX7ESOtv8HQrfJOc06qOYzJWsup6XWBTOONBhw2rKQEhCLDW dibDYTQ3L3DtdJB9ocwuWHR6tHMzc0jSXfYiWO1XV7CYcI1ULPcv9GTWjBlcYEYsYgjr sydz6kMKC7ZEzst1yCkRaBklTqxCI8XBz1oimYjxIoS3+Pb/9WY+/1HmtFakqwhXygg4 DIAk0uUR1xqRepM1UUCizFbfqJMfqKi4QtV9y8keOL6Cixuhq+6ZrFeVg/8HWXITjiop 8W6L2T8FoUyl588e1Wz1xCI46hcCFhBpDzS8SnSVoU30Vj615No2jGVzcc93Q0sREY/k ovdg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-disposition :content-transfer-encoding:mime-version:robot-unsubscribe:robot-id :git-commit-id:subject:to:references:in-reply-to:reply-to:cc :message-id:from:date:arc-authentication-results; bh=LGK2CKUca72D2Y03z6WDlG0869HA8ZIyKRj6H10nU5M=; b=MHHXGwh2ZqNOa2+CIBmdkhd+iOYyMtthsXFVlTXLQxY8+N4ZjkYN10W8EHL3iHkNTT ppdvxvg1unWgAyig5pKxkBx+IN75rhEPWyKie6PU9qfowNarVszVMom4ZmGtJBydzjOX 0ueF10bkWKPDFPI+5sDTTy8j1a/XX6WXMmQ8n6c6UrypnY+4yk/1d9YPHmXk9uFf5/sk XMDQ8mfI/B8nFpkNCNSwTusxMcQNw2eOz/a+quOdVILb/NADdkOgj86sBf157ogHgHW8 3uPGfd72c4qHWT0LNG8kyhxghjHv5VTj1cxaZ2Cr9cmIsxV1BlkxQ9LaLGhndt/QfaaV RvVQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 97-v6si607564plm.433.2018.01.30.15.03.12; Tue, 30 Jan 2018 15:03:27 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754020AbeA3XCV (ORCPT + 99 others); Tue, 30 Jan 2018 18:02:21 -0500 Received: from terminus.zytor.com ([65.50.211.136]:49875 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752212AbeA3XCU (ORCPT ); Tue, 30 Jan 2018 18:02:20 -0500 Received: from terminus.zytor.com (localhost [127.0.0.1]) by terminus.zytor.com (8.15.2/8.15.2) with ESMTP id w0UN1AfV011452; Tue, 30 Jan 2018 15:01:10 -0800 Received: (from tipbot@localhost) by terminus.zytor.com (8.15.2/8.15.2/Submit) id w0UN1Ap8011449; Tue, 30 Jan 2018 15:01:10 -0800 Date: Tue, 30 Jan 2018 15:01:10 -0800 X-Authentication-Warning: terminus.zytor.com: tipbot set sender to tipbot@zytor.com using -f From: tip-bot for Vitaly Kuznetsov Message-ID: Cc: rkrcmar@redhat.com, tglx@linutronix.de, kys@microsoft.com, mmorsy@redhat.com, luto@kernel.org, mingo@kernel.org, pbonzini@redhat.com, Michael.H.Kelley@microsoft.com, cavery@redhat.com, vkuznets@redhat.com, haiyangz@microsoft.com, hpa@zytor.com, sthemmin@microsoft.com, rkagan@virtuozzo.com, linux-kernel@vger.kernel.org Reply-To: haiyangz@microsoft.com, cavery@redhat.com, vkuznets@redhat.com, linux-kernel@vger.kernel.org, hpa@zytor.com, sthemmin@microsoft.com, rkagan@virtuozzo.com, mmorsy@redhat.com, rkrcmar@redhat.com, tglx@linutronix.de, kys@microsoft.com, pbonzini@redhat.com, Michael.H.Kelley@microsoft.com, luto@kernel.org, mingo@kernel.org In-Reply-To: <20180124132337.30138-3-vkuznets@redhat.com> References: <20180124132337.30138-3-vkuznets@redhat.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:x86/hyperv] x86/hyperv: Add a function to read both TSC and TSC page value simulateneously Git-Commit-ID: e2768eaa1ca4fbb7b778da5615cce3dd310352e6 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline X-Spam-Status: No, score=-2.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=ham autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on terminus.zytor.com Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: e2768eaa1ca4fbb7b778da5615cce3dd310352e6 Gitweb: https://git.kernel.org/tip/e2768eaa1ca4fbb7b778da5615cce3dd310352e6 Author: Vitaly Kuznetsov AuthorDate: Wed, 24 Jan 2018 14:23:32 +0100 Committer: Thomas Gleixner CommitDate: Tue, 30 Jan 2018 23:55:32 +0100 x86/hyperv: Add a function to read both TSC and TSC page value simulateneously This is going to be used from KVM code where both TSC and TSC page value are needed. Nothing is supposed to use the function when Hyper-V code is compiled out, just BUG(). Signed-off-by: Vitaly Kuznetsov Signed-off-by: Thomas Gleixner Cc: Stephen Hemminger Cc: kvm@vger.kernel.org Cc: Radim Krčmář Cc: Haiyang Zhang Cc: "Michael Kelley (EOSG)" Cc: Roman Kagan Cc: Andy Lutomirski Cc: devel@linuxdriverproject.org Cc: Paolo Bonzini Cc: "K. Y. Srinivasan" Cc: Cathy Avery Cc: Mohammed Gamal Link: https://lkml.kernel.org/r/20180124132337.30138-3-vkuznets@redhat.com --- arch/x86/hyperv/hv_init.c | 1 + arch/x86/include/asm/mshyperv.h | 23 +++++++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c index 21f9d53..1a6c63f 100644 --- a/arch/x86/hyperv/hv_init.c +++ b/arch/x86/hyperv/hv_init.c @@ -37,6 +37,7 @@ struct ms_hyperv_tsc_page *hv_get_tsc_page(void) { return tsc_pg; } +EXPORT_SYMBOL_GPL(hv_get_tsc_page); static u64 read_hv_clock_tsc(struct clocksource *arg) { diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h index 8bf450b..6b1d4ea 100644 --- a/arch/x86/include/asm/mshyperv.h +++ b/arch/x86/include/asm/mshyperv.h @@ -325,9 +325,10 @@ static inline void hyperv_setup_mmu_ops(void) {} #ifdef CONFIG_HYPERV_TSCPAGE struct ms_hyperv_tsc_page *hv_get_tsc_page(void); -static inline u64 hv_read_tsc_page(const struct ms_hyperv_tsc_page *tsc_pg) +static inline u64 hv_read_tsc_page_tsc(const struct ms_hyperv_tsc_page *tsc_pg, + u64 *cur_tsc) { - u64 scale, offset, cur_tsc; + u64 scale, offset; u32 sequence; /* @@ -358,7 +359,7 @@ static inline u64 hv_read_tsc_page(const struct ms_hyperv_tsc_page *tsc_pg) scale = READ_ONCE(tsc_pg->tsc_scale); offset = READ_ONCE(tsc_pg->tsc_offset); - cur_tsc = rdtsc_ordered(); + *cur_tsc = rdtsc_ordered(); /* * Make sure we read sequence after we read all other values @@ -368,7 +369,14 @@ static inline u64 hv_read_tsc_page(const struct ms_hyperv_tsc_page *tsc_pg) } while (READ_ONCE(tsc_pg->tsc_sequence) != sequence); - return mul_u64_u64_shr(cur_tsc, scale, 64) + offset; + return mul_u64_u64_shr(*cur_tsc, scale, 64) + offset; +} + +static inline u64 hv_read_tsc_page(const struct ms_hyperv_tsc_page *tsc_pg) +{ + u64 cur_tsc; + + return hv_read_tsc_page_tsc(tsc_pg, &cur_tsc); } #else @@ -376,5 +384,12 @@ static inline struct ms_hyperv_tsc_page *hv_get_tsc_page(void) { return NULL; } + +static inline u64 hv_read_tsc_page_tsc(const struct ms_hyperv_tsc_page *tsc_pg, + u64 *cur_tsc) +{ + BUG(); + return U64_MAX; +} #endif #endif