Lines Matching refs:pcp

212 #define	IS_PCP_WIRED(pcp) IS_PFLAGS_WIRED((pcp)->p_flags)  argument
216 #define PCP_AGE(pcp) LBOLT_DELTA((pcp)->p_lbolt) argument
233 #define P_MATCH(pcp, htag0, addr, len) \ argument
234 ((pcp)->p_htag0 == (htag0) && \
235 (pcp)->p_addr == (addr) && \
236 (pcp)->p_len >= (len))
238 #define P_MATCH_PP(pcp, htag0, addr, len, pp) \ argument
239 ((pcp)->p_pp == (pp) && \
240 (pcp)->p_htag0 == (htag0) && \
241 (pcp)->p_addr == (addr) && \
242 (pcp)->p_len >= (len))
425 struct seg_pcache *pcp; in seg_plookup_checkdup() local
431 for (pcp = hp->p_hnext; pcp != (struct seg_pcache *)hp; in seg_plookup_checkdup()
432 pcp = pcp->p_hnext) { in seg_plookup_checkdup()
433 ASSERT(pcp->p_hashp == hp); in seg_plookup_checkdup()
434 if (pcp->p_htag0 == htag0 && pcp->p_addr == addr) { in seg_plookup_checkdup()
435 ASSERT(!IS_PCP_WIRED(pcp)); in seg_plookup_checkdup()
436 if (pcp->p_len < len) { in seg_plookup_checkdup()
438 if (pcp->p_active) { in seg_plookup_checkdup()
441 plinkp = &pcp->p_plink; in seg_plookup_checkdup()
444 pcp->p_hprev->p_hnext = pcp->p_hnext; in seg_plookup_checkdup()
445 pcp->p_hnext->p_hprev = pcp->p_hprev; in seg_plookup_checkdup()
446 pcp->p_hprev = delcallb_list; in seg_plookup_checkdup()
447 delcallb_list = pcp; in seg_plookup_checkdup()
466 struct seg_pcache *pcp; in seg_plookup() local
485 for (pcp = hp->p_hnext; pcp != (struct seg_pcache *)hp; in seg_plookup()
486 pcp = pcp->p_hnext) { in seg_plookup()
487 ASSERT(pcp->p_hashp == hp); in seg_plookup()
488 if (P_MATCH(pcp, htag0, addr, len)) { in seg_plookup()
489 ASSERT(IS_PFLAGS_WIRED(flags) == IS_PCP_WIRED(pcp)); in seg_plookup()
498 if (rw == S_WRITE && pcp->p_wlen < len) { in seg_plookup()
501 if (pcp->p_active == UINT_MAX) { in seg_plookup()
504 pcp->p_active++; in seg_plookup()
505 if (rw == S_WRITE && !pcp->p_write) { in seg_plookup()
506 pcp->p_write = 1; in seg_plookup()
509 return (pcp->p_pp); in seg_plookup()
528 struct seg_pcache *pcp; in seg_pinactive() local
566 for (pcp = hp->p_hnext; pcp != (struct seg_pcache *)hp; in seg_pinactive()
567 pcp = pcp->p_hnext) { in seg_pinactive()
568 ASSERT(pcp->p_hashp == hp); in seg_pinactive()
569 if (P_MATCH_PP(pcp, htag0, addr, len, pp)) { in seg_pinactive()
570 ASSERT(IS_PFLAGS_WIRED(flags) == IS_PCP_WIRED(pcp)); in seg_pinactive()
571 ASSERT(pcp->p_active); in seg_pinactive()
586 pcp->p_active--; in seg_pinactive()
587 if (pcp->p_active == 0 && (pmtx != NULL || in seg_pinactive()
598 ASSERT(callback == pcp->p_callback); in seg_pinactive()
600 pcache_link_t *plinkp = &pcp->p_plink; in seg_pinactive()
601 ASSERT(!IS_PCP_WIRED(pcp)); in seg_pinactive()
609 pcp->p_hprev->p_hnext = pcp->p_hnext; in seg_pinactive()
610 pcp->p_hnext->p_hprev = pcp->p_hprev; in seg_pinactive()
611 if (!IS_PCP_WIRED(pcp) && in seg_pinactive()
624 len = pcp->p_len; in seg_pinactive()
626 if (rw != S_WRITE && pcp->p_write) { in seg_pinactive()
629 kmem_cache_free(seg_pkmcache, pcp); in seg_pinactive()
637 if (!pcp->p_active && !IS_PCP_WIRED(pcp)) { in seg_pinactive()
645 pcp->p_lbolt = ddi_get_lbolt(); in seg_pinactive()
646 pcp->p_ref = 1; in seg_pinactive()
655 P_MATCH(pcp, htag0, addr, len)) { in seg_pinactive()
663 if (!pcp->p_active) { in seg_pinactive()
668 pcp->p_lbolt = ddi_get_lbolt(); in seg_pinactive()
669 pcp->p_ref = 1; in seg_pinactive()
804 struct seg_pcache *pcp; in seg_pinsert() local
841 pcp = kmem_cache_alloc(seg_pkmcache, KM_SLEEP); in seg_pinsert()
846 pcp->p_htag0 = (void *)seg; in seg_pinsert()
847 pcp->p_flags = flags & 0xffff; in seg_pinsert()
849 pcp->p_htag0 = (void *)amp; in seg_pinsert()
850 pcp->p_flags = (flags & 0xffff) | SEGP_AMP; in seg_pinsert()
852 pcp->p_addr = addr; in seg_pinsert()
853 pcp->p_len = len; in seg_pinsert()
854 pcp->p_wlen = wlen; in seg_pinsert()
855 pcp->p_pp = pp; in seg_pinsert()
856 pcp->p_write = (rw == S_WRITE); in seg_pinsert()
857 pcp->p_callback = callback; in seg_pinsert()
858 pcp->p_active = 1; in seg_pinsert()
860 hp = P_HASHBP(seg, pcp->p_htag0, addr, flags); in seg_pinsert()
884 kmem_cache_free(seg_pkmcache, pcp); in seg_pinsert()
887 pcp->p_plink.p_lnext = pheadp->p_lnext; in seg_pinsert()
888 pcp->p_plink.p_lprev = pheadp; in seg_pinsert()
889 pheadp->p_lnext->p_lprev = &pcp->p_plink; in seg_pinsert()
890 pheadp->p_lnext = &pcp->p_plink; in seg_pinsert()
894 pcp->p_hashp = hp; in seg_pinsert()
895 pcp->p_hnext = hp->p_hnext; in seg_pinsert()
896 pcp->p_hprev = (struct seg_pcache *)hp; in seg_pinsert()
897 hp->p_hnext->p_hprev = pcp; in seg_pinsert()
898 hp->p_hnext = pcp; in seg_pinsert()
900 hp->p_hprev == pcp) { in seg_pinsert()
911 pcp = delcallb_list; in seg_pinsert()
912 delcallb_list = pcp->p_hprev; in seg_pinsert()
913 ASSERT(!IS_PCP_WIRED(pcp) && !pcp->p_active); in seg_pinsert()
914 (void) (*pcp->p_callback)(pcp->p_htag0, pcp->p_addr, in seg_pinsert()
915 pcp->p_len, pcp->p_pp, pcp->p_write ? S_WRITE : S_READ, 0); in seg_pinsert()
916 npages += btop(pcp->p_len); in seg_pinsert()
917 kmem_cache_free(seg_pkmcache, pcp); in seg_pinsert()
940 struct seg_pcache *pcp; in seg_ppurge_async() local
1013 for (pcp = hpw->p_hnext; in seg_ppurge_async()
1014 pcp != (struct seg_pcache *)hpw; in seg_ppurge_async()
1015 pcp = pcp->p_hnext) { in seg_ppurge_async()
1017 ASSERT(IS_PCP_WIRED(pcp)); in seg_ppurge_async()
1018 ASSERT(pcp->p_hashp == in seg_ppurge_async()
1021 if (pcp->p_active) { in seg_ppurge_async()
1024 pcp->p_hprev->p_hnext = pcp->p_hnext; in seg_ppurge_async()
1025 pcp->p_hnext->p_hprev = pcp->p_hprev; in seg_ppurge_async()
1026 pcp->p_hprev = delcallb_list; in seg_ppurge_async()
1027 delcallb_list = pcp; in seg_ppurge_async()
1058 for (pcp = hp->p_hnext; pcp != (struct seg_pcache *)hp; in seg_ppurge_async()
1059 pcp = pcp->p_hnext) { in seg_ppurge_async()
1065 ASSERT(!IS_PCP_WIRED(pcp)); in seg_ppurge_async()
1066 ASSERT(pcp->p_hashp == hp); in seg_ppurge_async()
1068 if (pcp->p_active) { in seg_ppurge_async()
1071 if (!force && pcp->p_ref && in seg_ppurge_async()
1072 PCP_AGE(pcp) < seg_pmax_pcpage) { in seg_ppurge_async()
1073 pcp->p_ref = 0; in seg_ppurge_async()
1076 plinkp = &pcp->p_plink; in seg_ppurge_async()
1077 htag0 = pcp->p_htag0; in seg_ppurge_async()
1078 if (pcp->p_flags & SEGP_AMP) { in seg_ppurge_async()
1094 pcp->p_hprev->p_hnext = pcp->p_hnext; in seg_ppurge_async()
1095 pcp->p_hnext->p_hprev = pcp->p_hprev; in seg_ppurge_async()
1097 pcp->p_hprev = delcallb_list; in seg_ppurge_async()
1098 delcallb_list = pcp; in seg_ppurge_async()
1099 npgs_purged += btop(pcp->p_len); in seg_ppurge_async()
1168 pcp = delcallb_list; in seg_ppurge_async()
1169 delcallb_list = pcp->p_hprev; in seg_ppurge_async()
1170 ASSERT(!pcp->p_active); in seg_ppurge_async()
1171 (void) (*pcp->p_callback)(pcp->p_htag0, pcp->p_addr, in seg_ppurge_async()
1172 pcp->p_len, pcp->p_pp, pcp->p_write ? S_WRITE : S_READ, 1); in seg_ppurge_async()
1173 npages += btop(pcp->p_len); in seg_ppurge_async()
1174 if (!IS_PCP_WIRED(pcp)) { in seg_ppurge_async()
1175 npages_window += btop(pcp->p_len); in seg_ppurge_async()
1177 kmem_cache_free(seg_pkmcache, pcp); in seg_ppurge_async()
1197 struct seg_pcache *pcp; in seg_ppurge_wiredpp() local
1216 pcp = hp->p_hnext; in seg_ppurge_wiredpp()
1217 while (pcp != (struct seg_pcache *)hp) { in seg_ppurge_wiredpp()
1218 ASSERT(pcp->p_hashp == (struct seg_phash *)hp); in seg_ppurge_wiredpp()
1219 ASSERT(IS_PCP_WIRED(pcp)); in seg_ppurge_wiredpp()
1223 if (!pcp->p_active && pcp->p_pp == pp) { in seg_ppurge_wiredpp()
1224 ASSERT(pcp->p_htag0 != NULL); in seg_ppurge_wiredpp()
1225 pcp->p_hprev->p_hnext = pcp->p_hnext; in seg_ppurge_wiredpp()
1226 pcp->p_hnext->p_hprev = pcp->p_hprev; in seg_ppurge_wiredpp()
1227 pcp->p_hprev = delcallb_list; in seg_ppurge_wiredpp()
1228 delcallb_list = pcp; in seg_ppurge_wiredpp()
1230 pcp = pcp->p_hnext; in seg_ppurge_wiredpp()
1240 pcp = delcallb_list; in seg_ppurge_wiredpp()
1241 delcallb_list = pcp->p_hprev; in seg_ppurge_wiredpp()
1242 ASSERT(!pcp->p_active); in seg_ppurge_wiredpp()
1243 done = (*pcp->p_callback)(pcp->p_htag0, pcp->p_addr, in seg_ppurge_wiredpp()
1244 pcp->p_len, pcp->p_pp, in seg_ppurge_wiredpp()
1245 pcp->p_write ? S_WRITE : S_READ, 1); in seg_ppurge_wiredpp()
1246 npages += btop(pcp->p_len); in seg_ppurge_wiredpp()
1247 ASSERT(IS_PCP_WIRED(pcp)); in seg_ppurge_wiredpp()
1248 kmem_cache_free(seg_pkmcache, pcp); in seg_ppurge_wiredpp()
1272 struct seg_pcache *pcp; in seg_ppurge() local
1291 pcp = hp->p_hnext; in seg_ppurge()
1292 while (pcp != (struct seg_pcache *)hp) { in seg_ppurge()
1293 ASSERT(pcp->p_hashp == hp); in seg_ppurge()
1294 ASSERT(IS_PCP_WIRED(pcp)); in seg_ppurge()
1295 if (pcp->p_htag0 == htag0) { in seg_ppurge()
1296 if (pcp->p_active) { in seg_ppurge()
1299 pcp->p_hprev->p_hnext = pcp->p_hnext; in seg_ppurge()
1300 pcp->p_hnext->p_hprev = pcp->p_hprev; in seg_ppurge()
1301 pcp->p_hprev = delcallb_list; in seg_ppurge()
1302 delcallb_list = pcp; in seg_ppurge()
1304 pcp = pcp->p_hnext; in seg_ppurge()
1322 pcp = plink2pcache(plinkp); in seg_ppurge()
1323 ASSERT(!IS_PCP_WIRED(pcp)); in seg_ppurge()
1324 ASSERT(pcp->p_htag0 == htag0); in seg_ppurge()
1325 hp = pcp->p_hashp; in seg_ppurge()
1327 if (pcp->p_active) { in seg_ppurge()
1334 pcp->p_hprev->p_hnext = pcp->p_hnext; in seg_ppurge()
1335 pcp->p_hnext->p_hprev = pcp->p_hprev; in seg_ppurge()
1336 pcp->p_hprev = delcallb_list; in seg_ppurge()
1337 delcallb_list = pcp; in seg_ppurge()
1346 pcp = delcallb_list; in seg_ppurge()
1347 delcallb_list = pcp->p_hprev; in seg_ppurge()
1348 ASSERT(!pcp->p_active); in seg_ppurge()
1349 (void) (*pcp->p_callback)(pcp->p_htag0, pcp->p_addr, pcp->p_len, in seg_ppurge()
1350 pcp->p_pp, pcp->p_write ? S_WRITE : S_READ, 0); in seg_ppurge()
1351 npages += btop(pcp->p_len); in seg_ppurge()
1352 kmem_cache_free(seg_pkmcache, pcp); in seg_ppurge()