From patchwork Sat Jul 29 01:16:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127985 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp816634vqg; Fri, 28 Jul 2023 20:03:12 -0700 (PDT) X-Google-Smtp-Source: APBJJlE13x+IzX8wziXGCvvTIbl0oGzPslzRXeEoRDdWJRXNiXC4/rReyCooSoIOnob3EMC83nh8 X-Received: by 2002:a05:6a20:9185:b0:131:52ce:5148 with SMTP id v5-20020a056a20918500b0013152ce5148mr4443270pzd.39.1690599792137; Fri, 28 Jul 2023 20:03:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690599792; cv=none; d=google.com; s=arc-20160816; b=HUvroMgChxDmGuYlGNDZq4zdi1YswRX0dD/wxpaRfEg1tN8JCR1rKuKwH7fQj+ehO0 c+HuVf/Jfdfb80l7lbUiljn70FYjNTCcX8vrykCCiAFqNxr83sUkHJOzKArjd4ZkCv7p fkm6ha8byDoULZa1XO/TxdBAOGt0sD3W83WAY0j5HcMgz9dzrr4iKd1HpMEjqalIXqEL kVIS4++M90I0QP7mQFp0tfFKMMHArBsPIPdnjThEnjfhXV3qWs7Bsm4tPc7oh+3w9/t5 KxglKdfvvTp1JrDA4or2EZSGxbdiScltqLxUe332zda5vxVhRro2wdNur1eAIyn/qabV R0lQ== 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=EGn34XFQPv+N6od2XkKlclrB8ffPqa49xtGxfrYWBec=; fh=8Mc5uyvARtESo7rBGdZxKoor3rxsuqGYA/iIBYLTTUU=; b=nPl/zDMHJTa4Vg97rLnIWl526ceMiBGvSskzfP52JL8VUHmUa61taR8bdSrGACzf6z BR6FeHxNUeHaDMraC5PGOR7bcWYTMn0YDzJB7XirKNYUdyLpfoX1WBtcVgbgEcGOekfd 2A9PeVFPNJRCmw69L5ESGWc+Eqa9D1S3R11+UtgMjU4NgYDBMnn+7tvjU1kE39NxAJB1 +Agj4ghUZrLYjupOrs85BtjgwTQW6GhRO3a5ENFRLnLsdx/3JMJc52gFNjBlWcNQA/ma rjFsOjpOc2IDwVYbU7fICqNT5Aodz1DVex/kWvQ7pCzsuSaLAS2J0TZoli4q8tVphxmQ 8BWg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=v31PIkS9; 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 x185-20020a6386c2000000b005573ea250f0si542614pgd.116.2023.07.28.20.02.59; Fri, 28 Jul 2023 20:03:12 -0700 (PDT) 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=20221208 header.b=v31PIkS9; 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 S236148AbjG2BSS (ORCPT + 99 others); Fri, 28 Jul 2023 21:18:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36762 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237454AbjG2BRi (ORCPT ); Fri, 28 Jul 2023 21:17:38 -0400 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 301E24695 for ; Fri, 28 Jul 2023 18:17:06 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-5844e92ee6bso26778467b3.3 for ; Fri, 28 Jul 2023 18:17:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690593400; x=1691198200; 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=EGn34XFQPv+N6od2XkKlclrB8ffPqa49xtGxfrYWBec=; b=v31PIkS9snbDUZj+Uyjuf6WXXAA6w8WXWgiyqlnQ1/vx7fwISulFdmJYlpAyHQAAJ7 dgMjNdDeTU75s+eO6KvMT7xVzL91qu+03JuwQkuiVIQcJO6nkA5Cj+picfRGu9nLNmt9 xaOfhF8j9ImmDwHDZXNENBLwCpSIzj5ptpXm4P5NXZpg0/2PzmAf7qxMvsdHm8Q0X5EY gu4tssSDCpbSWayrA6+e5IaeWLI771OGU89pb0GiRYlddzYesDHPCvC2Ab/U2ZTtJhlP SXIS15hjbLy6j1YFOTTMWZnsx4Ce7j138ve9JAgeFY0iaO8zZ6BAIgC5oH07iQUH5ALI 1law== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690593400; x=1691198200; 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=EGn34XFQPv+N6od2XkKlclrB8ffPqa49xtGxfrYWBec=; b=VmeJ+6Fau2bCkiT/9N+DKRHJPrEZ58L3470qiRcFn9Sz3BkIU3fZYoF+sWcpbar8Mn liJAI4CIvz0JK50MiV9g/bFmfP6kfMxJr7Hipt+0tHioqwyHxSqAQuVz8W9+Wron4iiT 7td41xBVqczgZ8rDTL3Jg3DHvWDHEBsU0u3HNKKTacYn0OoZHkf2Y7kIFb3xIp3kYx8H aM5N6VxZKHL+Xxza6ZeEWIsAvkFoZZetAMZ1ZDzJIO8L1wgklzxQOCCu7DBIVkPfVvKn qUOqCqZ82WR7U9Xo+MggKvv3yi/K+0z4unN4Z3saSGmTAFJePSZCFYEcaWz0SbgGrQ1m 9OjA== X-Gm-Message-State: ABy/qLZ6se5QHb6gQ96aDY98mU9qtdjSvYG9RkaOVdyTczHALW/RUvkX aWnSguPf27AR+S+BDBmmv8lahDgdsYw= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a25:acde:0:b0:d1c:6a5e:3e46 with SMTP id x30-20020a25acde000000b00d1c6a5e3e46mr18827ybd.8.1690593400206; Fri, 28 Jul 2023 18:16:40 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:16:01 -0700 In-Reply-To: <20230729011608.1065019-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729011608.1065019-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729011608.1065019-15-seanjc@google.com> Subject: [PATCH v2 14/21] 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, Maxim Levitsky 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,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL autolearn=unavailable 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: INBOX X-GMAIL-THRID: 1772722367246854336 X-GMAIL-MSGID: 1772722367246854336 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 --- 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_features.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) #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_svm *svm, * what a nrips=0 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 = svm->nested.ctl.next_rip; else if (boot_cpu_has(X86_FEATURE_NRIPS)) vmcb02->control.next_rip = vmcb12_rip; @@ -726,7 +726,7 @@ static void nested_vmcb02_prepare_control(struct vcpu_svm *svm, svm->soft_int_injected = true; svm->soft_int_csbase = vmcb12_csbase; svm->soft_int_old_rip = vmcb12_rip; - if (svm->nrips_enabled) + if (guest_can_use(vcpu, X86_FEATURE_NRIPS)) svm->soft_int_next_rip = svm->nested.ctl.next_rip; else svm->soft_int_next_rip = vmcb12_rip; @@ -1026,7 +1026,7 @@ int nested_svm_vmexit(struct vcpu_svm *svm) if (vmcb12->control.exit_code != SVM_EXIT_ERR) nested_save_pending_event_to_vmcb12(svm, vmcb12); - if (svm->nrips_enabled) + if (guest_can_use(vcpu, X86_FEATURE_NRIPS)) vmcb12->control.next_rip = vmcb02->control.next_rip; vmcb12->control.int_ctl = svm->nested.ctl.int_ctl; diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index d5f8cb402eb7..7c1aa532f767 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -4219,9 +4219,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); - /* Update nrips enabled cache */ - svm->nrips_enabled = kvm_cpu_cap_has(X86_FEATURE_NRIPS) && - guest_cpuid_has(vcpu, X86_FEATURE_NRIPS); + kvm_governed_feature_check_and_set(vcpu, X86_FEATURE_NRIPS); svm->tsc_scaling_enabled = tsc_scaling && guest_cpuid_has(vcpu, X86_FEATURE_TSCRATEMSR); svm->lbrv_enabled = 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 5829a1801862..c06de55425d4 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; /* 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;