Lines Matching refs:walker

234 					     struct guest_walker *walker,  in FNAME()
247 for (level = walker->max_level; level >= walker->level; --level) { in FNAME()
248 pte = orig_pte = walker->ptes[level - 1]; in FNAME()
249 table_gfn = walker->table_gfn[level - 1]; in FNAME()
250 ptep_user = walker->ptep_user[level - 1]; in FNAME()
256 if (level == walker->level && write_fault && in FNAME()
281 if (unlikely(!walker->pte_writable[level - 1])) in FNAME()
289 walker->ptes[level - 1] = pte; in FNAME()
308 static int FNAME(walk_addr_generic)(struct guest_walker *walker, in FNAME()
332 walker->level = mmu->root_level; in FNAME()
338 if (walker->level == PT32E_ROOT_LEVEL) { in FNAME()
340 trace_kvm_mmu_paging_element(pte, walker->level); in FNAME()
343 --walker->level; in FNAME()
346 walker->max_level = walker->level; in FNAME()
357 ++walker->level; in FNAME()
363 --walker->level; in FNAME()
365 index = PT_INDEX(addr, walker->level); in FNAME()
370 BUG_ON(walker->level < 1); in FNAME()
371 walker->table_gfn[walker->level - 1] = table_gfn; in FNAME()
372 walker->pte_gpa[walker->level - 1] = pte_gpa; in FNAME()
376 &walker->fault); in FNAME()
392 &walker->pte_writable[walker->level - 1]); in FNAME()
399 walker->ptep_user[walker->level - 1] = ptep_user; in FNAME()
401 trace_kvm_mmu_paging_element(pte, walker->level); in FNAME()
412 if (unlikely(FNAME(is_rsvd_bits_set)(mmu, pte, walker->level))) { in FNAME()
417 walker->ptes[walker->level - 1] = pte; in FNAME()
420 walker->pt_access[walker->level - 1] = FNAME(gpte_access)(pt_access ^ walk_nx_mask); in FNAME()
421 } while (!is_last_gpte(mmu, walker->level, pte)); in FNAME()
427 walker->pte_access = FNAME(gpte_access)(pte_access ^ walk_nx_mask); in FNAME()
428 errcode = permission_fault(vcpu, mmu, walker->pte_access, pte_pkey, access); in FNAME()
432 gfn = gpte_to_gfn_lvl(pte, walker->level); in FNAME()
433 gfn += (addr & PT_LVL_OFFSET_MASK(walker->level)) >> PAGE_SHIFT; in FNAME()
435 if (PTTYPE == 32 && walker->level > PG_LEVEL_4K && is_cpuid_PSE36()) in FNAME()
438 real_gpa = mmu->translate_gpa(vcpu, gfn_to_gpa(gfn), access, &walker->fault); in FNAME()
442 walker->gfn = real_gpa >> PAGE_SHIFT; in FNAME()
445 FNAME(protect_clean_gpte)(mmu, &walker->pte_access, pte); in FNAME()
456 ret = FNAME(update_accessed_dirty_bits)(vcpu, mmu, walker, in FNAME()
465 __func__, (u64)pte, walker->pte_access, in FNAME()
466 walker->pt_access[walker->level - 1]); in FNAME()
474 walker->fault.vector = PF_VECTOR; in FNAME()
475 walker->fault.error_code_valid = true; in FNAME()
476 walker->fault.error_code = errcode; in FNAME()
503 walker->fault.address = addr; in FNAME()
504 walker->fault.nested_page_fault = mmu != vcpu->arch.walk_mmu; in FNAME()
506 trace_kvm_mmu_walker_error(walker->fault.error_code); in FNAME()
510 static int FNAME(walk_addr)(struct guest_walker *walker, in FNAME()
513 return FNAME(walk_addr_generic)(walker, vcpu, vcpu->arch.mmu, addr, in FNAME()
518 static int FNAME(walk_addr_nested)(struct guest_walker *walker, in FNAME()
522 return FNAME(walk_addr_generic)(walker, vcpu, &vcpu->arch.nested_mmu, in FNAME()
750 struct guest_walker *walker, bool user_fault, in FNAME()
754 gfn_t mask = ~(KVM_PAGES_PER_HPAGE(walker->level) - 1); in FNAME()
757 if (!(walker->pte_access & ACC_WRITE_MASK || in FNAME()
761 for (level = walker->level; level <= walker->max_level; level++) { in FNAME()
762 gfn_t gfn = walker->gfn ^ walker->table_gfn[level - 1]; in FNAME()
790 struct guest_walker walker; in FNAME() local
808 r = FNAME(walk_addr)(&walker, vcpu, addr, error_code); in FNAME()
816 kvm_inject_emulated_page_fault(vcpu, &walker.fault); in FNAME()
821 if (page_fault_handle_page_track(vcpu, error_code, walker.gfn)) { in FNAME()
833 &walker, user_fault, &vcpu->arch.write_fault_to_shadow_pgtable); in FNAME()
838 max_level = walker.level; in FNAME()
843 if (try_async_pf(vcpu, prefault, walker.gfn, addr, &pfn, write_fault, in FNAME()
847 if (handle_abnormal_pfn(vcpu, addr, walker.gfn, pfn, walker.pte_access, &r)) in FNAME()
854 if (write_fault && !(walker.pte_access & ACC_WRITE_MASK) && in FNAME()
857 walker.pte_access |= ACC_WRITE_MASK; in FNAME()
858 walker.pte_access &= ~ACC_USER_MASK; in FNAME()
867 walker.pte_access &= ~ACC_EXEC_MASK; in FNAME()
879 r = FNAME(fetch)(vcpu, addr, &walker, error_code, max_level, pfn, in FNAME()
964 struct guest_walker walker; in FNAME() local
968 r = FNAME(walk_addr)(&walker, vcpu, addr, access); in FNAME()
971 gpa = gfn_to_gpa(walker.gfn); in FNAME()
974 *exception = walker.fault; in FNAME()
985 struct guest_walker walker; in FNAME() local
994 r = FNAME(walk_addr_nested)(&walker, vcpu, vaddr, access); in FNAME()
997 gpa = gfn_to_gpa(walker.gfn); in FNAME()
1000 *exception = walker.fault; in FNAME()