Lines Matching refs:pp
360 #define PR_TYPES(pp) { \ argument
362 if (pp->p_vnode) \
364 if (PP_ISKAS(pp)) \
366 if (PP_ISFREE(pp)) \
368 if (hat_ismod(pp)) \
370 if (pp->p_toxic & PR_UE) \
372 if (pp->p_toxic & PR_MCE) \
464 page_settoxic(page_t *pp, uchar_t bits) in page_settoxic() argument
466 atomic_or_8(&pp->p_toxic, bits); in page_settoxic()
477 page_clrtoxic(page_t *pp, uchar_t bits) in page_clrtoxic() argument
479 ASSERT((bits & PR_CAPTURE) || PAGE_EXCL(pp)); in page_clrtoxic()
480 atomic_and_8(&pp->p_toxic, ~bits); in page_clrtoxic()
488 page_retire_done(page_t *pp, int code) in page_retire_done() argument
494 if (pp != NULL) { in page_retire_done()
495 pa = mmu_ptob((uint64_t)pp->p_pagenum); in page_retire_done()
517 if (pp != NULL) { in page_retire_done()
518 page_settoxic(pp, PR_MSG); in page_retire_done()
532 page_retire_destroy(page_t *pp) in page_retire_destroy() argument
534 u_offset_t off = (u_offset_t)((uintptr_t)pp); in page_retire_destroy()
536 ASSERT(PAGE_EXCL(pp)); in page_retire_destroy()
537 ASSERT(!PP_ISFREE(pp)); in page_retire_destroy()
538 ASSERT(pp->p_szc == 0); in page_retire_destroy()
539 ASSERT(!hat_page_is_mapped(pp)); in page_retire_destroy()
540 ASSERT(!pp->p_vnode); in page_retire_destroy()
542 page_clr_all_props(pp); in page_retire_destroy()
543 pagescrub(pp, 0, MMU_PAGESIZE); in page_retire_destroy()
545 pp->p_next = NULL; in page_retire_destroy()
546 pp->p_prev = NULL; in page_retire_destroy()
547 if (page_hashin(pp, retired_pages, off, NULL) == 0) { in page_retire_destroy()
548 cmn_err(CE_PANIC, "retired page %p hashin failed", (void *)pp); in page_retire_destroy()
551 page_settoxic(pp, PR_RETIRED); in page_retire_destroy()
554 if (pp->p_toxic & PR_FMA) { in page_retire_destroy()
556 } else if (pp->p_toxic & PR_UE) { in page_retire_destroy()
566 page_unlock(pp); in page_retire_destroy()
599 page_clear_transient_ue(page_t *pp) in page_clear_transient_ue() argument
609 ASSERT(PAGE_EXCL(pp)); in page_clear_transient_ue()
610 ASSERT(PP_PR_REQ(pp)); in page_clear_transient_ue()
611 ASSERT(pp->p_szc == 0); in page_clear_transient_ue()
612 ASSERT(!hat_page_is_mapped(pp)); in page_clear_transient_ue()
618 pagescrub(pp, 0, PAGESIZE); in page_clear_transient_ue()
627 kaddr = ppmapin(pp, PROT_READ|PROT_WRITE, (caddr_t)-1); in page_clear_transient_ue()
629 pa = ptob((uint64_t)page_pptonum(pp)); in page_clear_transient_ue()
690 page_retire_transient_ue(page_t *pp) in page_retire_transient_ue() argument
692 ASSERT(PAGE_EXCL(pp)); in page_retire_transient_ue()
693 ASSERT(!hat_page_is_mapped(pp)); in page_retire_transient_ue()
700 if (pp->p_toxic & PR_UE_SCRUBBED) { in page_retire_transient_ue()
705 if (page_clear_transient_ue(pp)) { in page_retire_transient_ue()
710 page_settoxic(pp, PR_UE_SCRUBBED); in page_retire_transient_ue()
718 page_clrtoxic(pp, PR_UE | PR_MCE | PR_MSG); in page_retire_transient_ue()
721 VN_DISPOSE(pp, B_FREE, 1, kcred); in page_retire_transient_ue()
762 page_t *pp; in pr_list_kstat_update() local
779 for (pp = retired_pages->v_pages->p_vpnext; in pr_list_kstat_update()
780 pp != retired_pages->v_pages; pp = pp->p_vpnext) { in pr_list_kstat_update()
799 page_t *pp; in pr_list_kstat_snapshot() local
814 pp = retired_pages->v_pages; in pr_list_kstat_snapshot()
816 (pp == NULL)) { in pr_list_kstat_snapshot()
820 kspmem->address = ptob(pp->p_pagenum); in pr_list_kstat_snapshot()
823 for (pp = pp->p_vpnext; pp != retired_pages->v_pages; in pr_list_kstat_snapshot()
824 pp = pp->p_vpnext, kspmem++) { in pr_list_kstat_snapshot()
827 kspmem->address = ptob(pp->p_pagenum); in pr_list_kstat_snapshot()
937 page_retire_thread_cb(page_t *pp) in page_retire_thread_cb() argument
940 if (!PP_ISKAS(pp) && page_trylock(pp, SE_EXCL)) { in page_retire_thread_cb()
942 page_unlock(pp); in page_retire_thread_cb()
955 page_retire_pp_finish(page_t *pp, void *notused, uint_t flags) in page_retire_pp_finish() argument
959 ASSERT(PAGE_EXCL(pp)); in page_retire_pp_finish()
960 ASSERT(pp->p_iolock_state == 0); in page_retire_pp_finish()
961 ASSERT(pp->p_szc == 0); in page_retire_pp_finish()
963 toxic = pp->p_toxic; in page_retire_pp_finish()
973 if (page_retire_transient_ue(pp)) { in page_retire_pp_finish()
975 (void) page_retire_done(pp, PRD_UE_SCRUBBED); in page_retire_pp_finish()
978 page_retire_destroy(pp); in page_retire_pp_finish()
979 (void) page_retire_done(pp, PRD_SUCCESS); in page_retire_pp_finish()
984 page_retire_destroy(pp); in page_retire_pp_finish()
985 (void) page_retire_done(pp, PRD_SUCCESS); in page_retire_pp_finish()
989 page_retire_destroy(pp); in page_retire_pp_finish()
990 (void) page_retire_done(pp, PRD_SUCCESS); in page_retire_pp_finish()
1033 page_t *pp; in page_retire() local
1038 pp = page_numtopp_nolock(mmu_btop(pa)); in page_retire()
1039 if (pp == NULL) { in page_retire()
1042 return (page_retire_done(pp, PRD_INVALID_PA)); in page_retire()
1044 if (PP_RETIRED(pp)) { in page_retire()
1046 return (page_retire_done(pp, PRD_DUPLICATE)); in page_retire()
1053 if ((reason & PR_UE) && !PP_TOXIC(pp)) { in page_retire()
1056 } else if (PP_PR_REQ(pp)) { in page_retire()
1058 return (page_retire_done(pp, PRD_DUPLICATE)); in page_retire()
1067 return (page_retire_done(pp, PRD_LIMIT)); in page_retire()
1071 page_settoxic(pp, reason); in page_retire()
1072 if (page_trycapture(pp, 0, CAPTURE_RETIRE, pp->p_vnode) == 0) { in page_retire()
1081 if (PP_RETIRED(pp)) { in page_retire()
1088 if (pp->p_toxic & PR_MSG) { in page_retire()
1089 return (page_retire_done(pp, PRD_FAILED)); in page_retire()
1091 return (page_retire_done(pp, PRD_PENDING)); in page_retire()
1115 page_unretire_pp(page_t *pp, int flags) in page_unretire_pp() argument
1122 page_try_reclaim_lock(pp, SE_EXCL, SE_RETIRED)) { in page_unretire_pp()
1123 ASSERT(PAGE_EXCL(pp)); in page_unretire_pp()
1125 if (!PP_RETIRED(pp)) { in page_unretire_pp()
1127 page_unlock(pp); in page_unretire_pp()
1128 return (page_retire_done(pp, PRD_UNR_NOT)); in page_unretire_pp()
1132 " page 0x%08x.%08x", mmu_ptob((uint64_t)pp->p_pagenum)); in page_unretire_pp()
1133 if (pp->p_toxic & PR_FMA) { in page_unretire_pp()
1135 } else if (pp->p_toxic & PR_UE) { in page_unretire_pp()
1142 page_clrtoxic(pp, PR_RETIRED); in page_unretire_pp()
1144 page_clrtoxic(pp, PR_TOXICFLAGS); in page_unretire_pp()
1148 page_destroy(pp, 0); in page_unretire_pp()
1151 page_hashout(pp, NULL); in page_unretire_pp()
1161 return (page_retire_done(pp, PRD_UNR_SUCCESS)); in page_unretire_pp()
1164 return (page_retire_done(pp, PRD_UNR_CANTLOCK)); in page_unretire_pp()
1183 page_t *pp; in page_unretire() local
1185 pp = page_numtopp_nolock(mmu_btop(pa)); in page_unretire()
1186 if (pp == NULL) { in page_unretire()
1187 return (page_retire_done(pp, PRD_INVALID_PA)); in page_unretire()
1190 return (page_unretire_pp(pp, PR_UNR_FREE)); in page_unretire()
1198 page_retire_check_pp(page_t *pp, uint64_t *errors) in page_retire_check_pp() argument
1202 if (PP_RETIRED(pp)) { in page_retire_check_pp()
1205 } else if (PP_PR_REQ(pp)) { in page_retire_check_pp()
1218 uint64_t toxic = (uint64_t)(pp->p_toxic & PR_ERRMASK); in page_retire_check_pp()
1245 page_t *pp; in page_retire_check() local
1251 pp = page_numtopp_nolock(mmu_btop(pa)); in page_retire_check()
1252 if (pp == NULL) { in page_retire_check()
1253 return (page_retire_done(pp, PRD_INVALID_PA)); in page_retire_check()
1256 return (page_retire_check_pp(pp, errors)); in page_retire_check()
1265 page_t *first, *pp, *cpp, *cpp2, *lpp; in page_retire_test() local
1277 pp = first = page_first(); in page_retire_test()
1279 if (pp->p_szc && PP_PAGEROOT(pp) == pp) { in page_retire_test()
1280 cpp = pp + 1; in page_retire_test()
1281 lpp = PP_ISFREE(pp)? pp : pp + 2; in page_retire_test()
1282 cpp2 = pp + 3; in page_retire_test()
1283 if (!page_trylock(lpp, pp == lpp? SE_EXCL : SE_SHARED)) in page_retire_test()
1298 } while ((pp = page_next(pp)) != first); in page_retire_test()