Lines Matching refs:pp
358 #define PR_TYPES(pp) { \ argument
360 if (pp->p_vnode) \
362 if (PP_ISKAS(pp)) \
364 if (PP_ISFREE(pp)) \
366 if (hat_ismod(pp)) \
368 if (pp->p_toxic & PR_UE) \
370 if (pp->p_toxic & PR_MCE) \
462 page_settoxic(page_t *pp, uchar_t bits) in page_settoxic() argument
464 atomic_or_8(&pp->p_toxic, bits); in page_settoxic()
475 page_clrtoxic(page_t *pp, uchar_t bits) in page_clrtoxic() argument
477 ASSERT((bits & PR_CAPTURE) || PAGE_EXCL(pp)); in page_clrtoxic()
478 atomic_and_8(&pp->p_toxic, ~bits); in page_clrtoxic()
486 page_retire_done(page_t *pp, int code) in page_retire_done() argument
492 if (pp != NULL) { in page_retire_done()
493 pa = mmu_ptob((uint64_t)pp->p_pagenum); in page_retire_done()
515 if (pp != NULL) { in page_retire_done()
516 page_settoxic(pp, PR_MSG); in page_retire_done()
530 page_retire_destroy(page_t *pp) in page_retire_destroy() argument
532 u_offset_t off = (u_offset_t)((uintptr_t)pp); in page_retire_destroy()
534 ASSERT(PAGE_EXCL(pp)); in page_retire_destroy()
535 ASSERT(!PP_ISFREE(pp)); in page_retire_destroy()
536 ASSERT(pp->p_szc == 0); in page_retire_destroy()
537 ASSERT(!hat_page_is_mapped(pp)); in page_retire_destroy()
538 ASSERT(!pp->p_vnode); in page_retire_destroy()
540 page_clr_all_props(pp); in page_retire_destroy()
541 pagescrub(pp, 0, MMU_PAGESIZE); in page_retire_destroy()
543 pp->p_next = NULL; in page_retire_destroy()
544 pp->p_prev = NULL; in page_retire_destroy()
545 if (page_hashin(pp, retired_pages, off, NULL) == 0) { in page_retire_destroy()
546 cmn_err(CE_PANIC, "retired page %p hashin failed", (void *)pp); in page_retire_destroy()
549 page_settoxic(pp, PR_RETIRED); in page_retire_destroy()
552 if (pp->p_toxic & PR_FMA) { in page_retire_destroy()
554 } else if (pp->p_toxic & PR_UE) { in page_retire_destroy()
564 page_unlock(pp); in page_retire_destroy()
597 page_clear_transient_ue(page_t *pp) in page_clear_transient_ue() argument
607 ASSERT(PAGE_EXCL(pp)); in page_clear_transient_ue()
608 ASSERT(PP_PR_REQ(pp)); in page_clear_transient_ue()
609 ASSERT(pp->p_szc == 0); in page_clear_transient_ue()
610 ASSERT(!hat_page_is_mapped(pp)); in page_clear_transient_ue()
616 pagescrub(pp, 0, PAGESIZE); in page_clear_transient_ue()
625 kaddr = ppmapin(pp, PROT_READ|PROT_WRITE, (caddr_t)-1); in page_clear_transient_ue()
627 pa = ptob((uint64_t)page_pptonum(pp)); in page_clear_transient_ue()
687 page_retire_transient_ue(page_t *pp) in page_retire_transient_ue() argument
689 ASSERT(PAGE_EXCL(pp)); in page_retire_transient_ue()
690 ASSERT(!hat_page_is_mapped(pp)); in page_retire_transient_ue()
697 if (pp->p_toxic & PR_UE_SCRUBBED) { in page_retire_transient_ue()
702 if (page_clear_transient_ue(pp)) { in page_retire_transient_ue()
707 page_settoxic(pp, PR_UE_SCRUBBED); in page_retire_transient_ue()
715 page_clrtoxic(pp, PR_UE | PR_MCE | PR_MSG); in page_retire_transient_ue()
718 VN_DISPOSE(pp, B_FREE, 1, kcred); in page_retire_transient_ue()
759 page_t *pp; in pr_list_kstat_update() local
776 for (pp = retired_pages->v_pages->p_vpnext; in pr_list_kstat_update()
777 pp != retired_pages->v_pages; pp = pp->p_vpnext) { in pr_list_kstat_update()
796 page_t *pp; in pr_list_kstat_snapshot() local
811 pp = retired_pages->v_pages; in pr_list_kstat_snapshot()
813 (pp == NULL)) { in pr_list_kstat_snapshot()
817 kspmem->address = ptob(pp->p_pagenum); in pr_list_kstat_snapshot()
820 for (pp = pp->p_vpnext; pp != retired_pages->v_pages; in pr_list_kstat_snapshot()
821 pp = pp->p_vpnext, kspmem++) { in pr_list_kstat_snapshot()
824 kspmem->address = ptob(pp->p_pagenum); in pr_list_kstat_snapshot()
936 page_retire_thread_cb(page_t *pp) in page_retire_thread_cb() argument
939 if (!PP_ISKAS(pp) && page_trylock(pp, SE_EXCL)) { in page_retire_thread_cb()
941 page_unlock(pp); in page_retire_thread_cb()
954 page_retire_pp_finish(page_t *pp, void *notused, uint_t flags) in page_retire_pp_finish() argument
958 ASSERT(PAGE_EXCL(pp)); in page_retire_pp_finish()
959 ASSERT(pp->p_iolock_state == 0); in page_retire_pp_finish()
960 ASSERT(pp->p_szc == 0); in page_retire_pp_finish()
962 toxic = pp->p_toxic; in page_retire_pp_finish()
972 if (page_retire_transient_ue(pp)) { in page_retire_pp_finish()
974 (void) page_retire_done(pp, PRD_UE_SCRUBBED); in page_retire_pp_finish()
977 page_retire_destroy(pp); in page_retire_pp_finish()
978 (void) page_retire_done(pp, PRD_SUCCESS); in page_retire_pp_finish()
983 page_retire_destroy(pp); in page_retire_pp_finish()
984 (void) page_retire_done(pp, PRD_SUCCESS); in page_retire_pp_finish()
988 page_retire_destroy(pp); in page_retire_pp_finish()
989 (void) page_retire_done(pp, PRD_SUCCESS); in page_retire_pp_finish()
1032 page_t *pp; in page_retire() local
1037 pp = page_numtopp_nolock(mmu_btop(pa)); in page_retire()
1038 if (pp == NULL) { in page_retire()
1041 return (page_retire_done(pp, PRD_INVALID_PA)); in page_retire()
1043 if (PP_RETIRED(pp)) { in page_retire()
1045 return (page_retire_done(pp, PRD_DUPLICATE)); in page_retire()
1052 if ((reason & PR_UE) && !PP_TOXIC(pp)) { in page_retire()
1055 } else if (PP_PR_REQ(pp)) { in page_retire()
1057 return (page_retire_done(pp, PRD_DUPLICATE)); in page_retire()
1066 return (page_retire_done(pp, PRD_LIMIT)); in page_retire()
1070 page_settoxic(pp, reason); in page_retire()
1071 if (page_trycapture(pp, 0, CAPTURE_RETIRE, pp->p_vnode) == 0) { in page_retire()
1080 if (PP_RETIRED(pp)) { in page_retire()
1087 if (pp->p_toxic & PR_MSG) { in page_retire()
1088 return (page_retire_done(pp, PRD_FAILED)); in page_retire()
1090 return (page_retire_done(pp, PRD_PENDING)); in page_retire()
1114 page_unretire_pp(page_t *pp, int flags) in page_unretire_pp() argument
1121 page_try_reclaim_lock(pp, SE_EXCL, SE_RETIRED)) { in page_unretire_pp()
1122 ASSERT(PAGE_EXCL(pp)); in page_unretire_pp()
1124 if (!PP_RETIRED(pp)) { in page_unretire_pp()
1126 page_unlock(pp); in page_unretire_pp()
1127 return (page_retire_done(pp, PRD_UNR_NOT)); in page_unretire_pp()
1131 " page 0x%08x.%08x", mmu_ptob((uint64_t)pp->p_pagenum)); in page_unretire_pp()
1132 if (pp->p_toxic & PR_FMA) { in page_unretire_pp()
1134 } else if (pp->p_toxic & PR_UE) { in page_unretire_pp()
1141 page_clrtoxic(pp, PR_RETIRED); in page_unretire_pp()
1143 page_clrtoxic(pp, PR_TOXICFLAGS); in page_unretire_pp()
1147 page_destroy(pp, 0); in page_unretire_pp()
1150 page_hashout(pp, NULL); in page_unretire_pp()
1160 return (page_retire_done(pp, PRD_UNR_SUCCESS)); in page_unretire_pp()
1163 return (page_retire_done(pp, PRD_UNR_CANTLOCK)); in page_unretire_pp()
1182 page_t *pp; in page_unretire() local
1184 pp = page_numtopp_nolock(mmu_btop(pa)); in page_unretire()
1185 if (pp == NULL) { in page_unretire()
1186 return (page_retire_done(pp, PRD_INVALID_PA)); in page_unretire()
1189 return (page_unretire_pp(pp, PR_UNR_FREE)); in page_unretire()
1197 page_retire_check_pp(page_t *pp, uint64_t *errors) in page_retire_check_pp() argument
1201 if (PP_RETIRED(pp)) { in page_retire_check_pp()
1204 } else if (PP_PR_REQ(pp)) { in page_retire_check_pp()
1217 uint64_t toxic = (uint64_t)(pp->p_toxic & PR_ERRMASK); in page_retire_check_pp()
1244 page_t *pp; in page_retire_check() local
1250 pp = page_numtopp_nolock(mmu_btop(pa)); in page_retire_check()
1251 if (pp == NULL) { in page_retire_check()
1252 return (page_retire_done(pp, PRD_INVALID_PA)); in page_retire_check()
1255 return (page_retire_check_pp(pp, errors)); in page_retire_check()
1264 page_t *first, *pp, *cpp, *cpp2, *lpp; in page_retire_test() local
1276 pp = first = page_first(); in page_retire_test()
1278 if (pp->p_szc && PP_PAGEROOT(pp) == pp) { in page_retire_test()
1279 cpp = pp + 1; in page_retire_test()
1280 lpp = PP_ISFREE(pp)? pp : pp + 2; in page_retire_test()
1281 cpp2 = pp + 3; in page_retire_test()
1282 if (!page_trylock(lpp, pp == lpp? SE_EXCL : SE_SHARED)) in page_retire_test()
1297 } while ((pp = page_next(pp)) != first); in page_retire_test()