Lines Matching defs:pai
221 struct pmap_asid_info *pai;
224 LIST_FOREACH(pai, &ti->ti_pais, pai_link) {
225 KASSERT(pai != NULL);
226 KASSERT(PAI_PMAP(pai, ti) != pmap_kernel());
227 KASSERTMSG(pai->pai_asid > KERNEL_PID,
228 "pm %p asid %#x (%d)", PAI_PMAP(pai, ti), pai->pai_asid,
230 KASSERTMSG(pai->pai_asid <= ti->ti_asid_max,
231 "pm %p asid %#x", PAI_PMAP(pai, ti), pai->pai_asid);
232 KASSERTMSG(TLBINFO_ASID_INUSE_P(ti, pai->pai_asid),
233 "pm %p asid %u", PAI_PMAP(pai, ti), pai->pai_asid);
235 KASSERT(pmap_tlb_intersecting_active_p(PAI_PMAP(pai, ti), ti));
245 pmap_tlb_pai_reset(struct pmap_tlb_info *ti, struct pmap_asid_info *pai,
249 UVMHIST_CALLARGS(maphist, "(ti=%#jx, pai=%#jx, pm=%#jx): asid %u",
250 (uintptr_t)ti, (uintptr_t)pai, (uintptr_t)pm, pai->pai_asid);
255 KASSERT(pai->pai_asid > KERNEL_PID);
256 KASSERT(pai->pai_asid <= ti->ti_asid_max);
261 LIST_REMOVE(pai, pai_link);
263 pai->pai_link.le_prev = NULL; /* tagged as unlinked */
277 UVMHIST_LOG(maphist, " ... asid %u flushed", pai->pai_asid, 0,
279 tlb_invalidate_asids(pai->pai_asid, pai->pai_asid);
281 if (TLBINFO_ASID_INUSE_P(ti, pai->pai_asid)) {
283 pai->pai_asid, 0, 0, 0);
284 TLBINFO_ASID_MARK_UNUSED(ti, pai->pai_asid);
296 pai->pai_asid = 0;
515 struct pmap_asid_info *pai, *next;
516 for (pai = LIST_FIRST(&ti->ti_pais); pai != NULL; pai = next) {
517 struct pmap * const pm = PAI_PMAP(pai, ti);
518 next = LIST_NEXT(pai, pai_link);
520 KASSERT(pai->pai_asid > KERNEL_PID);
523 if (!TLBINFO_ASID_INUSE_P(ti, pai->pai_asid)) {
524 TLBINFO_ASID_MARK_USED(ti, pai->pai_asid);
530 if (TLBINFO_ASID_INUSE_P(ti, pai->pai_asid)) {
533 pmap_tlb_pai_reset(ti, pai, pm);
570 struct pmap_asid_info * const pai = PMAP_PAI(ti->ti_victim, ti);
573 UVMHIST_LOG(maphist, "... onproc asid %jd", pai->pai_asid, 0, 0, 0);
578 KASSERT(pai->pai_asid > KERNEL_PID);
580 tlb_invalidate_asids(pai->pai_asid, pai->pai_asid);
582 } else if (pai->pai_asid) {
583 UVMHIST_LOG(maphist, "... not active asid %jd", pai->pai_asid, 0, 0, 0);
590 pmap_tlb_pai_reset(ti, pai, PAI_PMAP(pai, ti));
685 struct pmap_asid_info * const pai = PMAP_PAI(pm, ti);
697 KASSERT(pai->pai_asid);
738 pmap_tlb_pai_reset(ti, pai, pm);
756 struct pmap_asid_info * const pai = PMAP_PAI(pm, ti);
767 if (pm == pmap_kernel() || PMAP_PAI_ASIDVALID_P(pai, ti)) {
769 rv = tlb_update_addr(va, pai->pai_asid, pte,
774 rv, va, pai->pai_asid, pte_value(pte));
777 pm, pai->pai_asid, va, pte_value(pte), rv);
796 struct pmap_asid_info * const pai = PMAP_PAI(pm, ti);
800 (uintptr_t)pm, va, (uintptr_t)ti, pai->pai_asid);
803 if (pm == pmap_kernel() || PMAP_PAI_ASIDVALID_P(pai, ti)) {
806 va, pai->pai_asid, 0, 0);
807 tlb_invalidate_addr(va, pai->pai_asid);
819 struct pmap_asid_info *pai)
826 KASSERT(pai->pai_asid == 0);
827 KASSERT(pai->pai_link.le_prev == NULL);
879 * Mark it as used and insert the pai into the list of active asids.
882 pai->pai_asid = ti->ti_asid_hint++;
888 tlb_invalidate_asids(pai->pai_asid, pai->pai_asid);
891 TLBINFO_ASID_MARK_USED(ti, pai->pai_asid);
892 LIST_INSERT_HEAD(&ti->ti_pais, pai, pai_link);
920 struct pmap_asid_info * const pai = PMAP_PAI(pm, ti);
935 KASSERT(pai->pai_asid <= KERNEL_PID || pai->pai_link.le_prev != NULL);
936 KASSERT(pai->pai_asid > KERNEL_PID || pai->pai_link.le_prev == NULL);
952 } else if (__predict_false(!PMAP_PAI_ASIDVALID_P(pai, ti))) {
966 pmap_tlb_asid_alloc(ti, pm, pai);
967 UVMHIST_LOG(maphist, "allocated asid %#jx", pai->pai_asid,
985 ci->ci_pmap_asid_cur = pai->pai_asid;
986 UVMHIST_LOG(maphist, "setting asid to %#jx", pai->pai_asid,
988 tlb_set_asid(pai->pai_asid, pm);
1053 struct pmap_asid_info * const pai = PMAP_PAI(pm, ti);
1055 if (PMAP_PAI_ASIDVALID_P(pai, ti)) {
1063 pmap_tlb_pai_reset(ti, pai, pm);
1065 KASSERT(pai->pai_link.le_prev == NULL);
1083 struct pmap_asid_info * const pai = PMAP_PAI(pm, ti);
1085 if (pai->pai_asid > KERNEL_PID) {
1086 if (curcpu()->ci_pmap_asid_cur == pai->pai_asid) {
1087 tlb_invalidate_asids(pai->pai_asid, pai->pai_asid);
1089 pmap_tlb_pai_reset(ti, pai, pm);
1121 struct pmap_asid_info * const pai = PMAP_PAI(pm, ti);
1123 if (pm == pmap_kernel() || pai->pai_asid > KERNEL_PID)