Home | History | Annotate | Download | only in pmap

Lines Matching defs:stb

196  * This is used when allocating or freeing a pmap_segtab_t.  The stb
205 pmap_check_stb(pmap_segtab_t *stb, const char *caller, const char *why)
209 if (stb->seg_ppg[i] != NULL) {
213 UVMHIST_CALLARGS(pmapxtabhist, "stb=%#jx",
214 (uintptr_t)stb, 0, 0, 0);
216 if (stb->seg_ppg[j] != NULL)
217 printf("%s: stb->seg_ppg[%zu] = %p\n",
218 caller, j, stb->seg_ppg[j]);
221 caller, i, stb->seg_ppg[i], why);
302 pmap_segtab_t *stb = pmap->pm_segtab;
310 stb = stb->seg_seg[(va >> segshift) & segtab_mask];
311 if (stb == NULL)
315 return stb->seg_ppg[(va >> SEGSHIFT) & segtab_mask];
644 pmap_segtab_t *stb;
649 if (__predict_true((stb = pmap_segtab_info.segalloc.free_segtab) != NULL)) {
650 pmap_segtab_info.segalloc.free_segtab = stb->seg_next;
652 stb->seg_next = NULL;
654 UVMHIST_LOG(pmapxtabhist, "freelist stb=%#jx",
655 (uintptr_t)stb, 0, 0, 0);
660 if (__predict_false(stb == NULL)) {
673 stb = (pmap_segtab_t *)PMAP_MAP_SEGTABPAGE(stb_pa);
674 UVMHIST_LOG(pmapxtabhist, "new stb=%#jx", (uintptr_t)stb, 0,
677 CTASSERT(NBPG / sizeof(*stb) == 1);
678 const size_t n = NBPG / sizeof(*stb);
684 stb[i].seg_next = &stb[i + 1];
690 stb[n - 1].seg_next = pmap_segtab_info.segalloc.free_segtab;
691 pmap_segtab_info.segalloc.free_segtab = stb + 1;
699 pmap_page_attach(pmap, (vaddr_t)stb, stb_pg, &pmap->pm_segtab_list, 0);
701 pmap_check_stb(stb, __func__,
704 UVMHIST_LOG(pmapxtabhist, "... stb %#jx found on freelist %zu",
705 (uintptr_t)stb, found_on_freelist, 0, 0);
707 return stb;
735 pmap_segtab_free(pmap_segtab_t *stb)
738 UVMHIST_CALLARGS(pmaphist, "stb %#jx", (uintptr_t)stb, 0, 0, 0);
744 stb->seg_next = pmap_segtab_info.segalloc.free_segtab;
745 pmap_segtab_info.segalloc.free_segtab = stb;
820 pmap_segtab_t *stb = *stb_p;
824 (uintptr_t)pmap, (uintptr_t)stb, free_stb, 0);
833 if (stb->seg_seg[i] != NULL) {
836 pmap_segtab_release(pmap, &stb->seg_seg[i],
838 KASSERT(stb->seg_seg[i] == NULL);
846 pmap_ptpage_t *ppg = stb->seg_ppg[i];
857 stb->seg_ppg[i] = NULL;
862 pmap_check_stb(stb, __func__,
865 const vaddr_t kva = (vaddr_t)stb;
868 pmap_segtab_free(stb);
1085 pmap_segtab_t *stb = pmap->pm_segtab;
1092 pmap_segtab_t ** const stb_p = &stb->seg_seg[idx];
1096 if (__predict_false((stb = *stb_p) == NULL)) {
1097 stb = pmap_segtab_alloc(pmap);
1099 pmap_segtab_t *ostb = atomic_cas_ptr(stb_p, NULL, stb);
1101 const vaddr_t kva = (vaddr_t)stb;
1106 pmap_segtab_free(stb);
1107 stb = ostb;
1110 *stb_p = stb;
1129 return &stb->seg_ppg[idx];