]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
KVM: x86: Drop superfluous caching of KVM_ASYNC_PF_DELIVERY_AS_PF_VMEXIT
authorSean Christopherson <seanjc@google.com>
Mon, 6 Apr 2026 22:53:57 +0000 (15:53 -0700)
committerSean Christopherson <seanjc@google.com>
Wed, 13 May 2026 17:40:13 +0000 (10:40 -0700)
Drop kvm_vcpu_arch.apf.delivery_as_pf_vmexit and instead use msr_en_val as
the source of truth to reduce the probability of operating on stale data.
This fixes flaws where KVM fails to update delivery_as_pf_vmexit when APF
is explicitly disabled by the guest or implicitly disabled by KVM on INIT.
Absent other bugs, the flaws are benign as KVM *shouldn't* consume
delivery_as_pf_vmexit when PV APF support is disabled.

Simply delete the field, as there's zero benefit to maintaining a separate
"cache" of the state.

Fixes: 52a5c155cf79 ("KVM: async_pf: Let guest support delivery of async_pf from guest mode")
Reviewed-by: Binbin Wu <binbin.wu@linux.intel.com>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Link: https://patch.msgid.link/20260406225359.1245490-3-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/include/asm/kvm_host.h
arch/x86/kvm/x86.c

index 8a53ca619570175e99ef6452296ac4f863c3de34..5644dc9f08a48f3651db8060fc87bb71eb2f918f 100644 (file)
@@ -1058,7 +1058,6 @@ struct kvm_vcpu_arch {
                u32 id;
                u32 host_apf_flags;
                bool send_always;
-               bool delivery_as_pf_vmexit;
                bool pageready_pending;
        } apf;
 
index 82dce54ac505dc0caca08d4ac249c4669bd832f2..4bffcea3ede938e6c7b5bb1af296bbedddda14fc 100644 (file)
@@ -3667,7 +3667,6 @@ static int kvm_pv_enable_async_pf(struct kvm_vcpu *vcpu, u64 data)
        }
 
        vcpu->arch.apf.send_always = (data & KVM_ASYNC_PF_SEND_ALWAYS);
-       vcpu->arch.apf.delivery_as_pf_vmexit = data & KVM_ASYNC_PF_DELIVERY_AS_PF_VMEXIT;
 
        kvm_async_pf_wakeup_all(vcpu);
 
@@ -14018,7 +14017,7 @@ static bool kvm_can_deliver_async_pf(struct kvm_vcpu *vcpu)
                 * L1 needs to opt into the special #PF vmexits that are
                 * used to deliver async page faults.
                 */
-               return vcpu->arch.apf.delivery_as_pf_vmexit;
+               return vcpu->arch.apf.msr_en_val & KVM_ASYNC_PF_DELIVERY_AS_PF_VMEXIT;
        } else {
                /*
                 * Play it safe in case the guest temporarily disables paging.