Lines Matching defs:pp
80 hat_kpm_mapin(struct page *pp, struct kpme *kpme)
90 if (pp == NULL || PAGE_LOCKED(pp) == 0) {
91 cmn_err(CE_WARN, "hat_kpm_mapin: pp zero or not locked");
95 pml = sfmmu_mlist_enter(pp);
96 ASSERT(pp->p_kpmref >= 0);
98 vaddr = (pp->p_kpmref == 0) ?
99 sfmmu_kpm_mapin(pp) : hat_kpm_page2va(pp, 1);
106 if ((sfmmu_kpme_lookup(kpme, pp)) == 0)
107 sfmmu_kpme_add(kpme, pp);
109 ASSERT(pp->p_kpmref > 0);
112 pp->p_kpmref++;
129 hat_kpm_mapout(struct page *pp, struct kpme *kpme, caddr_t vaddr)
143 if (pp == NULL || PAGE_LOCKED(pp) == 0) {
149 ASSERT(pp == kpme->kpe_page);
150 pp = kpme->kpe_page;
151 pml = sfmmu_mlist_enter(pp);
153 if (sfmmu_kpme_lookup(kpme, pp) == 0)
154 panic("hat_kpm_mapout: kpme not found pp=%p",
155 (void *)pp);
157 ASSERT(pp->p_kpmref > 0);
158 sfmmu_kpme_sub(kpme, pp);
161 pml = sfmmu_mlist_enter(pp);
162 pp->p_kpmref--;
165 ASSERT(pp->p_kpmref >= 0);
166 if (pp->p_kpmref == 0)
167 sfmmu_kpm_mapout(pp, vaddr);
213 * Return the kpm virtual address for the page at pp.
223 hat_kpm_page2va(struct page *pp, int checkswap)
230 paddr = ptob(pp->p_pagenum);
233 if (checkswap && pp->p_vnode && IS_SWAPFSVP(pp->p_vnode))
234 vcolor = (PP_ISNC(pp)) ? vcolor_pa : PP_GET_VCOLOR(pp);
236 vcolor = addr_to_vcolor(pp->p_offset);
270 #define PP2KPMPG(pp, kp) { \
275 pfn = pp->p_pagenum; \
284 #define PP2KPMSPG(pp, ksp) { \
289 pfn = pp->p_pagenum; \
312 page_t *pp;
325 pp = &mseg->pages[(pgcnt_t)(pfn - mseg->pages_base)];
326 ASSERT((pfn_t)pp->p_pagenum == pfn);
343 } else if (mseg == NULL || !PAGE_LOCKED(pp))
346 error = sfmmu_kpm_fault(vaddr, mseg, pp);
348 error = sfmmu_kpm_fault_small(vaddr, mseg, pp);
603 page_t *pp;
609 pp = page_numtopp_nolock(pfn);
610 if (pp && pp->p_kpmref)
620 sfmmu_kpme_lookup(struct kpme *kpme, page_t *pp)
624 for (p = pp->p_kpmelist; p; p = p->kpe_next) {
636 sfmmu_kpme_add(struct kpme *kpme, page_t *pp)
638 ASSERT(pp->p_kpmref >= 0);
642 kpme->kpe_next = pp->p_kpmelist;
644 if (pp->p_kpmelist)
645 pp->p_kpmelist->kpe_prev = kpme;
647 pp->p_kpmelist = kpme;
648 kpme->kpe_page = pp;
649 pp->p_kpmref++;
657 sfmmu_kpme_sub(struct kpme *kpme, page_t *pp)
659 ASSERT(pp->p_kpmref > 0);
662 ASSERT(pp->p_kpmelist != kpme);
663 ASSERT(kpme->kpe_prev->kpe_page == pp);
666 ASSERT(pp->p_kpmelist == kpme);
667 pp->p_kpmelist = kpme->kpe_next;
671 ASSERT(kpme->kpe_next->kpe_page == pp);
677 pp->p_kpmref--;
687 sfmmu_kpm_mapin(page_t *pp)
701 ASSERT(sfmmu_mlist_held(pp));
702 ASSERT(pp->p_kpmref == 0);
704 vaddr = sfmmu_kpm_getvaddr(pp, &kpm_vac_range);
707 uncached = PP_ISNC(pp);
708 pfn = pp->p_pagenum;
713 PP2KPMPG(pp, kp);
718 ASSERT(PP_ISKPMC(pp) == 0);
719 ASSERT(PP_ISKPMS(pp) == 0);
722 /* ASSERT(pp->p_share); XXX use hat_page_getshare */
742 pmtx = sfmmu_page_enter(pp);
743 PP_SETKPMC(pp);
763 pmtx = sfmmu_page_enter(pp);
764 PP_SETKPMS(pp);
841 /* ASSERT(pp->p_share); XXX use hat_page_getshare */
842 pmtx = sfmmu_page_enter(pp);
843 PP_SETKPMC(pp);
852 PP2KPMSPG(pp, ksp);
878 sfmmu_kpm_mapout(page_t *pp, caddr_t vaddr)
888 ASSERT(sfmmu_mlist_held(pp));
889 ASSERT(pp->p_kpmref == 0);
896 PP2KPMPG(pp, kp);
901 ASSERT(PP_ISKPMS(pp) == 0);
907 if (PP_ISTNC(pp)) {
908 if (PP_ISKPMC(pp) == 0) {
918 pmtx = sfmmu_page_enter(pp);
919 PP_CLRKPMC(pp);
930 conv_tnc(pp, TTE8K);
932 } else if (PP_ISKPMC(pp) == 0) {
938 pmtx = sfmmu_page_enter(pp);
939 PP_CLRKPMC(pp);
951 ASSERT(!(pp->p_nrm & (P_KPMC | P_KPMS | P_TNC | P_PNC)));
993 if (PP_ISKPMS(pp)) {
1008 if (PP_ISTNC(pp)) {
1009 if (!PP_ISKPMC(pp)) {
1017 conv_tnc(pp, TTE8K);
1021 pmtx = sfmmu_page_enter(pp);
1022 PP_CLRKPMS(pp);
1026 if (PP_ISKPMC(pp)) {
1031 pmtx = sfmmu_page_enter(pp);
1032 PP_CLRKPMC(pp);
1045 PP2KPMSPG(pp, ksp);
1048 if (PP_ISKPMC(pp) == 0) {
1068 } else if (PP_ISTNC(pp)) {
1072 if (oldval != KPM_MAPPEDSC || PP_ISKPMC(pp) == 0)
1077 pmtx = sfmmu_page_enter(pp);
1078 PP_CLRKPMC(pp);
1088 conv_tnc(pp, TTE8K);
1097 pmtx = sfmmu_page_enter(pp);
1098 PP_CLRKPMC(pp);
1110 sfmmu_kpm_getvaddr(page_t *pp, int *kpm_vac_rangep)
1117 ASSERT(sfmmu_mlist_held(pp));
1119 paddr = ptob(pp->p_pagenum);
1122 if (pp->p_vnode && IS_SWAPFSVP(pp->p_vnode)) {
1123 vcolor = (PP_NEWPAGE(pp) || PP_ISNC(pp)) ?
1124 vcolor_pa : PP_GET_VCOLOR(pp);
1126 vcolor = addr_to_vcolor(pp->p_offset);
1139 ASSERT(!PP_ISMAPPED_LARGE(pp));
1142 if (PP_ISNC(pp))
1145 if (PP_NEWPAGE(pp)) {
1146 PP_SET_VCOLOR(pp, vcolor);
1150 if (PP_GET_VCOLOR(pp) == vcolor)
1153 ASSERT(!PP_ISMAPPED_KPM(pp));
1154 sfmmu_kpm_vac_conflict(pp, vaddr);
1202 sfmmu_kpm_fault(caddr_t vaddr, struct memseg *mseg, page_t *pp)
1208 pfn_t pfn = pp->p_pagenum;
1222 "0x%p pp 0x%p", (void *)mseg, (void *)pp);
1228 pml = sfmmu_mlist_enter(pp);
1230 if (!PP_ISMAPPED_KPM(pp)) {
1238 ASSERT(!PP_ISMAPPED_LARGE(pp));
1240 if (PP_ISKPMC(pp)) {
1241 pmtx = sfmmu_page_enter(pp);
1242 PP_CLRKPMC(pp);
1257 sfmmu_kpm_vac_conflict(pp, vaddr);
1260 if (PP_ISNC(pp)) {
1262 pmtx = sfmmu_page_enter(pp);
1263 PP_SETKPMC(pp);
1285 PP_ISKPMC(pp) || PP_ISKPMS(pp) || PP_ISNC(pp));
1301 (PP_ISKPMC(pp) ? KPM_C : 0) |
1302 (PP_ISKPMS(pp) ? KPM_S : 0));
1314 sfmmu_kpm_vac_conflict(pp, vaddr);
1317 if (PP_ISNC(pp) || kp->kp_refcnt <= 0 ||
1318 addr_to_vcolor(vaddr) != PP_GET_VCOLOR(pp)) {
1320 "state, pp=%p", (void *)pp);
1341 sfmmu_kpm_vac_conflict(pp, vaddr);
1344 if (PP_ISNC(pp) || kp->kp_refcnt <= 0 ||
1345 addr_to_vcolor(vaddr) != PP_GET_VCOLOR(pp)) {
1347 "pp=%p", (void *)pp);
1351 pmtx = sfmmu_page_enter(pp);
1352 PP_SETKPMS(pp);
1371 if (PP_ISNC(pp) ||
1372 addr_to_vcolor(vaddr) != PP_GET_VCOLOR(pp)) {
1374 "pp=%p", (void *)pp);
1386 sfmmu_kpm_vac_conflict(pp, vaddr);
1389 if (PP_ISNC(pp) || kp->kp_refcnt <= 0 ||
1390 addr_to_vcolor(vaddr) != PP_GET_VCOLOR(pp)) {
1392 "pp=%p", (void *)pp);
1396 pmtx = sfmmu_page_enter(pp);
1397 PP_SETKPMS(pp);
1403 if (!PP_ISMAPPED(pp)) {
1410 panic("sfmmu_kpm_fault: stale VAC conflict, pp=%p",
1411 (void *)pp);
1424 sfmmu_kpm_vac_conflict(pp, vaddr);
1430 if (PP_ISNC(pp)) {
1442 ASSERT(addr_to_vcolor(vaddr) == PP_GET_VCOLOR(pp));
1445 pmtx = sfmmu_page_enter(pp);
1446 PP_CLRKPMC(pp);
1448 ASSERT(PP_ISKPMS(pp) == 0);
1455 pmtx = sfmmu_page_enter(pp);
1456 PP_SETKPMS(pp);
1461 if (!PP_ISMAPPED(pp)) {
1468 panic("sfmmu_kpm_fault: stale VAC conflict, pp=%p",
1469 (void *)pp);
1475 if (!PP_ISNC(pp)) {
1476 panic("sfmmu_kpm_fault: page not uncached, pp=%p",
1477 (void *)pp);
1485 "pp=%p", (void *)vaddr, (void *)kp, (void *)pp);
1530 sfmmu_kpm_fault_small(caddr_t vaddr, struct memseg *mseg, page_t *pp)
1537 pfn_t pfn = pp->p_pagenum;
1546 pml = sfmmu_mlist_enter(pp);
1548 if (!PP_ISMAPPED_KPM(pp)) {
1560 ASSERT(!PP_ISKPMC(pp));
1561 ASSERT(!PP_ISNC(pp));
1578 sfmmu_kpm_vac_conflict(pp, vaddr);
1580 if (PP_ISNC(pp)) {
1581 /* ASSERT(pp->p_share); XXX use hat_page_getshare */
1596 if (PP_ISKPMC(pp)) {
1597 pmtx = sfmmu_page_enter(pp);
1598 PP_CLRKPMC(pp);
1632 sfmmu_kpm_vac_conflict(page_t *pp, caddr_t vaddr)
1641 ASSERT(sfmmu_mlist_held(pp));
1643 if (PP_ISNC(pp))
1647 if (PP_GET_VCOLOR(pp) == vcolor)
1658 ASSERT(!PP_ISMAPPED_LARGE(pp));
1660 if (!PP_ISMAPPED(pp)) {
1667 sfmmu_cache_flush(pp->p_pagenum, PP_GET_VCOLOR(pp));
1668 PP_SET_VCOLOR(pp, vcolor);
1682 for (sfhmep = pp->p_mapping; sfhmep; sfhmep = tmphme) {
1695 sfmmu_page_cache_array(pp, HAT_TMPNC, CACHE_FLUSH, 1);
1705 for (sfhmep = pp->p_mapping; sfhmep; sfhmep = tmphme) {
1710 (void) sfmmu_pageunload(pp, sfhmep, TTE8K);
1717 sfmmu_cache_flush(pp->p_pagenum, PP_GET_VCOLOR(pp));
1718 PP_SET_VCOLOR(pp, vcolor);
1722 * Remove all kpm mappings using kpme's for pp and check that
1726 sfmmu_kpm_pageunload(page_t *pp)
1731 ASSERT(pp != NULL);
1732 ASSERT(pp->p_kpmref);
1733 ASSERT(sfmmu_mlist_held(pp));
1735 vaddr = hat_kpm_page2va(pp, 1);
1737 for (kpme = pp->p_kpmelist; kpme; kpme = nkpme) {
1738 ASSERT(kpme->kpe_page == pp);
1740 if (pp->p_kpmref == 0)
1741 panic("sfmmu_kpm_pageunload: stale p_kpmref pp=%p "
1742 "kpme=%p", (void *)pp, (void *)kpme);
1747 sfmmu_kpme_sub(kpme, pp);
1755 if (pp->p_kpmref != 0)
1756 panic("sfmmu_kpm_pageunload: bad refcnt pp=%p", (void *)pp);
1758 sfmmu_kpm_mapout(pp, vaddr);
1831 sfmmu_kpm_vac_unload(page_t *pp, caddr_t vaddr)
1835 caddr_t kpmvaddr = hat_kpm_page2va(pp, 1);
1843 ASSERT(PAGE_LOCKED(pp));
1844 ASSERT(sfmmu_mlist_held(pp));
1845 ASSERT(!PP_ISNC(pp));
1851 PP2KPMPG(pp, kp);
1861 if (PP_ISKPMC(pp) == 0) {
1865 pmtx = sfmmu_page_enter(pp);
1866 PP_SETKPMC(pp);
1870 pmtx = sfmmu_page_enter(pp);
1871 PP_CLRKPMC(pp);
1888 PP_ISKPMC(pp) || PP_ISKPMS(pp) || PP_ISNC(pp));
1896 if (PP_ISKPMC(pp) == 0 && newcolor == 0) {
1897 ASSERT(PP_ISKPMS(pp) == 0);
1908 (PP_ISKPMC(pp) ? KPM_C : 0) |
1909 (PP_ISKPMS(pp) ? KPM_S : 0));
1926 pmtx = sfmmu_page_enter(pp);
1927 PP_SETKPMC(pp);
1943 pmtx = sfmmu_page_enter(pp);
1944 PP_CLRKPMS(pp);
1945 PP_SETKPMC(pp);
1959 pmtx = sfmmu_page_enter(pp);
1960 PP_SETKPMC(pp);
1973 pmtx = sfmmu_page_enter(pp);
1974 PP_CLRKPMC(pp);
1989 "kpmvaddr=%p kp=%p pp=%p",
1990 (void *)kpmvaddr, (void *)kp, (void *)pp);
2000 PP2KPMSPG(pp, ksp);
2003 if (PP_ISKPMC(pp) == 0) {
2017 pmtx = sfmmu_page_enter(pp);
2018 PP_SETKPMC(pp);
2033 sfmmu_kpm_hme_unload(page_t *pp)
2043 ASSERT(sfmmu_mlist_held(pp));
2044 ASSERT(PP_ISMAPPED_KPM(pp));
2046 flags = pp->p_nrm & (P_KPMC | P_KPMS);
2060 vaddr = hat_kpm_page2va(pp, 1);
2062 PP2KPMPG(pp, kp);
2079 pmtx = sfmmu_page_enter(pp);
2080 PP_CLRKPMC(pp);
2090 vaddr = hat_kpm_page2va(pp, 1);
2091 PP2KPMSPG(pp, ksp);
2102 pmtx = sfmmu_page_enter(pp);
2103 PP_CLRKPMC(pp);
2113 sfmmu_kpm_kpmp_enter(page_t *pp, pgcnt_t npages)
2118 ASSERT(sfmmu_mlist_held(pp));
2120 if (kpm_smallpages || PP_ISMAPPED_KPM(pp) == 0)
2125 PP2KPMPG(pp, kp);
2177 sfmmu_kpm_page_cache(page_t *pp, int flags, int cache_flush_tag)
2188 ASSERT(PP_ISMAPPED_KPM(pp));
2189 ASSERT(sfmmu_mlist_held(pp));
2190 ASSERT(sfmmu_page_spl_held(pp));
2195 kpmvaddr = hat_kpm_page2va(pp, 1);
2198 pfn_t pfn = pp->p_pagenum;
2212 PP2KPMPG(pp, kp);
2223 PP_SETKPMC(pp);
2224 ASSERT(!PP_ISKPMS(pp));
2226 ASSERT(PP_ISKPMC(pp));
2227 PP_CLRKPMC(pp);
2239 PP_ISKPMC(pp) || PP_ISKPMS(pp) || PP_ISNC(pp));
2254 (PP_ISKPMC(pp) ? KPM_C : 0) |
2255 (PP_ISKPMS(pp) ? KPM_S : 0));
2267 PP_CLRKPMS(pp);
2273 PP_CLRKPMC(pp);
2303 PP_SETKPMC(pp);
2317 PP_CLRKPMS(pp);
2318 PP_SETKPMC(pp);
2327 PP_SETKPMC(pp);
2340 "kpmvaddr=%p kp=%p pp=%p", (void *)kpmvaddr,
2341 (void *)kp, (void *)pp);
2346 PP2KPMSPG(pp, ksp);
2362 PP_SETKPMC(pp);
2363 ASSERT(!PP_ISKPMS(pp));
2366 ASSERT(PP_ISKPMC(pp));
2367 PP_CLRKPMC(pp);