From nobody Thu Sep 11 16:10:51 2025 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 E6877C04FE1 for ; Tue, 15 Aug 2023 20:38:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238840AbjHOUi1 (ORCPT ); Tue, 15 Aug 2023 16:38:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33634 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238933AbjHOUh6 (ORCPT ); Tue, 15 Aug 2023 16:37:58 -0400 Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 34DDD2107 for ; Tue, 15 Aug 2023 13:37:34 -0700 (PDT) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-58c8b2d6784so483827b3.3 for ; Tue, 15 Aug 2023 13:37:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1692131830; x=1692736630; 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=s1GLCOlFiW6CQnO93B56EozlQrNd+mwfhWAJrix4ffg=; b=sX6duUPVKTWrl6TGRXZZBeMIaUfI/z3CZ7snFkRb7nF5HcF5GKi8nUIa0a+ZZe98G5 YOY5/bnBmvfdM5eVFfAOUq6NQpUDEVyfR60aa7QKicWeOT3W+Mz9E9XdteNiUjgaY6nN PFRRm72TPw9L2WbQkL25hRm277Qy4KDUbfzuKfAoLxdUWasJQ+YPH69pIhz8n38YOh9B ErytJO0InzbHLi9jerqKs8kw2k2MLcf9WxoJSYmstHp1EpZPKBXoM7SAaf+HKals1z2a Hv9liacy0Zlge728+snQJt0uH11qLJjNOAyO5H5Z4x25PQbR6yvxpl/pRkBYN2H5JWCX zyVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692131830; x=1692736630; 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=s1GLCOlFiW6CQnO93B56EozlQrNd+mwfhWAJrix4ffg=; b=cFFKb2UOV2Yu4fj86m9KquUWbGMCThCckSI/fP82hDP5aYCQOEVEw4b0WfvsXqI8Mh aCwtebhURnFz2lRy/kpAWESPrqHboFICoBKpQkbT4CHG46+y+nLd9h0bvPRXyYOrN0lc 1eROq58QdY6fgzaK0LA99fJQNsqCCFOVcz8otGJKVB2/1Yi9BGGXOGjwJFMKdJqHUTWw AOLMmCbsZ2j0kHwnycal2udQ/bHaCpJpjJgCUTlvVtwkLdcmvM7z85xjusU1e95KXF3E Fv7yA0P9ga9CH3U9i+WQ8YUxxgxBcjRa34+d0yGMJy0ilK1RQNpcivdxcseFggVQ1CX+ usGw== X-Gm-Message-State: AOJu0Ywy4uo+2Sg+zF9XkQDJ420b5TXQVssrW128bJM5Vil8qa2qcnQK kWqC64w6t93Q71vPVyQNcnyWnDVJUvI= X-Google-Smtp-Source: AGHT+IGjAeNOX8rZMkKgBuzpvt8zkwrUL40wHSa04a5WK3p/snxKbM21F/hzv/bjKwlN/iFvurhIqpM6jZY= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a81:ad60:0:b0:562:837:122f with SMTP id l32-20020a81ad60000000b005620837122fmr189901ywk.9.1692131830148; Tue, 15 Aug 2023 13:37:10 -0700 (PDT) Reply-To: Sean Christopherson Date: Tue, 15 Aug 2023 13:36:46 -0700 In-Reply-To: <20230815203653.519297-1-seanjc@google.com> Mime-Version: 1.0 References: <20230815203653.519297-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.694.ge786442a9b-goog Message-ID: <20230815203653.519297-9-seanjc@google.com> Subject: [PATCH v3 08/15] KVM: nSVM: Use KVM-governed feature framework to track "NRIPS enabled" From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Vitaly Kuznetsov Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Zeng Guang , Yuan Yao Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Track "NRIPS exposed to L1" via a governed feature flag instead of using a dedicated bit/flag in vcpu_svm. No functional change intended. Signed-off-by: Sean Christopherson Reviewed-by: Yuan Yao --- arch/x86/kvm/governed_features.h | 1 + arch/x86/kvm/svm/nested.c | 6 +++--- arch/x86/kvm/svm/svm.c | 4 +--- arch/x86/kvm/svm/svm.h | 1 - 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/arch/x86/kvm/governed_features.h b/arch/x86/kvm/governed_featu= res.h index 22446614bf49..722b66af412c 100644 --- a/arch/x86/kvm/governed_features.h +++ b/arch/x86/kvm/governed_features.h @@ -8,6 +8,7 @@ BUILD_BUG() KVM_GOVERNED_X86_FEATURE(GBPAGES) KVM_GOVERNED_X86_FEATURE(XSAVES) KVM_GOVERNED_X86_FEATURE(VMX) +KVM_GOVERNED_X86_FEATURE(NRIPS) =20 #undef KVM_GOVERNED_X86_FEATURE #undef KVM_GOVERNED_FEATURE diff --git a/arch/x86/kvm/svm/nested.c b/arch/x86/kvm/svm/nested.c index 3342cc4a5189..9092f3f8dccf 100644 --- a/arch/x86/kvm/svm/nested.c +++ b/arch/x86/kvm/svm/nested.c @@ -716,7 +716,7 @@ static void nested_vmcb02_prepare_control(struct vcpu_s= vm *svm, * what a nrips=3D0 CPU would do (L1 is responsible for advancing RIP * prior to injecting the event). */ - if (svm->nrips_enabled) + if (guest_can_use(vcpu, X86_FEATURE_NRIPS)) vmcb02->control.next_rip =3D svm->nested.ctl.next_rip; else if (boot_cpu_has(X86_FEATURE_NRIPS)) vmcb02->control.next_rip =3D vmcb12_rip; @@ -726,7 +726,7 @@ static void nested_vmcb02_prepare_control(struct vcpu_s= vm *svm, svm->soft_int_injected =3D true; svm->soft_int_csbase =3D vmcb12_csbase; svm->soft_int_old_rip =3D vmcb12_rip; - if (svm->nrips_enabled) + if (guest_can_use(vcpu, X86_FEATURE_NRIPS)) svm->soft_int_next_rip =3D svm->nested.ctl.next_rip; else svm->soft_int_next_rip =3D vmcb12_rip; @@ -1026,7 +1026,7 @@ int nested_svm_vmexit(struct vcpu_svm *svm) if (vmcb12->control.exit_code !=3D SVM_EXIT_ERR) nested_save_pending_event_to_vmcb12(svm, vmcb12); =20 - if (svm->nrips_enabled) + if (guest_can_use(vcpu, X86_FEATURE_NRIPS)) vmcb12->control.next_rip =3D vmcb02->control.next_rip; =20 vmcb12->control.int_ctl =3D svm->nested.ctl.int_ctl; diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index d67f6e23dcd2..c8b97cb3138c 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -4288,9 +4288,7 @@ static void svm_vcpu_after_set_cpuid(struct kvm_vcpu = *vcpu) guest_cpuid_has(vcpu, X86_FEATURE_XSAVE)) kvm_governed_feature_set(vcpu, X86_FEATURE_XSAVES); =20 - /* Update nrips enabled cache */ - svm->nrips_enabled =3D kvm_cpu_cap_has(X86_FEATURE_NRIPS) && - guest_cpuid_has(vcpu, X86_FEATURE_NRIPS); + kvm_governed_feature_check_and_set(vcpu, X86_FEATURE_NRIPS); =20 svm->tsc_scaling_enabled =3D tsc_scaling && guest_cpuid_has(vcpu, X86_FEA= TURE_TSCRATEMSR); svm->lbrv_enabled =3D lbrv && guest_cpuid_has(vcpu, X86_FEATURE_LBRV); diff --git a/arch/x86/kvm/svm/svm.h b/arch/x86/kvm/svm/svm.h index 5115b35a4d31..e147f2046ffa 100644 --- a/arch/x86/kvm/svm/svm.h +++ b/arch/x86/kvm/svm/svm.h @@ -259,7 +259,6 @@ struct vcpu_svm { bool soft_int_injected; =20 /* optional nested SVM features that are enabled for this guest */ - bool nrips_enabled : 1; bool tsc_scaling_enabled : 1; bool v_vmload_vmsave_enabled : 1; bool lbrv_enabled : 1; --=20 2.41.0.694.ge786442a9b-goog