From patchwork Fri Apr 13 11:23:27 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 10339915 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 0814960329 for ; Fri, 13 Apr 2018 11:26:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0F3B0286F9 for ; Fri, 13 Apr 2018 11:26:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 02BCE2873A; Fri, 13 Apr 2018 11:26:43 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 65675286F9 for ; Fri, 13 Apr 2018 11:26:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754510AbeDMLXm (ORCPT ); Fri, 13 Apr 2018 07:23:42 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:32887 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754491AbeDMLXh (ORCPT ); Fri, 13 Apr 2018 07:23:37 -0400 Received: by mail-wm0-f68.google.com with SMTP id o23so6607669wmf.0; Fri, 13 Apr 2018 04:23:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=TFS6EYVZPWf64W0ibDfY9ZZiz84OHLXDs/AOLNZfZaU=; b=I4Hv35cKlEn7ljLX3Wxj4yOHMOd10EfZHHE/TDP5yFPcTSVQlXcBdb/h6D1V/vLcAQ oUGZlxDp3C/ehorNlfLP3gLgKgkYn22TmJk0B7RA0kwi+v8qk1wSCnM0d9GtnoYPoDKv En9VKcCXATqVQ95kxvQxEm/N9Sx+okwr2TjmSsEHWTvO/I+9YW3YD+3xLjeOlTc27SA5 aK5qlKb4M7A34B4/O/OturGmLfbb5pxMfw6p8/6DnQUAP91culRHQS7XVFzUT/qCjjcW jt1MqZ0kly0QAPSxKFCHjEoOVL3v+B3N5NYGm2U2Ho/OrKHOhjXliDVEZyteRAGQO67w AFQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=TFS6EYVZPWf64W0ibDfY9ZZiz84OHLXDs/AOLNZfZaU=; b=eBK97u+mKhUO4UM5STtqG3i4q83BQeRfiHu6FAU5IBW8Bv3/AfDvOhLkgDp3KNfM7w k3GJdE3TSkOmeui3GjcfBkZA0eXSPfBzskvgyi2pz6HHCLRxwr/Rv/4pTG9kuJcGicKX W7K20Q4PlwYZ4FKE8/uHERb8V/+2W6SEFlgYrue+eXw6GH3k9s0gGv8LK0h20M3mQwGC 0J9mg7Gr+zZzNE6O3QNibvrrtIF53IAxE+gWDAt5d+ZyI8NgnaKH2QP1NvNCJyIw1s8z KHGO9ivgCgcFhUD5tzlZg1+J/RAOvbb1WVUWHM8aOZFExEXYw6rssiqRxg0W4ZPZhL4l NJOA== X-Gm-Message-State: ALQs6tC0fTpI5whItpVuRBKs6+wJWLZBOmAlM0gMXRxGj6aOzPXDV7Yb cK4HkNNTmiQyFh34dLfRIF/Mt8I0 X-Google-Smtp-Source: AIpwx49DMiRJk6AOnkya/W990/7gVdkyMvcGLxyOEn/6vkdUUa+1YKs9Gb2/HUPNHl2rQ3pEU7hwkw== X-Received: by 10.28.91.209 with SMTP id p200mr3153713wmb.11.1523618615687; Fri, 13 Apr 2018 04:23:35 -0700 (PDT) Received: from 640k.lan ([82.84.121.178]) by smtp.gmail.com with ESMTPSA id n49sm9372900wrn.50.2018.04.13.04.23.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Apr 2018 04:23:35 -0700 (PDT) From: Paolo Bonzini To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: karahmed@amazon.de, jmattson@google.com, rkrcmar@redhat.com Subject: [PATCH 2/2] kvm: x86: move MSR_IA32_TSC handling to x86.c Date: Fri, 13 Apr 2018 13:23:27 +0200 Message-Id: <1523618608-30574-3-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1523618608-30574-1-git-send-email-pbonzini@redhat.com> References: <1523618608-30574-1-git-send-email-pbonzini@redhat.com> Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This is not specific to Intel/AMD anymore. The TSC offset is available in vcpu->arch.tsc_offset. Signed-off-by: Paolo Bonzini --- arch/x86/kvm/svm.c | 9 --------- arch/x86/kvm/vmx.c | 20 -------------------- arch/x86/kvm/x86.c | 6 ++++++ 3 files changed, 6 insertions(+), 29 deletions(-) diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index ea7c6d29aca5..e636ef8cf3ce 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -4050,12 +4050,6 @@ static int svm_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) struct vcpu_svm *svm = to_svm(vcpu); switch (msr_info->index) { - case MSR_IA32_TSC: { - msr_info->data = svm->vmcb->control.tsc_offset + - kvm_scale_tsc(vcpu, rdtsc()); - - break; - } case MSR_STAR: msr_info->data = svm->vmcb->save.star; break; @@ -4208,9 +4202,6 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr) svm->vmcb->save.g_pat = data; mark_dirty(svm->vmcb, VMCB_NPT); break; - case MSR_IA32_TSC: - kvm_write_tsc(vcpu, msr); - break; case MSR_IA32_SPEC_CTRL: if (!msr->host_initiated && !guest_cpuid_has(vcpu, X86_FEATURE_IBRS)) diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 6553419202ee..e26c1f1c0a08 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -2886,20 +2886,6 @@ static u64 vmx_read_l1_tsc_offset(struct kvm_vcpu *vcpu) } /* - * reads and returns guest's timestamp counter "register" - * guest_tsc = (host_tsc * tsc multiplier) >> 48 + tsc_offset - * -- Intel TSC Scaling for Virtualization White Paper, sec 1.3 - */ -static u64 guest_read_tsc(struct kvm_vcpu *vcpu) -{ - u64 host_tsc, tsc_offset; - - host_tsc = rdtsc(); - tsc_offset = vmcs_read64(TSC_OFFSET); - return kvm_scale_tsc(vcpu, host_tsc) + tsc_offset; -} - -/* * writes 'offset' into guest's timestamp counter offset register */ static void vmx_write_tsc_offset(struct kvm_vcpu *vcpu, u64 offset) @@ -3529,9 +3515,6 @@ static int vmx_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) #endif case MSR_EFER: return kvm_get_msr_common(vcpu, msr_info); - case MSR_IA32_TSC: - msr_info->data = guest_read_tsc(vcpu); - break; case MSR_IA32_SPEC_CTRL: if (!msr_info->host_initiated && !guest_cpuid_has(vcpu, X86_FEATURE_IBRS) && @@ -3651,9 +3634,6 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) return 1; vmcs_write64(GUEST_BNDCFGS, data); break; - case MSR_IA32_TSC: - kvm_write_tsc(vcpu, msr_info); - break; case MSR_IA32_SPEC_CTRL: if (!msr_info->host_initiated && !guest_cpuid_has(vcpu, X86_FEATURE_IBRS) && diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 3f3fba58c960..51ecd381793b 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -2364,6 +2364,9 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) return 1; vcpu->arch.smbase = data; break; + case MSR_IA32_TSC: + kvm_write_tsc(vcpu, msr_info); + break; case MSR_SMI_COUNT: if (!msr_info->host_initiated) return 1; @@ -2607,6 +2610,9 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) case MSR_IA32_UCODE_REV: msr_info->data = vcpu->arch.microcode_version; break; + case MSR_IA32_TSC: + msr_info->data = kvm_scale_tsc(vcpu, rdtsc()) + vcpu->arch.tsc_offset; + break; case MSR_MTRRcap: case 0x200 ... 0x2ff: return kvm_mtrr_get_msr(vcpu, msr_info->index, &msr_info->data);