Received: by 10.192.165.156 with SMTP id m28csp2083980imm; Thu, 12 Apr 2018 08:20:49 -0700 (PDT) X-Google-Smtp-Source: AIpwx492t/17EmQ+8KwctuJ/Z6+EtWnMLI0qAolTCXiE3/Kh/zUL4+LtSRlwk7e4V4lEBl8pBSsD X-Received: by 2002:a17:902:3381:: with SMTP id b1-v6mr1511713plc.214.1523546449345; Thu, 12 Apr 2018 08:20:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523546449; cv=none; d=google.com; s=arc-20160816; b=WUosHXDbk+Sg7dcTAIfhx8HD0fVqOSj+Y5JXPHqbHhKJjmq17jp9oGmvnB72XJ17nk AMfo2mJcp1acJltfki/wqj6juyAqwcFvBV91js93fTUbGkNpekQXCUeekfs/jeQGdY/b BGinV/IQxaV51zjRjSMSuDZa57cIg4ovYDEciRuPr3T8lLOcGp9vncUxDmMN/N5uPls4 5zaRDiXdcY/bjtmZKM00Z4DaBsR4HGYCpmNRmKz7MAAAEPD55V6OX9++Im+zGsHLdaYf vMzQRGnioCidTMQzAodq0RcA+wFFec8O3DjEtCA+JDhkAHCstbj+G6NTvK+CvJ4eIU2g 48NQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=AYvcWmCJqmS7y4qJ2gfiOlVhiRiedHIKdKvluTQ8PdU=; b=Or7IKirHvWBxG2ZtF6x0ivfQNsq4lJ9e4c7lW6iMmqvhjkclyvffbInHPS2m/rZVYe TgULY7FcpGAhnUDj0Oa3xZprEzZS7bGDmfCMAqdV7K4jYV+D+BbwtgSwOoZmC1rDf5xh jNAPa+tHBcK7nzA6DY4eZV8p/OJa6qkn2+X/zaWFFbLbIdC3put6VdhOhpZMeuO03AKr VimD7UXfQbiicJOq7paopWP0xurWqCiCA2mDAe5RdqPcEvFATsAiapbNgDLpMMroN8rc /wZlnfkttVUksiWKLxE+X318TdIAgEnrCADaXIiqJ/1R9Z3sUgrkixDZwombc4ktOCgW y5DQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amazon.de header.s=amazon201209 header.b=XZJ7XQzI; 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; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amazon.de Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a123si2443306pgc.43.2018.04.12.08.20.11; Thu, 12 Apr 2018 08:20:49 -0700 (PDT) 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; dkim=pass header.i=@amazon.de header.s=amazon201209 header.b=XZJ7XQzI; 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; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amazon.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754087AbeDLPM5 (ORCPT + 99 others); Thu, 12 Apr 2018 11:12:57 -0400 Received: from smtp-fw-6002.amazon.com ([52.95.49.90]:60365 "EHLO smtp-fw-6002.amazon.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753443AbeDLPMv (ORCPT ); Thu, 12 Apr 2018 11:12:51 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.de; i=@amazon.de; q=dns/txt; s=amazon201209; t=1523545971; x=1555081971; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=AYvcWmCJqmS7y4qJ2gfiOlVhiRiedHIKdKvluTQ8PdU=; b=XZJ7XQzIfwlhayp7VoGswncWrIiKINam+pZSjZAovL9Pa0g2pLqIfpnP 3QAYf4WcK9uSsQ0zz/mBkonFYd+GQVgTzd6gpnfWg2+9/1RP5tRvJcUFo lgvdPpwR3PBnKJQW/TZ2t+DDbcXl3g84eDHwfSU7GgkOu2abZjFJY0FNw 4=; X-IronPort-AV: E=Sophos;i="5.48,442,1517875200"; d="scan'208";a="339642646" Received: from iad6-co-svc-p1-lb1-vlan3.amazon.com (HELO email-inbound-relay-2c-6f38efd9.us-west-2.amazon.com) ([10.124.125.6]) by smtp-border-fw-out-6002.iad6.amazon.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 12 Apr 2018 15:12:49 +0000 Received: from u54e1ad5160425a4b64ea.ant.amazon.com (pdx2-ws-svc-lb17-vlan2.amazon.com [10.247.140.66]) by email-inbound-relay-2c-6f38efd9.us-west-2.amazon.com (8.14.7/8.14.7) with ESMTP id w3CFCiFw108670 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 12 Apr 2018 15:12:46 GMT Received: from u54e1ad5160425a4b64ea.ant.amazon.com (localhost [127.0.0.1]) by u54e1ad5160425a4b64ea.ant.amazon.com (8.15.2/8.15.2/Debian-3) with ESMTP id w3CFChWk028118; Thu, 12 Apr 2018 17:12:44 +0200 Received: (from karahmed@localhost) by u54e1ad5160425a4b64ea.ant.amazon.com (8.15.2/8.15.2/Submit) id w3CFChoN028113; Thu, 12 Apr 2018 17:12:43 +0200 From: KarimAllah Ahmed To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: KarimAllah Ahmed , Jim Mattson , Paolo Bonzini , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= Subject: [PATCH 1/2] X86/KVM: Properly restore 'tsc_offset' when running an L2 guest Date: Thu, 12 Apr 2018 17:12:37 +0200 Message-Id: <1523545958-28059-1-git-send-email-karahmed@amazon.de> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When the TSC MSR is captured while an L2 guest is running then restored, the 'tsc_offset' ends up capturing the L02 TSC_OFFSET instead of the L01 TSC_OFFSET. So ensure that this is compensated for when storing the value. Cc: Jim Mattson Cc: Paolo Bonzini Cc: Radim Krčmář Cc: kvm@vger.kernel.org Cc: linux-kernel@vger.kernel.org Signed-off-by: KarimAllah Ahmed --- arch/x86/kvm/vmx.c | 12 +++++++++--- arch/x86/kvm/x86.c | 1 - 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index cff2f50..2f57571 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -2900,6 +2900,8 @@ static u64 guest_read_tsc(struct kvm_vcpu *vcpu) */ static void vmx_write_tsc_offset(struct kvm_vcpu *vcpu, u64 offset) { + u64 l1_tsc_offset = 0; + if (is_guest_mode(vcpu)) { /* * We're here if L1 chose not to trap WRMSR to TSC. According @@ -2908,16 +2910,20 @@ static void vmx_write_tsc_offset(struct kvm_vcpu *vcpu, u64 offset) * to the newly set TSC to get L2's TSC. */ struct vmcs12 *vmcs12; + /* recalculate vmcs02.TSC_OFFSET: */ vmcs12 = get_vmcs12(vcpu); - vmcs_write64(TSC_OFFSET, offset + - (nested_cpu_has(vmcs12, CPU_BASED_USE_TSC_OFFSETING) ? - vmcs12->tsc_offset : 0)); + + l1_tsc_offset = nested_cpu_has(vmcs12, CPU_BASED_USE_TSC_OFFSETING) ? + vmcs12->tsc_offset : 0; + vmcs_write64(TSC_OFFSET, offset + l1_tsc_offset); } else { trace_kvm_write_tsc_offset(vcpu->vcpu_id, vmcs_read64(TSC_OFFSET), offset); vmcs_write64(TSC_OFFSET, offset); } + + vcpu->arch.tsc_offset = offset - l1_tsc_offset; } /* diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index ac42c85..1a2ed92 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -1539,7 +1539,6 @@ EXPORT_SYMBOL_GPL(kvm_read_l1_tsc); static void kvm_vcpu_write_tsc_offset(struct kvm_vcpu *vcpu, u64 offset) { kvm_x86_ops->write_tsc_offset(vcpu, offset); - vcpu->arch.tsc_offset = offset; } static inline bool kvm_check_tsc_unstable(void) -- 2.7.4