From patchwork Mon Nov 26 19:22:32 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jim Mattson X-Patchwork-Id: 10698937 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CE5E415A7 for ; Mon, 26 Nov 2018 19:22:55 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C07DF2A499 for ; Mon, 26 Nov 2018 19:22:55 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B50982A496; Mon, 26 Nov 2018 19:22:55 +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=-15.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI, USER_IN_DEF_DKIM_WL autolearn=ham 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 880AA2A453 for ; Mon, 26 Nov 2018 19:22:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726367AbeK0GR6 (ORCPT ); Tue, 27 Nov 2018 01:17:58 -0500 Received: from mail-ua1-f73.google.com ([209.85.222.73]:37027 "EHLO mail-ua1-f73.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726140AbeK0GR6 (ORCPT ); Tue, 27 Nov 2018 01:17:58 -0500 Received: by mail-ua1-f73.google.com with SMTP id k15so3215198uaq.4 for ; Mon, 26 Nov 2018 11:22:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=7OU9knRLvb/TUs5gHEKTz3UxqyUR+bk1GVsnfI8y6uY=; b=MplHYWRfjG2q9gy569y6Hpyep6ffmXDeJfPzeATQd0ZD1vKKgIdoZZxG5jgdtorGGs FXgPRX3MuTlHBs5qQh5uGMvBvdFaljRYpv/ePBS4RHHwXBXxSXxLK7ewf15mKU90AbOl IaCpoc8UCPHIhc6MRqI87UDdVlTgRAve/ItF6Frjx3FwJ7RLPt60YWjn7bc2Uel9e+5t moQn/ZboK5RpH/2vGoOuNB0Cq9AysdPFb8T6yfSc2QaMXFRx/CyHIKwW7y1XCWZ18eTe Wl5jk0J7dvvP6V5qpM9CNHlvM7wQZA3L6fiHJtAvIXl2IN4AaS5kTL4qxZs8sT1np8/X 0KVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=7OU9knRLvb/TUs5gHEKTz3UxqyUR+bk1GVsnfI8y6uY=; b=VtoD8YMKtnPk73d5C7n5Qt9EmrAM3fcQ4+a4BHdOUIPlPB82CI2zmfHTF2S/pQAEpA NQgacIYlwlfInOzqj+laPBlc1HKddu+eQA5nFzxJpmPztuVN529Mxc9WrFxWue/dwb9k TTcxPSIibz6IVWfEqlRYmD3e24/YX0n7c7X3R4g9c4PR/7tVqtX9PxfQBkYzW3WZARmu JHPdnrXHNe262QKZGEz9zScR0YGGL695eNhx7V2+UEmivKuibQMXZxi3RAQeiIdiU/Kd ilbWCY0bX6b2ByruMs+d+ByRL9wUXTm9Ul7GR0ic2SyiSrJrf1MwLHbj15RovSXJWJie cxiQ== X-Gm-Message-State: AA+aEWY28qX+URIBlXHbe/UQIJgG5CGGe34rOpcL0grEmQCPXUd0s2zX BFK2wG9avMn3Jg7rqbFmgmf4Db4jKNIWN0+t4iYMGlgPkMmTOT8IGqtqpbD+p+HQ7gUucnkH9ZY u3urpvcgskF5iA4Wev6ZORztP0mi4S2WEYjS2praIKWph9Tp0QJFNV9BbHS1FxhA= X-Google-Smtp-Source: AFSGD/UVx+0XXfwnH08Gh/qF65zvD3XusqCXgrJcLFlSTr1wd1mWTX1dqUzGVyC67/uDQ1RFOoYKQ3whgpLq3g== X-Received: by 2002:a1f:abcf:: with SMTP id u198mr7791036vke.21.1543260171243; Mon, 26 Nov 2018 11:22:51 -0800 (PST) Date: Mon, 26 Nov 2018 11:22:32 -0800 In-Reply-To: Message-Id: <20181126192232.139569-1-jmattson@google.com> Mime-Version: 1.0 References: X-Mailer: git-send-email 2.20.0.rc0.387.gc7a69e6b6c-goog Subject: [PATCH v2 1/2] kvm: nVMX: NMI-window exiting should wake L2 from HLT From: Jim Mattson To: kvm@vger.kernel.org Cc: Sean Christopherson , Jim Mattson , Peter Shier Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP According to the SDM, "NMI-window exiting" VM-exits wake a logical processor from the same inactive states as would an NMI. Specifically, they wake a logical processor from the shutdown state and from the states entered using the HLT and MWAIT instructions. Fixes: 6dfacadd5858 ("KVM: nVMX: Add support for activity state HLT") Signed-off-by: Jim Mattson Reviewed-by: Peter Shier --- arch/x86/kvm/vmx.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index d78fe0abf9ac..358e96f0c21d 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -13489,6 +13489,15 @@ static int nested_vmx_enter_non_root_mode(struct kvm_vcpu *vcpu, return 1; } +static bool nested_vmx_nmi_window_exit(struct vmcs12 *vmcs12) +{ + return (vmcs12->cpu_based_vm_exec_control & + CPU_BASED_VIRTUAL_NMI_PENDING) && + vmcs12->guest_activity_state != GUEST_ACTIVITY_WAIT_SIPI && + !(vmcs12->guest_interruptibility_info & + (GUEST_INTR_STATE_NMI | GUEST_INTR_STATE_MOV_SS)); +} + /* * nested_vmx_run() handles a nested entry, i.e., a VMLAUNCH or VMRESUME on L1 * for running an L2 nested guest. @@ -13580,11 +13589,13 @@ static int nested_vmx_run(struct kvm_vcpu *vcpu, bool launch) nested_cache_shadow_vmcs12(vcpu, vmcs12); /* - * If we're entering a halted L2 vcpu and the L2 vcpu won't be woken - * by event injection, halt vcpu. + * If we're entering a halted L2 vcpu and the L2 vcpu won't be + * awakened by event injection or by an NMI-window VM-exit, + * halt the vcpu. */ if ((vmcs12->guest_activity_state == GUEST_ACTIVITY_HLT) && - !(vmcs12->vm_entry_intr_info_field & INTR_INFO_VALID_MASK)) { + !(vmcs12->vm_entry_intr_info_field & INTR_INFO_VALID_MASK) && + !nested_vmx_nmi_window_exit(vmcs12)) { vmx->nested.nested_run_pending = 0; return kvm_vcpu_halt(vcpu); } From patchwork Mon Nov 26 19:23:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jim Mattson X-Patchwork-Id: 10698939 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7BCE617D5 for ; Mon, 26 Nov 2018 19:23:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 685A129F2E for ; Mon, 26 Nov 2018 19:23:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5C71729F3E; Mon, 26 Nov 2018 19:23:46 +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=-15.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI, USER_IN_DEF_DKIM_WL autolearn=ham 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 06DBF29F3E for ; Mon, 26 Nov 2018 19:23:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726282AbeK0GSu (ORCPT ); Tue, 27 Nov 2018 01:18:50 -0500 Received: from mail-io1-f74.google.com ([209.85.166.74]:41717 "EHLO mail-io1-f74.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726254AbeK0GSu (ORCPT ); Tue, 27 Nov 2018 01:18:50 -0500 Received: by mail-io1-f74.google.com with SMTP id k3-v6so19180004ioq.8 for ; Mon, 26 Nov 2018 11:23:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=iExRyCA63sP+9ISuTI81IDbOXTsvtmoTOXNGY995AQ0=; b=E+c7TAY+0IsfXMXIsiSSEplsx6V0ja3XbPscDR2M98l9c8Yt+wv5F/W33HERFdmGBb ww3RfJpXn13bqlSjFc0vUDnffE9WPs0V8s9hn+kIuZr+MR9u6wCVSuYk7zJN0GPdr5eq dmpJ9KoT39E6D4z56DGSWeOkDix1V9cuvgL3l+SSdhGdnoYJeT5LACYhIJuxPGwuPGsT OoQi+1Z0MNCftzZUNY5f40gSTzBnu4bZVsAB9iiKpwJ4zB6xpA6E7jbgs+DliXx+LWwv x0nRhMPwyRYzej2k2v1QaNjdS1LTk+LutXteD5R+GgEb1cmOPx5WZmzuzHBI7GKjOyrn z6yQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=iExRyCA63sP+9ISuTI81IDbOXTsvtmoTOXNGY995AQ0=; b=sLyKI5VLohR61+n4vpygIJdPhAO2mV0vClquteG+hKmWpqDHh6q1fKhbIzCOoDWHAs eEBm9K03eiKmNhXqIb1wLVA6hpq21ZrmSN1RPoRRTn+69Ovgb262oghEHhctCMTasdu9 NbLedV5AztAC+voAR1W7OWA/VFDC/QWGNUNHCSr/8t87azO3xsX6K51vyRIC9WKuBy/P ZilgGw1G03SuhcFmDxVCsBW4yPXI4SQdRNBD0wDf3GGip8K0YbjbofP8xEXPkuzcwIRJ MEtPD6dPd1IGNsG7Zk19wBevHvtVtcAfyqgeh5M0reWe2OMpcFh1GP55wFVG+eEq3dtw 0mlQ== X-Gm-Message-State: AA+aEWZf6oDXTqMWwKksWTmL6EUdoiRdRfJKDdAPCHugbDwvvgDXevoV L7cffrsle0gxczU4tZJMNQHcDFsPZNGoMfF6wpqINy9FRKs5dlNuyfK3V7kuBFzzNxW4wPZNQlH A4bIHYWJiYk+GreTM6mhCPd+ZV9KlBZOuHJA5YW5a/uLfde79d8N9Ky7eTn9Tghw= X-Google-Smtp-Source: AFSGD/VPBh9ULRq8dZDkZCoIqTiqfauawxmnjL2p+DK1CZs4gvbruLocXtUsHXutSgauDQlUsacWo/UzoRXcmw== X-Received: by 2002:a24:6c93:: with SMTP id w141mr3902871itb.35.1543260223626; Mon, 26 Nov 2018 11:23:43 -0800 (PST) Date: Mon, 26 Nov 2018 11:23:31 -0800 In-Reply-To: <20181126163746.GD25719@linux.intel.com> Message-Id: <20181126192331.140309-1-jmattson@google.com> Mime-Version: 1.0 References: <20181126163746.GD25719@linux.intel.com> X-Mailer: git-send-email 2.20.0.rc0.387.gc7a69e6b6c-goog Subject: [PATCH v2 2/2] kvm: nVMX: interrupt-window exiting should wake L2 from HLT From: Jim Mattson To: kvm@vger.kernel.org Cc: Sean Christopherson , Jim Mattson , Peter Shier Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP According to the SDM, "interrupt-window exiting" VM-exits wake a logical processor from the same inactive states as would an external interrupt. Specifically, they wake a logical processor from the states entered using the HLT and MWAIT instructions. Fixes: 6dfacadd5858 ("KVM: nVMX: Add support for activity state HLT") Signed-off-by: Jim Mattson Reviewed-by: Peter Shier Signed-off-by: Jim Mattson Reviewed-by: Peter Shier Signed-off-by: Radim Krčmář --- arch/x86/kvm/vmx.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 358e96f0c21d..a29921b216f5 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -13498,6 +13498,16 @@ static bool nested_vmx_nmi_window_exit(struct vmcs12 *vmcs12) (GUEST_INTR_STATE_NMI | GUEST_INTR_STATE_MOV_SS)); } +static bool nested_vmx_intr_window_exit(struct vmcs12 *vmcs12) +{ + return (vmcs12->cpu_based_vm_exec_control & + CPU_BASED_VIRTUAL_INTR_PENDING) && + vmcs12->guest_activity_state != GUEST_ACTIVITY_WAIT_SIPI && + (vmcs12->guest_rflags & X86_EFLAGS_IF) && + !(vmcs12->guest_interruptibility_info & + (GUEST_INTR_STATE_STI | GUEST_INTR_STATE_MOV_SS)); +} + /* * nested_vmx_run() handles a nested entry, i.e., a VMLAUNCH or VMRESUME on L1 * for running an L2 nested guest. @@ -13590,12 +13600,13 @@ static int nested_vmx_run(struct kvm_vcpu *vcpu, bool launch) /* * If we're entering a halted L2 vcpu and the L2 vcpu won't be - * awakened by event injection or by an NMI-window VM-exit, - * halt the vcpu. + * awakened by event injection or by an NMI-window VM-exit or + * by an interrupt-window VM-exit, halt the vcpu. */ if ((vmcs12->guest_activity_state == GUEST_ACTIVITY_HLT) && !(vmcs12->vm_entry_intr_info_field & INTR_INFO_VALID_MASK) && - !nested_vmx_nmi_window_exit(vmcs12)) { + !nested_vmx_nmi_window_exit(vmcs12) && + !nested_vmx_intr_window_exit(vmcs12)) { vmx->nested.nested_run_pending = 0; return kvm_vcpu_halt(vcpu); }