Lines Matching refs:walker
199 struct guest_walker *walker, in FNAME()
212 for (level = walker->max_level; level >= walker->level; --level) { in FNAME()
213 pte = orig_pte = walker->ptes[level - 1]; in FNAME()
214 table_gfn = walker->table_gfn[level - 1]; in FNAME()
215 ptep_user = walker->ptep_user[level - 1]; in FNAME()
221 if (level == walker->level && write_fault && in FNAME()
246 if (unlikely(!walker->pte_writable[level - 1])) in FNAME()
254 walker->ptes[level - 1] = pte; in FNAME()
302 static int FNAME(walk_addr_generic)(struct guest_walker *walker, in FNAME()
326 walker->level = mmu->cpu_role.base.level; in FNAME()
332 if (walker->level == PT32E_ROOT_LEVEL) { in FNAME()
334 trace_kvm_mmu_paging_element(pte, walker->level); in FNAME()
337 --walker->level; in FNAME()
340 walker->max_level = walker->level; in FNAME()
351 ++walker->level; in FNAME()
357 --walker->level; in FNAME()
359 index = PT_INDEX(addr, walker->level); in FNAME()
364 BUG_ON(walker->level < 1); in FNAME()
365 walker->table_gfn[walker->level - 1] = table_gfn; in FNAME()
366 walker->pte_gpa[walker->level - 1] = pte_gpa; in FNAME()
369 nested_access, &walker->fault); in FNAME()
385 &walker->pte_writable[walker->level - 1]); in FNAME()
392 walker->ptep_user[walker->level - 1] = ptep_user; in FNAME()
394 trace_kvm_mmu_paging_element(pte, walker->level); in FNAME()
405 if (unlikely(FNAME(is_rsvd_bits_set)(mmu, pte, walker->level))) { in FNAME()
410 walker->ptes[walker->level - 1] = pte; in FNAME()
413 walker->pt_access[walker->level - 1] = FNAME(gpte_access)(pt_access ^ walk_nx_mask); in FNAME()
414 } while (!FNAME(is_last_gpte)(mmu, walker->level, pte)); in FNAME()
420 walker->pte_access = FNAME(gpte_access)(pte_access ^ walk_nx_mask); in FNAME()
421 errcode = permission_fault(vcpu, mmu, walker->pte_access, pte_pkey, access); in FNAME()
425 gfn = gpte_to_gfn_lvl(pte, walker->level); in FNAME()
426 gfn += (addr & PT_LVL_OFFSET_MASK(walker->level)) >> PAGE_SHIFT; in FNAME()
429 if (walker->level > PG_LEVEL_4K && is_cpuid_PSE36()) in FNAME()
433 real_gpa = kvm_translate_gpa(vcpu, mmu, gfn_to_gpa(gfn), access, &walker->fault); in FNAME()
437 walker->gfn = real_gpa >> PAGE_SHIFT; in FNAME()
440 FNAME(protect_clean_gpte)(mmu, &walker->pte_access, pte); in FNAME()
451 ret = FNAME(update_accessed_dirty_bits)(vcpu, mmu, walker, in FNAME()
460 __func__, (u64)pte, walker->pte_access, in FNAME()
461 walker->pt_access[walker->level - 1]); in FNAME()
469 walker->fault.vector = PF_VECTOR; in FNAME()
470 walker->fault.error_code_valid = true; in FNAME()
471 walker->fault.error_code = errcode; in FNAME()
505 walker->fault.address = addr; in FNAME()
506 walker->fault.nested_page_fault = mmu != vcpu->arch.walk_mmu; in FNAME()
507 walker->fault.async_page_fault = false; in FNAME()
509 trace_kvm_mmu_walker_error(walker->fault.error_code); in FNAME()
513 static int FNAME(walk_addr)(struct guest_walker *walker, in FNAME()
516 return FNAME(walk_addr_generic)(walker, vcpu, vcpu->arch.mmu, addr, in FNAME()
753 struct guest_walker *walker, bool user_fault, in FNAME()
757 gfn_t mask = ~(KVM_PAGES_PER_HPAGE(walker->level) - 1); in FNAME()
760 if (!(walker->pte_access & ACC_WRITE_MASK || in FNAME()
764 for (level = walker->level; level <= walker->max_level; level++) { in FNAME()
765 gfn_t gfn = walker->gfn ^ walker->table_gfn[level - 1]; in FNAME()
790 struct guest_walker walker; in FNAME() local
802 r = FNAME(walk_addr)(&walker, vcpu, fault->addr, in FNAME()
811 kvm_inject_emulated_page_fault(vcpu, &walker.fault); in FNAME()
816 fault->gfn = walker.gfn; in FNAME()
831 &walker, fault->user, &vcpu->arch.write_fault_to_shadow_pgtable); in FNAME()
836 fault->max_level = walker.level; in FNAME()
838 r = kvm_faultin_pfn(vcpu, fault, walker.pte_access); in FNAME()
846 if (fault->write && !(walker.pte_access & ACC_WRITE_MASK) && in FNAME()
848 walker.pte_access |= ACC_WRITE_MASK; in FNAME()
849 walker.pte_access &= ~ACC_USER_MASK; in FNAME()
858 walker.pte_access &= ~ACC_EXEC_MASK; in FNAME()
870 r = FNAME(fetch)(vcpu, fault, &walker); in FNAME()
953 struct guest_walker walker; in FNAME() local
962 r = FNAME(walk_addr_generic)(&walker, vcpu, mmu, addr, access); in FNAME()
965 gpa = gfn_to_gpa(walker.gfn); in FNAME()
968 *exception = walker.fault; in FNAME()