unsigned long hva,
struct kvm_memory_slot *memslot,
struct kvm_s2_trans *nested,
- bool *force_pte, phys_addr_t *ipa)
+ bool *force_pte)
{
short vma_shift;
max_map_size = *force_pte ? PAGE_SIZE : PUD_SIZE;
- *ipa = kvm_s2_trans_output(nested);
-
/*
* If we're about to create a shadow stage 2 entry, then we
* can only create a block mapping if the guest stage 2 page
bool is_vma_cacheable;
bool s2_force_noncacheable;
unsigned long mmu_seq;
- phys_addr_t ipa;
gfn_t gfn;
kvm_pfn_t pfn;
bool logging_active;
{
struct vm_area_struct *vma;
struct kvm *kvm = fault->vcpu->kvm;
+ phys_addr_t ipa;
mmap_read_lock(current->mm);
vma = vma_lookup(current->mm, fault->hva);
}
fault->vma_pagesize = 1UL << kvm_s2_resolve_vma_size(vma, fault->hva, fault->memslot,
- fault->nested, &fault->force_pte,
- &fault->ipa);
+ fault->nested, &fault->force_pte);
/*
* Both the canonical IPA and fault IPA must be aligned to the
* mapping in the right place.
*/
fault->fault_ipa = ALIGN_DOWN(fault->fault_ipa, fault->vma_pagesize);
- fault->ipa = ALIGN_DOWN(fault->ipa, fault->vma_pagesize);
+ ipa = fault->nested ? kvm_s2_trans_output(fault->nested) : fault->fault_ipa;
+ fault->gfn = ALIGN_DOWN(ipa, fault->vma_pagesize) >> PAGE_SHIFT;
- fault->gfn = fault->ipa >> PAGE_SHIFT;
fault->mte_allowed = kvm_vma_mte_allowed(vma);
fault->vm_flags = vma->vm_flags;
.memslot = memslot,
.hva = hva,
.fault_is_perm = fault_is_perm,
- .ipa = fault_ipa,
.logging_active = logging_active,
.force_pte = logging_active,
.prot = KVM_PGTABLE_PROT_R,