From nobody Sun Oct 5 09:06:12 2025 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 618322BE648 for ; Wed, 6 Aug 2025 19:58:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754510299; cv=none; b=nZWPwcbJijaVxgoiGin8hQwnDXfz3r+LrwdIGyVzvEook0z22uzaET0IIyKk/rQLRgUOTURmgb81p77Jhh33sNiCNI9GL/9k9Nj1DrOiovKYrYvgEg1WCn7rMbt7TTSBgTVuiXXV0Rt7oPjJfUSoS5MggozAVDa0XDb0kn3TQRk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754510299; c=relaxed/simple; bh=wHmlJSVtwVaQD0ZM8WmfI3XDA8yD245AfBXY7EV2M10=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=gbO3bkmWuT8G0aA994K+jDi/EiP9/j6iQYT1LaTxTqZ1lOT2xvwFgEustFoi4OwS58dUMHl+v20HxCiEptc+Ul+rfocMHL6EZEHidoFUoQdVPeq5T0gJdKOwBQMIzAKAJEw2iSSy1dePZRbVP98kWsqepH9yb7IoXuFqQ3EdFUw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=wlWkR4yx; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="wlWkR4yx" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2424aaa9840so2089585ad.1 for ; Wed, 06 Aug 2025 12:58:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1754510295; x=1755115095; darn=vger.kernel.org; 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=7n78nD110ztSdGmfKKJPHep+PzR1j4ORmKnKizGjxcI=; b=wlWkR4yxBCBKUd7FpN2J//jigQqdrrSk22OgMrzaJUZf60flb19Mo8kFL5B6Gwt/V+ xxH4hHX8vdn0y462uePOP8nIkxez+kkJLkMJTYNTaBkHzeO9RL1qAuqMyRic2szqeqjP TEvYgD09Zu0QbT7oWnXj3oP8+pQH2h5bHzxq2QEl0nYdJMD1BMoiZnLQo+Zvlc2JRiUt wy3kJuE1Qnv5L/2fuUf1EiNkqhdQaal/8hn3ee52feH0SsPlgH1wgx42q/TGuKnURMn2 sXfxEjqnW1xWmCYPbXeZKWV3jmIiJW9tFwmu6D/qUlO/sgwUvSLRhZN8Na5gxCqb377x nfZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754510295; x=1755115095; 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=7n78nD110ztSdGmfKKJPHep+PzR1j4ORmKnKizGjxcI=; b=Z9LUJVvThanW+XTrLF0KgEvs9S+Kh6N7eD4776MNYmYtv4oQPn211iiRMsdmdtt4JX WuOxUutFcZj3Isb7Syvh3U0pxgdM3Q4w4zx8A8wPP9Tbxf332jjDhePxGS8FqnjHXWFl Ao7azlYDgQ744Pkb2hvY+BMS0BS9/ulYY+/d/Briz+Ety68pO8A1qZnj1lO81bAbooua dCrKbgCmQJQCeoZDZdJ9tq5jRBWzZrMDV8nt322sIbTeo3JBKG/95JpwIM5bLq5diPu7 tq1Yyjw1PYCwQ7nkh25vz8XMsNpSXl4/HYoEZl9aGsDKu+1Uyu41YsGvPGzW3jY4LScp wJVw== X-Forwarded-Encrypted: i=1; AJvYcCXxhx+iocMJav7hNmbT9/QqiA4HAOaQ00cCWLe4LoglwlQLBLxwW5ELJqMj289reCMb27seJRf9XtLGI38=@vger.kernel.org X-Gm-Message-State: AOJu0YxKqEiHIYRv8d7S/4LOedKmLnIFwI8L6jUuM2aZ6+bQCAxx9ayc XsMMQr+K6VA60fuoeqnupFkG3zBnVn7pd/g1eXAH54uqLhDc5NV/FOhawWQC6C6jJIiPqu1uEPz AT5aLwg== X-Google-Smtp-Source: AGHT+IFqf7ZAG29dPCj/MpatUq6hwXzWupLmSqVpNm34U7crTT1sTW/TFLrPZa6u05A4GwIlFGKGaClhUR8= X-Received: from pjpy17.prod.google.com ([2002:a17:90a:a411:b0:321:370d:cae5]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:cec8:b0:242:abac:30f0 with SMTP id d9443c01a7336-242abac3c63mr29143805ad.42.1754510294999; Wed, 06 Aug 2025 12:58:14 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 6 Aug 2025 12:56:47 -0700 In-Reply-To: <20250806195706.1650976-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250806195706.1650976-1-seanjc@google.com> X-Mailer: git-send-email 2.50.1.565.gc32cd1483b-goog Message-ID: <20250806195706.1650976-26-seanjc@google.com> Subject: [PATCH v5 25/44] KVM: x86: Use KVM_REQ_RECALC_INTERCEPTS to react to CPUID updates From: Sean Christopherson To: Marc Zyngier , Oliver Upton , Tianrui Zhao , Bibo Mao , Huacai Chen , Anup Patel , Paul Walmsley , Palmer Dabbelt , Albert Ou , Xin Li , "H. Peter Anvin" , Andy Lutomirski , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Sean Christopherson , Paolo Bonzini Cc: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, kvm@vger.kernel.org, loongarch@lists.linux.dev, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Kan Liang , Yongwei Ma , Mingwei Zhang , Xiong Zhang , Sandipan Das , Dapeng Mi Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Defer recalculating MSR and instruction intercepts after a CPUID update via RECALC_INTERCEPTS to converge on RECALC_INTERCEPTS as the "official" mechanism for triggering recalcs. As a bonus, because KVM does a "recalc" during vCPU creation, and every functional VMM sets CPUID at least once, for all intents and purposes this saves at least one recalc. Signed-off-by: Sean Christopherson --- arch/x86/kvm/cpuid.c | 2 ++ arch/x86/kvm/svm/svm.c | 4 +--- arch/x86/kvm/vmx/vmx.c | 3 --- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c index e2836a255b16..cc16e28bfab2 100644 --- a/arch/x86/kvm/cpuid.c +++ b/arch/x86/kvm/cpuid.c @@ -448,6 +448,8 @@ void kvm_vcpu_after_set_cpuid(struct kvm_vcpu *vcpu) * adjustments to the reserved GPA bits. */ kvm_mmu_after_set_cpuid(vcpu); + + kvm_make_request(KVM_REQ_RECALC_INTERCEPTS, vcpu); } =20 int cpuid_query_maxphyaddr(struct kvm_vcpu *vcpu) diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index 3d9dcc66a407..ef7dffc54dca 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -1225,7 +1225,7 @@ static void init_vmcb(struct kvm_vcpu *vcpu) =20 svm_hv_init_vmcb(vmcb); =20 - svm_recalc_intercepts(vcpu); + kvm_make_request(KVM_REQ_RECALC_INTERCEPTS, vcpu); =20 vmcb_mark_all_dirty(vmcb); =20 @@ -4478,8 +4478,6 @@ static void svm_vcpu_after_set_cpuid(struct kvm_vcpu = *vcpu) =20 if (sev_guest(vcpu->kvm)) sev_vcpu_after_set_cpuid(svm); - - svm_recalc_intercepts(vcpu); } =20 static bool svm_has_wbinvd_exit(void) diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 2244ca074e9d..6094de4855d6 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -7782,9 +7782,6 @@ void vmx_vcpu_after_set_cpuid(struct kvm_vcpu *vcpu) vmx->msr_ia32_feature_control_valid_bits &=3D ~FEAT_CTL_SGX_LC_ENABLED; =20 - /* Recalc MSR interception to account for feature changes. */ - vmx_recalc_intercepts(vcpu); - /* Refresh #PF interception to account for MAXPHYADDR changes. */ vmx_update_exception_bitmap(vcpu); } --=20 2.50.1.565.gc32cd1483b-goog