Merge tag 'phy-for-5.18' of git://git.kernel.org/pub/scm/linux/kernel/git/phy/linux...
[linux-2.6-microblaze.git] / arch / x86 / kvm / mmu / mmu.c
index 593093b..8e24f73 100644 (file)
@@ -3889,12 +3889,23 @@ static void shadow_page_table_clear_flood(struct kvm_vcpu *vcpu, gva_t addr)
        walk_shadow_page_lockless_end(vcpu);
 }
 
+static u32 alloc_apf_token(struct kvm_vcpu *vcpu)
+{
+       /* make sure the token value is not 0 */
+       u32 id = vcpu->arch.apf.id;
+
+       if (id << 12 == 0)
+               vcpu->arch.apf.id = 1;
+
+       return (vcpu->arch.apf.id++ << 12) | vcpu->vcpu_id;
+}
+
 static bool kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa,
                                    gfn_t gfn)
 {
        struct kvm_arch_async_pf arch;
 
-       arch.token = (vcpu->arch.apf.id++ << 12) | vcpu->vcpu_id;
+       arch.token = alloc_apf_token(vcpu);
        arch.gfn = gfn;
        arch.direct_map = vcpu->arch.mmu->direct_map;
        arch.cr3 = vcpu->arch.mmu->get_guest_pgd(vcpu);