Lines Matching refs:walker

237 					     struct guest_walker *walker,  in FNAME()
250 for (level = walker->max_level; level >= walker->level; --level) { in FNAME()
251 pte = orig_pte = walker->ptes[level - 1]; in FNAME()
252 table_gfn = walker->table_gfn[level - 1]; in FNAME()
253 ptep_user = walker->ptep_user[level - 1]; in FNAME()
259 if (level == walker->level && write_fault && in FNAME()
284 if (unlikely(!walker->pte_writable[level - 1])) in FNAME()
292 walker->ptes[level - 1] = pte; in FNAME()
340 static int FNAME(walk_addr_generic)(struct guest_walker *walker, in FNAME()
364 walker->level = mmu->root_level; in FNAME()
370 if (walker->level == PT32E_ROOT_LEVEL) { in FNAME()
372 trace_kvm_mmu_paging_element(pte, walker->level); in FNAME()
375 --walker->level; in FNAME()
378 walker->max_level = walker->level; in FNAME()
389 ++walker->level; in FNAME()
395 --walker->level; in FNAME()
397 index = PT_INDEX(addr, walker->level); in FNAME()
402 BUG_ON(walker->level < 1); in FNAME()
403 walker->table_gfn[walker->level - 1] = table_gfn; in FNAME()
404 walker->pte_gpa[walker->level - 1] = pte_gpa; in FNAME()
408 &walker->fault); in FNAME()
424 &walker->pte_writable[walker->level - 1]); in FNAME()
431 walker->ptep_user[walker->level - 1] = ptep_user; in FNAME()
433 trace_kvm_mmu_paging_element(pte, walker->level); in FNAME()
444 if (unlikely(FNAME(is_rsvd_bits_set)(mmu, pte, walker->level))) { in FNAME()
449 walker->ptes[walker->level - 1] = pte; in FNAME()
452 walker->pt_access[walker->level - 1] = FNAME(gpte_access)(pt_access ^ walk_nx_mask); in FNAME()
453 } while (!FNAME(is_last_gpte)(mmu, walker->level, pte)); in FNAME()
459 walker->pte_access = FNAME(gpte_access)(pte_access ^ walk_nx_mask); in FNAME()
460 errcode = permission_fault(vcpu, mmu, walker->pte_access, pte_pkey, access); in FNAME()
464 gfn = gpte_to_gfn_lvl(pte, walker->level); in FNAME()
465 gfn += (addr & PT_LVL_OFFSET_MASK(walker->level)) >> PAGE_SHIFT; in FNAME()
467 if (PTTYPE == 32 && walker->level > PG_LEVEL_4K && is_cpuid_PSE36()) in FNAME()
470 real_gpa = mmu->translate_gpa(vcpu, gfn_to_gpa(gfn), access, &walker->fault); in FNAME()
474 walker->gfn = real_gpa >> PAGE_SHIFT; in FNAME()
477 FNAME(protect_clean_gpte)(mmu, &walker->pte_access, pte); in FNAME()
488 ret = FNAME(update_accessed_dirty_bits)(vcpu, mmu, walker, in FNAME()
497 __func__, (u64)pte, walker->pte_access, in FNAME()
498 walker->pt_access[walker->level - 1]); in FNAME()
506 walker->fault.vector = PF_VECTOR; in FNAME()
507 walker->fault.error_code_valid = true; in FNAME()
508 walker->fault.error_code = errcode; in FNAME()
535 walker->fault.address = addr; in FNAME()
536 walker->fault.nested_page_fault = mmu != vcpu->arch.walk_mmu; in FNAME()
537 walker->fault.async_page_fault = false; in FNAME()
539 trace_kvm_mmu_walker_error(walker->fault.error_code); in FNAME()
543 static int FNAME(walk_addr)(struct guest_walker *walker, in FNAME()
546 return FNAME(walk_addr_generic)(walker, vcpu, vcpu->arch.mmu, addr, in FNAME()
551 static int FNAME(walk_addr_nested)(struct guest_walker *walker, in FNAME()
555 return FNAME(walk_addr_generic)(walker, vcpu, &vcpu->arch.nested_mmu, in FNAME()
798 struct guest_walker *walker, bool user_fault, in FNAME()
802 gfn_t mask = ~(KVM_PAGES_PER_HPAGE(walker->level) - 1); in FNAME()
805 if (!(walker->pte_access & ACC_WRITE_MASK || in FNAME()
809 for (level = walker->level; level <= walker->max_level; level++) { in FNAME()
810 gfn_t gfn = walker->gfn ^ walker->table_gfn[level - 1]; in FNAME()
835 struct guest_walker walker; in FNAME() local
848 r = FNAME(walk_addr)(&walker, vcpu, fault->addr, in FNAME()
857 kvm_inject_emulated_page_fault(vcpu, &walker.fault); in FNAME()
862 fault->gfn = walker.gfn; in FNAME()
877 &walker, fault->user, &vcpu->arch.write_fault_to_shadow_pgtable); in FNAME()
882 fault->max_level = walker.level; in FNAME()
890 if (handle_abnormal_pfn(vcpu, fault, walker.pte_access, &r)) in FNAME()
897 if (fault->write && !(walker.pte_access & ACC_WRITE_MASK) && in FNAME()
899 walker.pte_access |= ACC_WRITE_MASK; in FNAME()
900 walker.pte_access &= ~ACC_USER_MASK; in FNAME()
909 walker.pte_access &= ~ACC_EXEC_MASK; in FNAME()
922 r = FNAME(fetch)(vcpu, fault, &walker); in FNAME()
1006 struct guest_walker walker; in FNAME() local
1010 r = FNAME(walk_addr)(&walker, vcpu, addr, access); in FNAME()
1013 gpa = gfn_to_gpa(walker.gfn); in FNAME()
1016 *exception = walker.fault; in FNAME()
1027 struct guest_walker walker; in FNAME() local
1036 r = FNAME(walk_addr_nested)(&walker, vcpu, vaddr, access); in FNAME()
1039 gpa = gfn_to_gpa(walker.gfn); in FNAME()
1042 *exception = walker.fault; in FNAME()