Lines Matching refs:ptep
156 static void kvm_set_invalid_pte(kvm_pte_t *ptep)
158 kvm_pte_t pte = *ptep;
159 WRITE_ONCE(*ptep, pte & ~KVM_PTE_VALID);
162 static void kvm_set_table_pte(kvm_pte_t *ptep, kvm_pte_t *childp)
164 kvm_pte_t old = *ptep, pte = kvm_phys_to_pte(__pa(childp));
170 smp_store_release(ptep, pte);
173 static bool kvm_set_valid_leaf_pte(kvm_pte_t *ptep, u64 pa, kvm_pte_t attr,
176 kvm_pte_t old = *ptep, pte = kvm_phys_to_pte(pa);
188 smp_store_release(ptep, pte);
193 u32 level, kvm_pte_t *ptep,
197 return walker->cb(addr, data->end, level, ptep, flag, walker->arg);
204 kvm_pte_t *ptep, u32 level)
208 kvm_pte_t *childp, pte = *ptep;
213 ret = kvm_pgtable_visitor_cb(data, addr, level, ptep,
218 ret = kvm_pgtable_visitor_cb(data, addr, level, ptep,
220 pte = *ptep;
239 ret = kvm_pgtable_visitor_cb(data, addr, level, ptep,
257 kvm_pte_t *ptep = &pgtable[idx];
262 ret = __kvm_pgtable_visit(data, ptep, level);
284 kvm_pte_t *ptep = &pgt->pgd[idx * PTRS_PER_PTE];
286 ret = __kvm_pgtable_walk(data, ptep, pgt->start_level);
343 kvm_pte_t *ptep, struct hyp_map_data *data)
350 WARN_ON(!kvm_set_valid_leaf_pte(ptep, phys, data->attr, level));
355 static int hyp_map_walker(u64 addr, u64 end, u32 level, kvm_pte_t *ptep,
360 if (hyp_map_walker_try_leaf(addr, end, level, ptep, arg))
370 kvm_set_table_pte(ptep, childp);
411 static int hyp_free_walker(u64 addr, u64 end, u32 level, kvm_pte_t *ptep,
414 free_page((unsigned long)kvm_pte_follow(*ptep));
466 kvm_pte_t *ptep,
480 if (kvm_pte_valid(*ptep))
481 put_page(virt_to_page(ptep));
483 if (kvm_set_valid_leaf_pte(ptep, phys, data->attr, level))
487 kvm_set_invalid_pte(ptep);
489 kvm_set_valid_leaf_pte(ptep, phys, data->attr, level);
496 kvm_pte_t *ptep,
505 kvm_set_invalid_pte(ptep);
513 data->anchor = ptep;
517 static int stage2_map_walk_leaf(u64 addr, u64 end, u32 level, kvm_pte_t *ptep,
520 kvm_pte_t *childp, pte = *ptep;
521 struct page *page = virt_to_page(ptep);
530 if (stage2_map_walker_try_leaf(addr, end, level, ptep, data))
549 kvm_set_invalid_pte(ptep);
554 kvm_set_table_pte(ptep, childp);
562 kvm_pte_t *ptep,
570 free_page((unsigned long)kvm_pte_follow(*ptep));
571 put_page(virt_to_page(ptep));
573 if (data->anchor == ptep) {
575 ret = stage2_map_walk_leaf(addr, end, level, ptep, data);
600 static int stage2_map_walker(u64 addr, u64 end, u32 level, kvm_pte_t *ptep,
607 return stage2_map_walk_table_pre(addr, end, level, ptep, data);
609 return stage2_map_walk_leaf(addr, end, level, ptep, data);
611 return stage2_map_walk_table_post(addr, end, level, ptep, data);
658 static int stage2_unmap_walker(u64 addr, u64 end, u32 level, kvm_pte_t *ptep,
663 kvm_pte_t pte = *ptep, *childp = NULL;
683 kvm_set_invalid_pte(ptep);
685 put_page(virt_to_page(ptep));
716 static int stage2_attr_walker(u64 addr, u64 end, u32 level, kvm_pte_t *ptep,
720 kvm_pte_t pte = *ptep;
737 WRITE_ONCE(*ptep, pte);
830 static int stage2_flush_walker(u64 addr, u64 end, u32 level, kvm_pte_t *ptep,
834 kvm_pte_t pte = *ptep;
878 static int stage2_free_walker(u64 addr, u64 end, u32 level, kvm_pte_t *ptep,
882 kvm_pte_t pte = *ptep;
887 put_page(virt_to_page(ptep));