Lines Matching refs:pvo

78 static int64_t	mphyp_pte_synch(struct pvo_entry *pvo);
79 static int64_t mphyp_pte_clear(struct pvo_entry *pvo, uint64_t ptebit);
80 static int64_t mphyp_pte_unset(struct pvo_entry *pvo);
81 static int64_t mphyp_pte_insert(struct pvo_entry *pvo);
82 static int64_t mphyp_pte_unset_sp(struct pvo_entry *pvo);
83 static int64_t mphyp_pte_insert_sp(struct pvo_entry *pvo);
84 static int64_t mphyp_pte_replace_sp(struct pvo_entry *pvo);
296 mphyp_pte_synch(struct pvo_entry *pvo) in mphyp_pte_synch() argument
302 phyp_pft_hcall(H_READ, 0, pvo->pvo_pte.slot, 0, 0, &pte.pte_hi, in mphyp_pte_synch()
305 ((pvo->pvo_vpn >> (ADDR_API_SHFT64 - ADDR_PIDX_SHFT)) & in mphyp_pte_synch()
315 mphyp_pte_clear(struct pvo_entry *pvo, uint64_t ptebit) in mphyp_pte_clear() argument
329 PMAP_LOCK_ASSERT(pvo->pvo_pmap, MA_OWNED); in mphyp_pte_clear()
332 refchg = mphyp_pte_synch(pvo); in mphyp_pte_clear()
349 err = phyp_pft_hcall(H_CLEAR_MOD, 0, pvo->pvo_pte.slot, 0, 0, in mphyp_pte_clear()
356 err = phyp_pft_hcall(H_CLEAR_REF, 0, pvo->pvo_pte.slot, 0, 0, in mphyp_pte_clear()
369 mphyp_pte_unset(struct pvo_entry *pvo) in mphyp_pte_unset() argument
375 PMAP_LOCK_ASSERT(pvo->pvo_pmap, MA_OWNED); in mphyp_pte_unset()
377 moea64_pte_from_pvo(pvo, &pte); in mphyp_pte_unset()
379 err = phyp_pft_hcall(H_REMOVE, H_AVPN, pvo->pvo_pte.slot, in mphyp_pte_unset()
430 mphyp_pte_insert_locked(struct pvo_entry *pvo, struct lpte *pte) in mphyp_pte_insert_locked() argument
439 pvo->pvo_pte.slot &= ~7UL; /* Base slot address */ in mphyp_pte_insert_locked()
440 result = phyp_pft_hcall(H_ENTER, 0, pvo->pvo_pte.slot, pte->pte_hi, in mphyp_pte_insert_locked()
443 pvo->pvo_pte.slot = index; in mphyp_pte_insert_locked()
447 "(ptegidx: %#zx/%#lx, PTE %#lx/%#lx", result, pvo->pvo_pte.slot, in mphyp_pte_insert_locked()
453 pvo->pvo_vaddr ^= PVO_HID; in mphyp_pte_insert_locked()
455 pvo->pvo_pte.slot ^= (moea64_pteg_mask << 3); in mphyp_pte_insert_locked()
457 result = phyp_pft_hcall(H_ENTER, 0, pvo->pvo_pte.slot, in mphyp_pte_insert_locked()
460 pvo->pvo_pte.slot = index; in mphyp_pte_insert_locked()
471 mphyp_pte_evict_and_insert_locked(struct pvo_entry *pvo, struct lpte *pte) in mphyp_pte_evict_and_insert_locked() argument
479 index = mphyp_pte_spillable_ident(pvo->pvo_pte.slot, &evicted); in mphyp_pte_evict_and_insert_locked()
482 pvo->pvo_vaddr ^= PVO_HID; in mphyp_pte_evict_and_insert_locked()
484 pvo->pvo_pte.slot ^= (moea64_pteg_mask << 3); in mphyp_pte_evict_and_insert_locked()
485 index = mphyp_pte_spillable_ident(pvo->pvo_pte.slot, &evicted); in mphyp_pte_evict_and_insert_locked()
511 pvo->pvo_pte.slot = index; in mphyp_pte_evict_and_insert_locked()
521 mphyp_pte_insert(struct pvo_entry *pvo) in mphyp_pte_insert() argument
527 PMAP_LOCK_ASSERT(pvo->pvo_pmap, MA_OWNED); in mphyp_pte_insert()
530 moea64_pte_from_pvo(pvo, &pte); in mphyp_pte_insert()
535 ret = mphyp_pte_insert_locked(pvo, &pte); in mphyp_pte_insert()
545 ret = mphyp_pte_evict_and_insert_locked(pvo, &pte); in mphyp_pte_insert()
583 mphyp_pte_unset_sp(struct pvo_entry *pvo) in mphyp_pte_unset_sp() argument
591 pm = pvo->pvo_pmap; in mphyp_pte_unset_sp()
593 KASSERT((PVO_VADDR(pvo) & HPT_SP_MASK) == 0, in mphyp_pte_unset_sp()
594 ("%s: va %#jx unaligned", __func__, (uintmax_t)PVO_VADDR(pvo))); in mphyp_pte_unset_sp()
597 eva = PVO_VADDR(pvo) + HPT_SP_SIZE; in mphyp_pte_unset_sp()
599 for (; pvo != NULL && PVO_VADDR(pvo) < eva; in mphyp_pte_unset_sp()
600 pvo = RB_NEXT(pvo_tree, &pm->pmap_pvo, pvo)) { in mphyp_pte_unset_sp()
601 moea64_pte_from_pvo(pvo, &pte); in mphyp_pte_unset_sp()
603 err = phyp_pft_hcall(H_REMOVE, H_AVPN, pvo->pvo_pte.slot, in mphyp_pte_unset_sp()
618 mphyp_pte_insert_sp(struct pvo_entry *pvo) in mphyp_pte_insert_sp() argument
626 pm = pvo->pvo_pmap; in mphyp_pte_insert_sp()
628 KASSERT((PVO_VADDR(pvo) & HPT_SP_MASK) == 0, in mphyp_pte_insert_sp()
629 ("%s: va %#jx unaligned", __func__, (uintmax_t)PVO_VADDR(pvo))); in mphyp_pte_insert_sp()
631 eva = PVO_VADDR(pvo) + HPT_SP_SIZE; in mphyp_pte_insert_sp()
636 for (; pvo != NULL && PVO_VADDR(pvo) < eva; in mphyp_pte_insert_sp()
637 pvo = RB_NEXT(pvo_tree, &pm->pmap_pvo, pvo)) { in mphyp_pte_insert_sp()
639 moea64_pte_from_pvo(pvo, &pte); in mphyp_pte_insert_sp()
641 ret = mphyp_pte_insert_locked(pvo, &pte); in mphyp_pte_insert_sp()
650 mphyp_pte_evict_and_insert_locked(pvo, &pte); in mphyp_pte_insert_sp()
661 mphyp_pte_replace_sp(struct pvo_entry *pvo) in mphyp_pte_replace_sp() argument
665 refchg = mphyp_pte_unset_sp(pvo); in mphyp_pte_replace_sp()
666 mphyp_pte_insert_sp(pvo); in mphyp_pte_replace_sp()