From nobody Mon Feb 9 21:03:20 2026 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 2E5642DFA48 for ; Tue, 10 Jun 2025 22: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=1749596296; cv=none; b=qWDl2H8Oe+zM9umaQqCpTs5Dj1lI7AUQ6SsEbOYGh2NxPO7si50yr3rJNQhzJxSWxrBXHbevGX9KJttIxKeAtzIceaSZ4KxfLi/4zHDiPgpv1045f9XwaS0kI0qMxcau6mCpjeKNX9Jp0UYETBgEZDag6EFW+zO1PIrCZs5rW6o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749596296; c=relaxed/simple; bh=F1FCxA6Fmfycf87sm7Fnlumr/JZJilN6wmcgrzRL8Uc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=kT4ep56gfFNCdegU3iL9jDXkIpLKhtBzuGPcjZe36M+lVUoU+VdY7Ul68c9QIBh6Ha4Pf9IntA4nEYZoYUQF01MoOqfx2IpdoHR57E3zAOE0/fAWoCPyXFdDH/WyRsV/br/bRtviDlO8B0gHXgZlAbtAhbk+fF+T9vDeoom01zE= 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=BAMuzYbg; 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="BAMuzYbg" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2358ddcb1e3so89630075ad.3 for ; Tue, 10 Jun 2025 15:58:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1749596294; x=1750201094; 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=FaEfE2/QvzirXwC0gtWq1LyfGrvWT+i42kXYYAECDHg=; b=BAMuzYbg7MlWh8P+nhgfHvQjfqhiPf3DiLtNijLgtk97Ee+7bTP990RcRiaauv9dKa fjiEZIAXtGVwoASiSTAh51wfgTamzkH4yb94sRAL4u/9uzqOnCbMz2D+r1sj1LLcU2SB uklFR2996IOvaSIazZUK2Io8HsCediUKL3Z2q9g5LJLBES/0ulANsPDiD/qzk015XxMu ESltmRWvYvmmNObd+98nlWRiPLfhBfWeNgA6XxM95CrqRRx8vcXUvf6DlOsXpmCsDKpi iWLAN9c48jfZXzJPzw/VTLR8kNI9AIFvXLCsckCecpYmxWyOm2uXep6+B4AYRJiW/9wc y1+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749596294; x=1750201094; 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=FaEfE2/QvzirXwC0gtWq1LyfGrvWT+i42kXYYAECDHg=; b=QVXbAvIUiqXEsQINsh7Sl7ROsAc/Cwyi+HAT3bA8wAnggHw+ddM3EcmU8sqXoZ73DJ VhEWUKwL757Erw/xxyrwe3S40Ygnr1NP4E5NZuSNxbci3lkjc3gGWXTN95mQXJJ28OXM QTDHfvUgIeEf+jLlClzTVwV0Sats+ymqc3RX4KDI+E+kiMHDDnvhpyjM1oN8vd2OuAhC piTA0pgf44CNYxlTu92wssqUqUktKzz8sYp3mnu8IHHNr6/KfglFnxD262gC3BwPK7FG BekXr1eU+lmwg62XLfdMJ6Vw4XoPrWRs1zQElKjDSWMiY5oYU0F0eG3PsWdLmEqEgT1j 4LTw== X-Forwarded-Encrypted: i=1; AJvYcCVS7s/9Er9lPmMp5AbzOUgx9ALOgig5Nv0+AhaIhf/lmv6jldI+TxekbIpPpL0+0Gt66226yDrJk9JSR2o=@vger.kernel.org X-Gm-Message-State: AOJu0YwiyVu9BwG0k/JxdvRAMAOwUrEXUNrk86PDn6V4g9MbDLEUHnbE S012Wfq8g7eK5vvaw0+nZDi3sM1aImmcRGsvDvJ+/6f4yKK8lhM1i/JdBTYnX0ZeOQTRC4mwoiu QmrJZUQ== X-Google-Smtp-Source: AGHT+IGvLjIOPk/iwEA2IyYT/UJ3dmbJ5ebXkhSDXZ8vMZLoG14BPZbaaTS3vZ80RE1HOv23dnW3r07AQ/s= X-Received: from plbkk7.prod.google.com ([2002:a17:903:707:b0:234:e3a2:5b21]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1b26:b0:235:ea29:28da with SMTP id d9443c01a7336-236426208bbmr6439855ad.17.1749596294579; Tue, 10 Jun 2025 15:58:14 -0700 (PDT) Reply-To: Sean Christopherson Date: Tue, 10 Jun 2025 15:57:25 -0700 In-Reply-To: <20250610225737.156318-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: <20250610225737.156318-1-seanjc@google.com> X-Mailer: git-send-email 2.50.0.rc0.642.g800a2b2222-goog Message-ID: <20250610225737.156318-21-seanjc@google.com> Subject: [PATCH v2 20/32] KVM: x86: Rename msr_filter_changed() => recalc_msr_intercepts() From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Chao Gao , Borislav Petkov , Xin Li , Dapeng Mi , Francesco Lavra , Manali Shukla Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Rename msr_filter_changed() to recalc_msr_intercepts() and drop the trampoline wrapper now that both SVM and VMX use a filter-agnostic recalc helper to react to the new userspace filter. No functional change intended. Reviewed-by: Xin Li (Intel) Signed-off-by: Sean Christopherson Reviewed-by: Binbin Wu --- arch/x86/include/asm/kvm-x86-ops.h | 2 +- arch/x86/include/asm/kvm_host.h | 2 +- arch/x86/kvm/svm/svm.c | 8 +------- arch/x86/kvm/vmx/main.c | 6 +++--- arch/x86/kvm/vmx/vmx.c | 7 +------ arch/x86/kvm/vmx/x86_ops.h | 2 +- arch/x86/kvm/x86.c | 8 +++++++- 7 files changed, 15 insertions(+), 20 deletions(-) diff --git a/arch/x86/include/asm/kvm-x86-ops.h b/arch/x86/include/asm/kvm-= x86-ops.h index 8d50e3e0a19b..19a6735d6dd8 100644 --- a/arch/x86/include/asm/kvm-x86-ops.h +++ b/arch/x86/include/asm/kvm-x86-ops.h @@ -139,7 +139,7 @@ KVM_X86_OP(check_emulate_instruction) KVM_X86_OP(apic_init_signal_blocked) KVM_X86_OP_OPTIONAL(enable_l2_tlb_flush) KVM_X86_OP_OPTIONAL(migrate_timers) -KVM_X86_OP(msr_filter_changed) +KVM_X86_OP(recalc_msr_intercepts) KVM_X86_OP(complete_emulated_msr) KVM_X86_OP(vcpu_deliver_sipi_vector) KVM_X86_OP_OPTIONAL_RET0(vcpu_get_apicv_inhibit_reasons); diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_hos= t.h index 330cdcbed1a6..89a626e5b80f 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -1885,7 +1885,7 @@ struct kvm_x86_ops { int (*enable_l2_tlb_flush)(struct kvm_vcpu *vcpu); =20 void (*migrate_timers)(struct kvm_vcpu *vcpu); - void (*msr_filter_changed)(struct kvm_vcpu *vcpu); + void (*recalc_msr_intercepts)(struct kvm_vcpu *vcpu); int (*complete_emulated_msr)(struct kvm_vcpu *vcpu, int err); =20 void (*vcpu_deliver_sipi_vector)(struct kvm_vcpu *vcpu, u8 vector); diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index de3d59c71229..710bc5f965dc 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -896,11 +896,6 @@ static void svm_recalc_msr_intercepts(struct kvm_vcpu = *vcpu) */ } =20 -static void svm_msr_filter_changed(struct kvm_vcpu *vcpu) -{ - svm_recalc_msr_intercepts(vcpu); -} - void svm_copy_lbrs(struct vmcb *to_vmcb, struct vmcb *from_vmcb) { to_vmcb->save.dbgctl =3D from_vmcb->save.dbgctl; @@ -929,7 +924,6 @@ static void svm_disable_lbrv(struct kvm_vcpu *vcpu) struct vcpu_svm *svm =3D to_svm(vcpu); =20 KVM_BUG_ON(sev_es_guest(vcpu->kvm), vcpu->kvm); - svm->vmcb->control.virt_ext &=3D ~LBR_CTL_ENABLE_MASK; svm_recalc_lbr_msr_intercepts(vcpu); =20 @@ -5227,7 +5221,7 @@ static struct kvm_x86_ops svm_x86_ops __initdata =3D { =20 .apic_init_signal_blocked =3D svm_apic_init_signal_blocked, =20 - .msr_filter_changed =3D svm_msr_filter_changed, + .recalc_msr_intercepts =3D svm_recalc_msr_intercepts, .complete_emulated_msr =3D svm_complete_emulated_msr, =20 .vcpu_deliver_sipi_vector =3D svm_vcpu_deliver_sipi_vector, diff --git a/arch/x86/kvm/vmx/main.c b/arch/x86/kvm/vmx/main.c index d1e02e567b57..b3c58731a2f5 100644 --- a/arch/x86/kvm/vmx/main.c +++ b/arch/x86/kvm/vmx/main.c @@ -220,7 +220,7 @@ static int vt_get_msr(struct kvm_vcpu *vcpu, struct msr= _data *msr_info) return vmx_get_msr(vcpu, msr_info); } =20 -static void vt_msr_filter_changed(struct kvm_vcpu *vcpu) +static void vt_recalc_msr_intercepts(struct kvm_vcpu *vcpu) { /* * TDX doesn't allow VMM to configure interception of MSR accesses. @@ -231,7 +231,7 @@ static void vt_msr_filter_changed(struct kvm_vcpu *vcpu) if (is_td_vcpu(vcpu)) return; =20 - vmx_msr_filter_changed(vcpu); + vmx_recalc_msr_intercepts(vcpu); } =20 static int vt_complete_emulated_msr(struct kvm_vcpu *vcpu, int err) @@ -1034,7 +1034,7 @@ struct kvm_x86_ops vt_x86_ops __initdata =3D { .apic_init_signal_blocked =3D vt_op(apic_init_signal_blocked), .migrate_timers =3D vmx_migrate_timers, =20 - .msr_filter_changed =3D vt_op(msr_filter_changed), + .recalc_msr_intercepts =3D vt_op(recalc_msr_intercepts), .complete_emulated_msr =3D vt_op(complete_emulated_msr), =20 .vcpu_deliver_sipi_vector =3D kvm_vcpu_deliver_sipi_vector, diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index ce7a1c07e402..bdff81f8288d 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -4074,7 +4074,7 @@ void pt_update_intercept_for_msr(struct kvm_vcpu *vcp= u) } } =20 -static void vmx_recalc_msr_intercepts(struct kvm_vcpu *vcpu) +void vmx_recalc_msr_intercepts(struct kvm_vcpu *vcpu) { if (!cpu_has_vmx_msr_bitmap()) return; @@ -4123,11 +4123,6 @@ static void vmx_recalc_msr_intercepts(struct kvm_vcp= u *vcpu) */ } =20 -void vmx_msr_filter_changed(struct kvm_vcpu *vcpu) -{ - vmx_recalc_msr_intercepts(vcpu); -} - static int vmx_deliver_nested_posted_interrupt(struct kvm_vcpu *vcpu, int vector) { diff --git a/arch/x86/kvm/vmx/x86_ops.h b/arch/x86/kvm/vmx/x86_ops.h index b4596f651232..34c6e683e321 100644 --- a/arch/x86/kvm/vmx/x86_ops.h +++ b/arch/x86/kvm/vmx/x86_ops.h @@ -52,7 +52,7 @@ void vmx_deliver_interrupt(struct kvm_lapic *apic, int de= livery_mode, int trig_mode, int vector); void vmx_vcpu_after_set_cpuid(struct kvm_vcpu *vcpu); bool vmx_has_emulated_msr(struct kvm *kvm, u32 index); -void vmx_msr_filter_changed(struct kvm_vcpu *vcpu); +void vmx_recalc_msr_intercepts(struct kvm_vcpu *vcpu); void vmx_prepare_switch_to_guest(struct kvm_vcpu *vcpu); void vmx_update_exception_bitmap(struct kvm_vcpu *vcpu); int vmx_get_feature_msr(u32 msr, u64 *data); diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index dd34a2ec854c..cc9a01b6dbc8 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -10926,8 +10926,14 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu) kvm_vcpu_update_apicv(vcpu); if (kvm_check_request(KVM_REQ_APF_READY, vcpu)) kvm_check_async_pf_completion(vcpu); + + /* + * Recalc MSR intercepts as userspace may want to intercept + * accesses to MSRs that KVM would otherwise pass through to + * the guest. + */ if (kvm_check_request(KVM_REQ_MSR_FILTER_CHANGED, vcpu)) - kvm_x86_call(msr_filter_changed)(vcpu); + kvm_x86_call(recalc_msr_intercepts)(vcpu); =20 if (kvm_check_request(KVM_REQ_UPDATE_CPU_DIRTY_LOGGING, vcpu)) kvm_x86_call(update_cpu_dirty_logging)(vcpu); --=20 2.50.0.rc0.642.g800a2b2222-goog