if (!enable_apicv)
                return;
 
-       if (kvm_svm->avic_logical_id_table_page)
-               __free_page(kvm_svm->avic_logical_id_table_page);
-       if (kvm_svm->avic_physical_id_table_page)
-               __free_page(kvm_svm->avic_physical_id_table_page);
+       free_page((unsigned long)kvm_svm->avic_logical_id_table);
+       free_page((unsigned long)kvm_svm->avic_physical_id_table);
 
        spin_lock_irqsave(&svm_vm_data_hash_lock, flags);
        hash_del(&kvm_svm->hnode);
        int err = -ENOMEM;
        struct kvm_svm *kvm_svm = to_kvm_svm(kvm);
        struct kvm_svm *k2;
-       struct page *p_page;
-       struct page *l_page;
        u32 vm_id;
 
        if (!enable_apicv)
                return 0;
 
-       /* Allocating physical APIC ID table (4KB) */
-       p_page = alloc_page(GFP_KERNEL_ACCOUNT | __GFP_ZERO);
-       if (!p_page)
+       kvm_svm->avic_physical_id_table = (void *)get_zeroed_page(GFP_KERNEL_ACCOUNT);
+       if (!kvm_svm->avic_physical_id_table)
                goto free_avic;
 
-       kvm_svm->avic_physical_id_table_page = p_page;
-
-       /* Allocating logical APIC ID table (4KB) */
-       l_page = alloc_page(GFP_KERNEL_ACCOUNT | __GFP_ZERO);
-       if (!l_page)
+       kvm_svm->avic_logical_id_table = (void *)get_zeroed_page(GFP_KERNEL_ACCOUNT);
+       if (!kvm_svm->avic_logical_id_table)
                goto free_avic;
 
-       kvm_svm->avic_logical_id_table_page = l_page;
-
        spin_lock_irqsave(&svm_vm_data_hash_lock, flags);
  again:
        vm_id = next_vm_id = (next_vm_id + 1) & AVIC_VM_ID_MASK;
 void avic_init_vmcb(struct vcpu_svm *svm, struct vmcb *vmcb)
 {
        struct kvm_svm *kvm_svm = to_kvm_svm(svm->vcpu.kvm);
-       phys_addr_t lpa = __sme_set(page_to_phys(kvm_svm->avic_logical_id_table_page));
-       phys_addr_t ppa = __sme_set(page_to_phys(kvm_svm->avic_physical_id_table_page));
 
        vmcb->control.avic_backing_page = avic_get_backing_page_address(svm);
-       vmcb->control.avic_logical_id = lpa;
-       vmcb->control.avic_physical_id = ppa;
+       vmcb->control.avic_logical_id = __sme_set(__pa(kvm_svm->avic_logical_id_table));
+       vmcb->control.avic_physical_id = __sme_set(__pa(kvm_svm->avic_physical_id_table));
        vmcb->control.avic_vapic_bar = APIC_DEFAULT_PHYS_BASE;
 
        if (kvm_apicv_activated(svm->vcpu.kvm))
        struct kvm_svm *kvm_svm = to_kvm_svm(vcpu->kvm);
        struct vcpu_svm *svm = to_svm(vcpu);
        u32 id = vcpu->vcpu_id;
-       u64 *table, new_entry;
+       u64 new_entry;
 
        /*
         * Inhibit AVIC if the vCPU ID is bigger than what is supported by AVIC
                return 0;
        }
 
-       BUILD_BUG_ON((AVIC_MAX_PHYSICAL_ID + 1) * sizeof(*table) > PAGE_SIZE ||
-                    (X2AVIC_MAX_PHYSICAL_ID + 1) * sizeof(*table) > PAGE_SIZE);
+       BUILD_BUG_ON((AVIC_MAX_PHYSICAL_ID + 1) * sizeof(new_entry) > PAGE_SIZE ||
+                    (X2AVIC_MAX_PHYSICAL_ID + 1) * sizeof(new_entry) > PAGE_SIZE);
 
        if (WARN_ON_ONCE(!vcpu->arch.apic->regs))
                return -EINVAL;
                        return ret;
        }
 
-       /* Setting AVIC backing page address in the phy APIC ID table */
-       table = page_address(kvm_svm->avic_physical_id_table_page);
-
        /* Note, fls64() returns the bit position, +1. */
        BUILD_BUG_ON(__PHYSICAL_MASK_SHIFT >
                     fls64(AVIC_PHYSICAL_ID_ENTRY_BACKING_PAGE_MASK));
 
+       /* Setting AVIC backing page address in the phy APIC ID table */
        new_entry = avic_get_backing_page_address(svm) |
                    AVIC_PHYSICAL_ID_ENTRY_VALID_MASK;
-       WRITE_ONCE(table[id], new_entry);
+       WRITE_ONCE(kvm_svm->avic_physical_id_table[id], new_entry);
 
-       svm->avic_physical_id_cache = &table[id];
+       svm->avic_physical_id_cache = &kvm_svm->avic_physical_id_table[id];
 
        return 0;
 }
                if (apic_x2apic_mode(source))
                        avic_logical_id_table = NULL;
                else
-                       avic_logical_id_table = page_address(kvm_svm->avic_logical_id_table_page);
+                       avic_logical_id_table = kvm_svm->avic_logical_id_table;
 
                /*
                 * AVIC is inhibited if vCPUs aren't mapped 1:1 with logical
 static u32 *avic_get_logical_id_entry(struct kvm_vcpu *vcpu, u32 ldr, bool flat)
 {
        struct kvm_svm *kvm_svm = to_kvm_svm(vcpu->kvm);
-       u32 *logical_apic_id_table;
        u32 cluster, index;
 
        ldr = GET_APIC_LOGICAL_ID(ldr);
                return NULL;
        index += (cluster << 2);
 
-       logical_apic_id_table = (u32 *) page_address(kvm_svm->avic_logical_id_table_page);
-
-       return &logical_apic_id_table[index];
+       return &kvm_svm->avic_logical_id_table[index];
 }
 
 static void avic_ldr_write(struct kvm_vcpu *vcpu, u8 g_physical_id, u32 ldr)