From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 56773C433EF for ; Tue, 14 Jun 2022 21:59:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1357076AbiFNV7K (ORCPT ); Tue, 14 Jun 2022 17:59:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52964 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1358384AbiFNV6o (ORCPT ); Tue, 14 Jun 2022 17:58:44 -0400 Received: from mail-pf1-x44a.google.com (mail-pf1-x44a.google.com [IPv6:2607:f8b0:4864:20::44a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7772A2182C for ; Tue, 14 Jun 2022 14:58:43 -0700 (PDT) Received: by mail-pf1-x44a.google.com with SMTP id cd16-20020a056a00421000b00520785db095so4273578pfb.15 for ; Tue, 14 Jun 2022 14:58:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=VkciRITE8MX2e/fBaXePCOT9PxykPyFPZjCAcpl0DRs=; b=Dgvl2DqkyuRiJ9H+pEZA8XMbJtPmxfmzXbRsqrSCNYHx54Pm7s/Vq1hUlhJqqu/dcM jim3cYglLC/fKlXqtfKtBBjDCxl+VBMJP4q3HqNDGwfrRigBv7wpt0/9KYBxICR36Ms3 i82ojnxgaG8DCPcNyQTURnzVOuGWARafqEVFK621s05dCBUzjTZIUt8CoALAe3jxmrGX iSf0FzP07cg60UHhsMfQqDtJG8vVzsnLlBKWaweawjeNybcoeoaRkC5QdXeKrkhBjtCE Vo/P1veqNhnomHe55Dx+/cc+kvoJ3N1/frBOaNedTGyFguaxFoi+Yo6FCqUU2bXcb06h 0ddQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=VkciRITE8MX2e/fBaXePCOT9PxykPyFPZjCAcpl0DRs=; b=47i4eEctODx8MdhBo6Qx557uVe0Czrku2NmOD64aoGSAs2WO0MScVC5WH2lSNcoqUo N8Z7yFuwcT4M94hPoP+PFpUwE6GL5MCrdxn0YWUhokBN5/Ka3KVpnONGfoRiEuujd2kN ++v3F1I83bhQ4Fh8J3frWrSjS5VqUOEjd4kvVJfxGWE7uwXz9y9pHcfHQPcR577aEWtR oBvvRGPfL7vZ1iZVG38DUBv0gr3H5lVddbkR7o/SMWpVtQW+WJwwuVxbFZdd+cLBNUUf 5EhYwnz2GdDMEStVguFQkphtPcYTDLLeSQlivoBN1KCIWP91OS0eyaPB3DDkg865MIdX PjAQ== X-Gm-Message-State: AOAM533ZcBaX6XSbX1FfKXbN4xtTAEEvNrraXy5IXHUpvEN5P+4sBPls TY90S0zniDLNTUy8z5sliRV2qVFax7E= X-Google-Smtp-Source: ABdhPJwtYfSgBHJzdAZ9JEnVys0qD/gftvIVUq7SlQzKbZlVNnru294GpsA3hurbIhuRRDdC2aCPnYUMcTU= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:a03:b0:522:990c:c795 with SMTP id p3-20020a056a000a0300b00522990cc795mr6481704pfh.15.1655243922923; Tue, 14 Jun 2022 14:58:42 -0700 (PDT) Reply-To: Sean Christopherson Date: Tue, 14 Jun 2022 21:58:31 +0000 In-Reply-To: <20220614215831.3762138-1-seanjc@google.com> Message-Id: <20220614215831.3762138-6-seanjc@google.com> Mime-Version: 1.0 References: <20220614215831.3762138-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.476.g0c4daa206d-goog Subject: [PATCH 5/5] KVM: nVMX: Update vmcs12 on BNDCFGS write, not at vmcs02=>vmcs12 sync From: Sean Christopherson To: Paolo Bonzini Cc: Sean Christopherson , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Lei Wang Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Update vmcs12->guest_bndcfgs on intercepted writes to BNDCFGS from L2 instead of waiting until vmcs02 is synchronized to vmcs12. KVM always intercepts BNDCFGS accesses, so the only way the value in vmcs02 can change is via KVM's explicit VMWRITE during emulation. Signed-off-by: Sean Christopherson --- arch/x86/kvm/vmx/nested.c | 3 --- arch/x86/kvm/vmx/vmx.c | 6 ++++++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c index 496981b86f94..aad938e1e51d 100644 --- a/arch/x86/kvm/vmx/nested.c +++ b/arch/x86/kvm/vmx/nested.c @@ -4104,9 +4104,6 @@ static void sync_vmcs02_to_vmcs12_rare(struct kvm_vcpu *vcpu, vmcs12->guest_idtr_base = vmcs_readl(GUEST_IDTR_BASE); vmcs12->guest_pending_dbg_exceptions = vmcs_readl(GUEST_PENDING_DBG_EXCEPTIONS); - if ((vmx->nested.msrs.entry_ctls_high & VM_ENTRY_LOAD_BNDCFGS) || - (vmx->nested.msrs.exit_ctls_high & VM_EXIT_CLEAR_BNDCFGS)) - vmcs12->guest_bndcfgs = vmcs_read64(GUEST_BNDCFGS); vmx->nested.need_sync_vmcs02_to_vmcs12_rare = false; } diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index b3f9b8bb1fa8..1463669f7a99 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -2044,6 +2044,12 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) if (is_noncanonical_address(data & PAGE_MASK, vcpu) || (data & MSR_IA32_BNDCFGS_RSVD)) return 1; + + if (is_guest_mode(vcpu) && + ((vmx->nested.msrs.entry_ctls_high & VM_ENTRY_LOAD_BNDCFGS) || + (vmx->nested.msrs.exit_ctls_high & VM_EXIT_CLEAR_BNDCFGS))) + get_vmcs12(vcpu)->guest_bndcfgs = data; + vmcs_write64(GUEST_BNDCFGS, data); break; case MSR_IA32_UMWAIT_CONTROL: -- 2.36.1.476.g0c4daa206d-goog