From patchwork Fri Feb 17 23:10:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 58799 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp114507wrn; Fri, 17 Feb 2023 15:12:16 -0800 (PST) X-Google-Smtp-Source: AK7set+sWdnsLANPRAiEtD05H1fqcUy5341CCdM7411Mk7IG4zYbB0xs3dInmKqbeiDWq87x/AYh X-Received: by 2002:a17:907:3e29:b0:8b1:2614:edfe with SMTP id hp41-20020a1709073e2900b008b12614edfemr9123816ejc.9.1676675536389; Fri, 17 Feb 2023 15:12:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676675536; cv=none; d=google.com; s=arc-20160816; b=D8iuUbcCvF9PI2yBx0na4e4o96BasBFRY5iOTRlCbL8nQBjdIuNARA0SEuZelBkDn7 +yVgbkcQTElQfu3z6mRV/RyTiv3YmMaF9iLEQham1XXr74DRn2RN7IqVpGBx7MGGVWUL HWdnN7cbkL7Ywg3/p92SCTV8hXJV/G3w7hLKVocEbQgW4UpJRDldm9ut7/gEHUVgMNzS GdwQtaO5aHwN3suek5RyTzubToJeEFoxNcC80SYTK6XLc2j55GRjkbZfYAlbxR6ZqSSB 22hlugu45mEEw15bmaHRecHZtNUYEhDYOru/YUSGNgf3tLij+cH8oAmo4t0YXCtJBuNI rRVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=kJiU495PRP5A5yKfuE+SWyHAevKRlJJJV0/9mgyLCwE=; b=EoDfg6Dha12+yuLZr5ZVKw7f+BlZEG+iDXIxd75//1EprU1DVierM7qa0kEf/gHcnl d+VvGJF8NSy/37FzVJaMsvN669E9PyThu9/RIXh4FDGpVmgfAchVeqIDsPvLfOSmoTMJ o78zu56QEiuyXSGh7dAgJ3quG4sg4ZrHV4Ofvy5kNz1wnx5TYmfa+y1jJYqudTRPGI24 lcR5UD5kxRxXu5g3l0GGB9ZW2EFTNgQJlTj+ewnN6IPRPhHnCmvgAAl0yy2Tpkd0CP9z KE2A4N6lbEOpe2ocbSr1HOX/3xwseXEgaf0CByHdidlbppdMcBq70JHveVG8aQ5tAju1 /U8w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=gGRP8xLI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id t25-20020aa7d4d9000000b004ad0c88b55csi6486724edr.401.2023.02.17.15.11.52; Fri, 17 Feb 2023 15:12:16 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=gGRP8xLI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229931AbjBQXKr (ORCPT + 99 others); Fri, 17 Feb 2023 18:10:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56264 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229875AbjBQXKj (ORCPT ); Fri, 17 Feb 2023 18:10:39 -0500 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D4AF56A042 for ; Fri, 17 Feb 2023 15:10:32 -0800 (PST) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-5365780ce32so22556407b3.23 for ; Fri, 17 Feb 2023 15:10:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=kJiU495PRP5A5yKfuE+SWyHAevKRlJJJV0/9mgyLCwE=; b=gGRP8xLIV88x5+pesHlVSzH3eaURYkYcw9vwHWwO8otNJ8uT8UFPqg/GOY5panNWVn kEGeFIyz5hBE74qRNMuhJA2YZcEyKw5HhR40IEfFVJ4HTvJl44BCvkzPRoPslCZ5v9FP i97P7A81huZghUvo0ONVhCtFQbCKNfVmmM5gxglAxn67NPCcV8uQ/2eXhMgJ1gRGRmNw XpuDim0RFlBUosrevfxb+JUDXdtgrk8gobMn7ujgLNpTw9we+jT9m+OikOKQOpl9Auix op9EYj7vbSG3oMCuvGHNuRM7gbVKBqp7bTGgvZwEqv8quf47MYGRFfprbJalGiMKUTBL 1yaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=kJiU495PRP5A5yKfuE+SWyHAevKRlJJJV0/9mgyLCwE=; b=BV3RIwXDQVOrxXuivK7K87aYxkWQ07br9qqx30btU+CkN2FuDv2E7G0DMD7I/o90yy VFrXkbMv383cGNIPhrbgpZM8ZEf9VXTXFxtQ8xP9HExqJmMLw2FWsVLfd3VjS7ndVVbv ngJyiJ6//goKUg/k+XaI7oczHSbSbhJpnYNAW3BKqpJKwsWTPjh2F2YFr+r2ch981kdN lfPLg0GE7P+NoQpO1M+ekBHSUPdBe8M700TV2JmUPgjV8hpDIPfPPVSlxiMm7L3R8oa/ +/xDAjWzBcIa/8VpHGPIbuyHvPMzZ235UPyzBwyErLCT+RjfcsDOV55qCQAcgWFAlyQP f54Q== X-Gm-Message-State: AO0yUKWBfLY1yxPWRG0MVGVJ5DVZgEYMOXNCaq7bBTWPB7YyV2lZgkgM qpFWDGdvUs42SlEogOQeMgB2gmBVf/I= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a81:7b02:0:b0:52e:d589:c893 with SMTP id w2-20020a817b02000000b0052ed589c893mr1365013ywc.457.1676675431997; Fri, 17 Feb 2023 15:10:31 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 17 Feb 2023 15:10:13 -0800 In-Reply-To: <20230217231022.816138-1-seanjc@google.com> Mime-Version: 1.0 References: <20230217231022.816138-1-seanjc@google.com> X-Mailer: git-send-email 2.39.2.637.g21b0678d19-goog Message-ID: <20230217231022.816138-4-seanjc@google.com> Subject: [PATCH 03/12] KVM: VMX: Recompute "XSAVES enabled" only after CPUID update From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Vitaly Kuznetsov Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758121727204562615?= X-GMAIL-MSGID: =?utf-8?q?1758121727204562615?= Recompute whether or not XSAVES is enabled for the guest only if the guest's CPUID model changes instead of redoing the computation every time KVM generates vmcs01's secondary execution controls. The boot_cpu_has() and cpu_has_vmx_xsaves() checks should never change after KVM is loaded, and if they do the kernel/KVM is hosed. Opportunistically add a comment explaining _why_ XSAVES is effectively exposed to the guest if and only if XSAVE is also exposed to the guest. No functional change intended. Signed-off-by: Sean Christopherson --- arch/x86/kvm/vmx/vmx.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 47abd9101e68..b6fdb311a7d8 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -4620,19 +4620,10 @@ static u32 vmx_secondary_exec_control(struct vcpu_vmx *vmx) if (!enable_pml || !atomic_read(&vcpu->kvm->nr_memslots_dirty_logging)) exec_control &= ~SECONDARY_EXEC_ENABLE_PML; - if (cpu_has_vmx_xsaves()) { - /* Exposing XSAVES only when XSAVE is exposed */ - bool xsaves_enabled = - boot_cpu_has(X86_FEATURE_XSAVE) && - guest_cpuid_has(vcpu, X86_FEATURE_XSAVE) && - guest_cpuid_has(vcpu, X86_FEATURE_XSAVES); - - vcpu->arch.xsaves_enabled = xsaves_enabled; - + if (cpu_has_vmx_xsaves()) vmx_adjust_secondary_exec_control(vmx, &exec_control, SECONDARY_EXEC_XSAVES, - xsaves_enabled, false); - } + vcpu->arch.xsaves_enabled, false); /* * RDPID is also gated by ENABLE_RDTSCP, turn on the control if either @@ -7709,8 +7700,15 @@ static void vmx_vcpu_after_set_cpuid(struct kvm_vcpu *vcpu) { struct vcpu_vmx *vmx = to_vmx(vcpu); - /* xsaves_enabled is recomputed in vmx_compute_secondary_exec_control(). */ - vcpu->arch.xsaves_enabled = false; + /* + * XSAVES is effectively enabled if and only if XSAVE is also exposed + * to the guest. XSAVES depends on CR4.OSXSAVE, and CR4.OSXSAVE can be + * set if and only if XSAVE is supported. + */ + vcpu->arch.xsaves_enabled = cpu_has_vmx_xsaves() && + boot_cpu_has(X86_FEATURE_XSAVE) && + guest_cpuid_has(vcpu, X86_FEATURE_XSAVE) && + guest_cpuid_has(vcpu, X86_FEATURE_XSAVES); vmx_setup_uret_msrs(vmx);