Lines Matching refs:va
36 static int __is_tr_translated(struct thash_data *trp, u64 rid, u64 va) in __is_tr_translated() argument
39 && ((va-trp->vadr) < PSIZE(trp->ps))); in __is_tr_translated()
62 void machine_tlb_purge(u64 va, u64 ps) in machine_tlb_purge() argument
64 ia64_ptcl(va, ps << 2); in machine_tlb_purge()
116 struct thash_data *vsa_thash(union ia64_pta vpta, u64 va, u64 vrr, u64 *tag) in vsa_thash() argument
121 pfn = REGION_OFFSET(va) >> _REGION_PAGE_SIZE(vrr); in vsa_thash()
130 struct thash_data *__vtr_lookup(struct kvm_vcpu *vcpu, u64 va, int type) in __vtr_lookup() argument
137 rid = vcpu_get_rr(vcpu, va); in __vtr_lookup()
140 if (vcpu_quick_region_check(vcpu->arch.dtr_regions, va)) { in __vtr_lookup()
143 if (__is_tr_translated(trp, rid, va)) in __vtr_lookup()
148 if (vcpu_quick_region_check(vcpu->arch.itr_regions, va)) { in __vtr_lookup()
151 if (__is_tr_translated(trp, rid, va)) in __vtr_lookup()
199 void thash_vhpt_insert(struct kvm_vcpu *v, u64 pte, u64 itir, u64 va, int type) in thash_vhpt_insert() argument
204 mrr.val = ia64_get_rr(va); in thash_vhpt_insert()
205 phy_pte = translate_phy_pte(&pte, itir, va); in thash_vhpt_insert()
208 vhpt_insert(phy_pte, itir, va, pte); in thash_vhpt_insert()
212 ia64_itc(type, va, phy_pte, itir_ps(itir)); in thash_vhpt_insert()
224 struct thash_data *vhpt_lookup(u64 va) in vhpt_lookup() argument
229 head = (struct thash_data *)ia64_thash(va); in vhpt_lookup()
230 tag = ia64_ttag(va); in vhpt_lookup()
268 static void vtlb_purge(struct kvm_vcpu *v, u64 va, u64 ps) in vtlb_purge() argument
275 vrr.val = vcpu_get_rr(v, va); in vtlb_purge()
276 psbits = VMX(v, psbits[(va >> 61)]); in vtlb_purge()
277 start = va & ~((1UL << ps) - 1); in vtlb_purge()
299 static void vhpt_purge(struct kvm_vcpu *v, u64 va, u64 ps) in vhpt_purge() argument
305 start = va & ~((1UL << ps) - 1); in vhpt_purge()
306 rr.val = ia64_get_rr(va); in vhpt_purge()
317 machine_tlb_purge(va, ps); in vhpt_purge()
329 void vtlb_insert(struct kvm_vcpu *v, u64 pte, u64 itir, u64 va) in vtlb_insert() argument
336 vrr.val = vcpu_get_rr(v, va); in vtlb_insert()
338 VMX(v, psbits[va >> 61]) |= (1UL << vrr.ps); in vtlb_insert()
339 head = vsa_thash(hcb->pta, va, vrr.val, &tag); in vtlb_insert()
345 int vtr_find_overlap(struct kvm_vcpu *vcpu, u64 va, u64 ps, int type) in vtr_find_overlap() argument
351 rid = vcpu_get_rr(vcpu, va); in vtr_find_overlap()
353 end = va + PSIZE(ps); in vtr_find_overlap()
355 if (vcpu_quick_region_check(vcpu->arch.dtr_regions, va)) { in vtr_find_overlap()
358 if (__is_tr_overlap(trp, rid, va, end)) in vtr_find_overlap()
363 if (vcpu_quick_region_check(vcpu->arch.itr_regions, va)) { in vtr_find_overlap()
366 if (__is_tr_overlap(trp, rid, va, end)) in vtr_find_overlap()
377 void thash_purge_entries(struct kvm_vcpu *v, u64 va, u64 ps) in thash_purge_entries() argument
379 if (vcpu_quick_region_check(v->arch.tc_regions, va)) in thash_purge_entries()
380 vtlb_purge(v, va, ps); in thash_purge_entries()
381 vhpt_purge(v, va, ps); in thash_purge_entries()
384 void thash_purge_entries_remote(struct kvm_vcpu *v, u64 va, u64 ps) in thash_purge_entries_remote() argument
386 u64 old_va = va; in thash_purge_entries_remote()
387 va = REGION_OFFSET(va); in thash_purge_entries_remote()
389 vtlb_purge(v, va, ps); in thash_purge_entries_remote()
390 vhpt_purge(v, va, ps); in thash_purge_entries_remote()
393 u64 translate_phy_pte(u64 *pte, u64 itir, u64 va) in translate_phy_pte() argument
402 paddr = ((paddr & _PAGE_PPN_MASK) & ps_mask) | (va & ~ps_mask); in translate_phy_pte()
513 struct thash_data *vtlb_lookup(struct kvm_vcpu *v, u64 va, int is_data) in vtlb_lookup() argument
521 cch = __vtr_lookup(v, va, is_data); in vtlb_lookup()
525 if (vcpu_quick_region_check(v->arch.tc_regions, va) == 0) in vtlb_lookup()
528 psbits = VMX(v, psbits[(va >> 61)]); in vtlb_lookup()
529 vrr.val = vcpu_get_rr(v, va); in vtlb_lookup()
534 cch = vsa_thash(hcb->pta, va, vrr.val, &tag); in vtlb_lookup()