Received: by 10.192.165.156 with SMTP id m28csp146261imm; Tue, 10 Apr 2018 18:28:49 -0700 (PDT) X-Google-Smtp-Source: AIpwx48XyohSCVCwQI4bBjsuXTc4nfGxUgqB+7b/H/Q4SDXzkyMCVMvLsZ90q26YmndNZwi7eCxU X-Received: by 2002:a17:902:7c0e:: with SMTP id x14-v6mr741626pll.392.1523410129317; Tue, 10 Apr 2018 18:28:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523410129; cv=none; d=google.com; s=arc-20160816; b=QpY3JsSpngbb7zQkr/kOL6MH6oIKAMCxe4Hr8llAJ/2Vnu2bb+yD2ZIFjQ69I14HB8 abDXNCGSXjswvL2UvIkjTY2SYpnez/WIE/+cryfuMp+fIPBmp0Xsr/sfKQqC85+podcW cCdHj8TNeYzhiF0yv4ogHHAvNu3v5ALr3OKJcHd9kTtamWyoCiaJnmnBY4ddRjqM/JlO iOwkJgc9QnJzHmhBlUtboD0Hmx7QzMl1WKWHYhdpyu8Ty0bQNUeszuDc4MObF247Tfkm W8UbLgCy+wmVmSOSMxiawbtv6oxKZNI4YCdZukZ607IGXXjrnXVhSPjXowY+a4YS9JAL Atig== 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:cc:to:subject :message-id:date:from:references:in-reply-to:mime-version :dkim-signature:arc-authentication-results; bh=qykJ4bZICLh3ZGfcqMKQPStDqwKrl394+nHIi4lTe4A=; b=VstPEWA1auo/pF9QK/vKs35T0Iq2CSY3zAnCvqdBmw7PS35i6N50hy9SodNxztCRaJ NykcR8Cyg4ub3+yIkF3NMQ/uty6mR6u6dApzBvFmu4mgqDPbNZ8/q0hTwAq9rxpYMk0m +7Ks9/VoZRxIQrjunHlYjy6m5puroYkj1/QgZKckK9W54KcbL+c/yZ8V+57Mtnaj8zE+ 3b8CFi2Yo9TBnm2NNc1Q2vWKTfzOz21elLUpMu3jbd+DncUcjJt8cMvSHf/tR1Kpa2cJ 3SDReC2WzYmNVqYIe1WIm2sqYrSNPwt7Kpbiaq6glmcYYsdxoAU0ulBCMXGCG5oF1/Uu JTCA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=FCS1Bvey; 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=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e6-v6si9506plt.445.2018.04.10.18.28.12; Tue, 10 Apr 2018 18:28: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=@gmail.com header.s=20161025 header.b=FCS1Bvey; 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=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752474AbeDKBYX (ORCPT + 99 others); Tue, 10 Apr 2018 21:24:23 -0400 Received: from mail-oi0-f67.google.com ([209.85.218.67]:33576 "EHLO mail-oi0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751946AbeDKBYV (ORCPT ); Tue, 10 Apr 2018 21:24:21 -0400 Received: by mail-oi0-f67.google.com with SMTP id 126-v6so194105oig.0; Tue, 10 Apr 2018 18:24:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=qykJ4bZICLh3ZGfcqMKQPStDqwKrl394+nHIi4lTe4A=; b=FCS1BveyoOPo8trqtSMVG5+N9xp5zs56C1LhcARF8nQGxr+B/N7z2PRfi7Q7D0rs5P iMa/qJr7B6+sEpJl4xkNCGGcchY3IAtcmmKsSPmLaxNowY7GNKAhcMGM5wPw1qd9hBPL NoGjgqVX1IUH2XtakB1b3u8GbXNnd8RzOGnC89H8+BdZm6Ehb/rKOqi9CQXI7+bBitAT FrkiCCAde0vwtqPUF3RbElZ8VhHQYQdfnmqABaiE39zcdXStApYTjhfbyY5TgsZIC1Ex Nxfvx10bsG2snvyxFALr/u3Dveo7XW7kXLvGDaGz7uyilvX9v0UQz9uwmpCC+JwY+fxO /fZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=qykJ4bZICLh3ZGfcqMKQPStDqwKrl394+nHIi4lTe4A=; b=JLG7f09LKad16Wv22dH5w2FMDcPcz6n9N7riKgJva3XKv2EgYTEjlZbrS5+Vl2WVfQ AJ39vjpphpG1w9myiqOSr0OiyAkdL+Gx3MAdoLcjknbN2MkTCv0dAWw0cf0vvv/4pEiu lrqQ035iCZwxAJ5zxEMwIVsizTRKTV2qat+TdXkyDm8wMmFaekiL0IUxzOXjj3v3UV5c Y9cvAgOA0YoSbYktHfXWUSmRskrvVrA214NkNxLhWSXRh0l23Spj4ebaAoqh2TQd9Eyz Wb0UwxgF7JOpsOJ4G4t2as+ymP10HbUFV5uYrqo/OQTC25uG7h+hbykkXrA8690TWtYz X1Aw== X-Gm-Message-State: ALQs6tAnzFIYe4f/1tXd1cFFbeaCqa6Z/SodbewYF0775dbMJxaZpOmr 6/5I/6qSG6yr7VngWqKG/lUsPR1htcDU3M3riFo= X-Received: by 2002:aca:4c05:: with SMTP id z5-v6mr1838467oia.58.1523409861036; Tue, 10 Apr 2018 18:24:21 -0700 (PDT) MIME-Version: 1.0 Received: by 10.74.210.78 with HTTP; Tue, 10 Apr 2018 18:24:20 -0700 (PDT) In-Reply-To: <1523362546-20909-1-git-send-email-karahmed@amazon.de> References: <1523362546-20909-1-git-send-email-karahmed@amazon.de> From: Wanpeng Li Date: Wed, 11 Apr 2018 09:24:20 +0800 Message-ID: Subject: Re: [PATCH v3] X86/VMX: Disable VMX preemption timer if MWAIT is not intercepted To: KarimAllah Ahmed Cc: kvm , LKML , Paolo Bonzini , =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= , Thomas Gleixner , Ingo Molnar , "H . Peter Anvin" , "the arch/x86 maintainers" Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 2018-04-10 20:15 GMT+08:00 KarimAllah Ahmed : > The VMX-preemption timer is used by KVM as a way to set deadlines for the > guest (i.e. timer emulation). That was safe till very recently when > capability KVM_X86_DISABLE_EXITS_MWAIT to disable intercepting MWAIT was > introduced. According to Intel SDM 25.5.1: > > """ > The VMX-preemption timer operates in the C-states C0, C1, and C2; it also > operates in the shutdown and wait-for-SIPI states. If the timer counts do= wn > to zero in any state other than the wait-for SIPI state, the logical > processor transitions to the C0 C-state and causes a VM exit; the timer > does not cause a VM exit if it counts down to zero in the wait-for-SIPI > state. The timer is not decremented in C-states deeper than C2. > """ Thanks for the patch. In addition, does it also mean we should prevent host from entering deeper C-states than C2 even if w/o disable intercept stuffs? Regards, Wanpeng Li > > Now once the guest issues the MWAIT with a c-state deeper than > C2 the preemption timer will never wake it up again since it stopped > ticking! Usually this is compensated by other activities in the system th= at > would wake the core from the deep C-state (and cause a VMExit). For > example, if the host itself is ticking or it received interrupts, etc! > > So disable the VMX-preemption timer if MWAIT is exposed to the guest! > > Cc: Paolo Bonzini > Cc: Radim Kr=C4=8Dm=C3=A1=C5=99 > Cc: Thomas Gleixner > Cc: Ingo Molnar > Cc: H. Peter Anvin > Cc: x86@kernel.org > Cc: kvm@vger.kernel.org > Cc: linux-kernel@vger.kernel.org > Signed-off-by: KarimAllah Ahmed > --- > v2 -> v3: > - return -EOPNOTSUPP before any other operation in vmx_set_hv_timer > > v1 -> v2: > - Drop everything .. just return -EOPNOTSUPP (pbonzini@) :D > --- > arch/x86/kvm/vmx.c | 14 ++++++++++---- > 1 file changed, 10 insertions(+), 4 deletions(-) > > diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c > index d2e54e7..31a4204 100644 > --- a/arch/x86/kvm/vmx.c > +++ b/arch/x86/kvm/vmx.c > @@ -11903,10 +11903,16 @@ static inline int u64_shl_div_u64(u64 a, unsign= ed int shift, > > static int vmx_set_hv_timer(struct kvm_vcpu *vcpu, u64 guest_deadline_ts= c) > { > - struct vcpu_vmx *vmx =3D to_vmx(vcpu); > - u64 tscl =3D rdtsc(); > - u64 guest_tscl =3D kvm_read_l1_tsc(vcpu, tscl); > - u64 delta_tsc =3D max(guest_deadline_tsc, guest_tscl) - guest_tsc= l; > + struct vcpu_vmx *vmx; > + u64 tscl, guest_tscl, delta_tsc; > + > + if (kvm_pause_in_guest(vcpu->kvm)) > + return -EOPNOTSUPP; > + > + vmx =3D to_vmx(vcpu); > + tscl =3D rdtsc(); > + guest_tscl =3D kvm_read_l1_tsc(vcpu, tscl); > + delta_tsc =3D max(guest_deadline_tsc, guest_tscl) - guest_tscl; > > /* Convert to host delta tsc if tsc scaling is enabled */ > if (vcpu->arch.tsc_scaling_ratio !=3D kvm_default_tsc_scaling_rat= io && > -- > 2.7.4 >