Lines Matching refs:sptd

243 	struct spt_data *sptd = (struct spt_data *)seg->s_data;  in segspt_free()  local
247 if (sptd != NULL) { in segspt_free()
248 if (sptd->spt_realsize) in segspt_free()
249 segspt_free_pages(seg, seg->s_base, sptd->spt_realsize); in segspt_free()
251 if (sptd->spt_ppa_lckcnt) in segspt_free()
252 kmem_free(sptd->spt_ppa_lckcnt, in segspt_free()
253 sizeof (*sptd->spt_ppa_lckcnt) in segspt_free()
254 * btopr(sptd->spt_amp->size)); in segspt_free()
255 kmem_free(sptd->spt_vp, sizeof (*sptd->spt_vp)); in segspt_free()
256 cv_destroy(&sptd->spt_cv); in segspt_free()
257 mutex_destroy(&sptd->spt_lock); in segspt_free()
258 kmem_free(sptd, sizeof (*sptd)); in segspt_free()
280 struct spt_data *sptd; in segspt_shmincore() local
287 sptd = sptseg->s_data; in segspt_shmincore()
289 if ((sptd->spt_flags & SHM_PAGEABLE) == 0) { in segspt_shmincore()
374 struct spt_data *sptd; in segspt_create() local
410 if ((sptd = kmem_zalloc(sizeof (*sptd), KM_NOSLEEP)) == NULL) in segspt_create()
419 mutex_init(&sptd->spt_lock, NULL, MUTEX_DEFAULT, NULL); in segspt_create()
425 sptd->spt_vp = vp; in segspt_create()
426 sptd->spt_amp = amp; in segspt_create()
427 sptd->spt_prot = sptcargs->prot; in segspt_create()
428 sptd->spt_flags = sptcargs->flags; in segspt_create()
429 seg->s_data = (caddr_t)sptd; in segspt_create()
430 sptd->spt_ppa = NULL; in segspt_create()
431 sptd->spt_ppa_lckcnt = NULL; in segspt_create()
433 cv_init(&sptd->spt_cv, NULL, CV_DEFAULT, NULL); in segspt_create()
434 sptd->spt_gen = 0; in segspt_create()
491 sptd->spt_ppa_lckcnt = kmem_zalloc(npages * in segspt_create()
492 sizeof (*sptd->spt_ppa_lckcnt), KM_SLEEP); in segspt_create()
493 sptd->spt_pcachecnt = 0; in segspt_create()
494 sptd->spt_realsize = ptob(npages); in segspt_create()
571 &ppa[pidx], sptd->spt_prot, hat_flags); in segspt_create()
590 sptd->spt_pcachecnt = 0; in segspt_create()
592 sptd->spt_realsize = ptob(npages); in segspt_create()
600 cv_destroy(&sptd->spt_cv); in segspt_create()
602 mutex_destroy(&sptd->spt_lock); in segspt_create()
606 kmem_free(sptd, sizeof (*sptd)); in segspt_create()
618 struct spt_data *sptd = (struct spt_data *)seg->s_data; in segspt_free_pages() local
641 (sptd->spt_flags & SHM_PAGEABLE)) { in segspt_free_pages()
647 amp = sptd->spt_amp; in segspt_free_pages()
648 if (sptd->spt_flags & SHM_PAGEABLE) in segspt_free_pages()
653 if ((sptd->spt_flags & SHM_PAGEABLE) == 0) { in segspt_free_pages()
659 if ((sptd->spt_flags & SHM_PAGEABLE) == 0) { in segspt_free_pages()
684 if ((sptd->spt_flags & SHM_PAGEABLE) == 0) { in segspt_free_pages()
754 if ((sptd->spt_flags & SHM_PAGEABLE) == 0) { in segspt_free_pages()
767 sptd->spt_realsize = 0; in segspt_free_pages()
769 if ((sptd->spt_flags & SHM_PAGEABLE) == 0) { in segspt_free_pages()
829 struct spt_data *sptd = sptseg->s_data; in segspt_dismpagelock() local
851 ASSERT(sptd); in segspt_dismpagelock()
860 if (pg_idx + npages > btopr(sptd->spt_amp->size)) { in segspt_dismpagelock()
866 ASSERT(sptd->spt_ppa != NULL); in segspt_dismpagelock()
868 seg_pinactive(seg, NULL, seg->s_base, sptd->spt_amp->size, in segspt_dismpagelock()
869 sptd->spt_ppa, S_WRITE, SEGP_FORCE_WIRED, segspt_reclaim); in segspt_dismpagelock()
879 if ((sptd->spt_flags & DISM_PPA_CHANGED) || in segspt_dismpagelock()
889 if (sptd->spt_flags & DISM_PPA_CHANGED) { in segspt_dismpagelock()
903 pplist = seg_plookup(seg, NULL, seg->s_base, sptd->spt_amp->size, in segspt_dismpagelock()
906 ASSERT(sptd->spt_ppa != NULL); in segspt_dismpagelock()
907 ASSERT(sptd->spt_ppa == pplist); in segspt_dismpagelock()
908 ppa = sptd->spt_ppa; in segspt_dismpagelock()
912 sptd->spt_amp->size, ppa, in segspt_dismpagelock()
929 *ppp = &(sptd->spt_ppa[pg_idx]); in segspt_dismpagelock()
933 mutex_enter(&sptd->spt_lock); in segspt_dismpagelock()
937 pplist = seg_plookup(seg, NULL, seg->s_base, sptd->spt_amp->size, in segspt_dismpagelock()
940 ASSERT(sptd->spt_ppa != NULL); in segspt_dismpagelock()
941 ASSERT(sptd->spt_ppa == pplist); in segspt_dismpagelock()
942 ppa = sptd->spt_ppa; in segspt_dismpagelock()
945 mutex_exit(&sptd->spt_lock); in segspt_dismpagelock()
947 sptd->spt_amp->size, ppa, in segspt_dismpagelock()
964 mutex_exit(&sptd->spt_lock); in segspt_dismpagelock()
965 *ppp = &(sptd->spt_ppa[pg_idx]); in segspt_dismpagelock()
968 if (seg_pinsert_check(seg, NULL, seg->s_base, sptd->spt_amp->size, in segspt_dismpagelock()
970 mutex_exit(&sptd->spt_lock); in segspt_dismpagelock()
979 amp = sptd->spt_amp; in segspt_dismpagelock()
984 if (sptd->spt_ppa == NULL) { in segspt_dismpagelock()
988 tot_npages = btopr(sptd->spt_amp->size); in segspt_dismpagelock()
990 ASSERT(sptd->spt_pcachecnt == 0); in segspt_dismpagelock()
1005 (sptd->spt_ppa_lckcnt[an_idx] != 0))) { in segspt_dismpagelock()
1039 if (sptd->spt_ppa_lckcnt[an_idx] == 0) in segspt_dismpagelock()
1060 sptd->spt_ppa = pl; in segspt_dismpagelock()
1065 pl = sptd->spt_ppa; in segspt_dismpagelock()
1070 ret = seg_pinsert(seg, NULL, seg->s_base, sptd->spt_amp->size, in segspt_dismpagelock()
1071 sptd->spt_amp->size, pl, S_WRITE, SEGP_FORCE_WIRED, in segspt_dismpagelock()
1084 sptd->spt_ppa = NULL; in segspt_dismpagelock()
1093 sptd->spt_pcachecnt++; in segspt_dismpagelock()
1096 ppa = sptd->spt_ppa; in segspt_dismpagelock()
1099 mutex_exit(&sptd->spt_lock); in segspt_dismpagelock()
1101 sptd->spt_amp->size, in segspt_dismpagelock()
1117 mutex_exit(&sptd->spt_lock); in segspt_dismpagelock()
1124 *ppp = &(sptd->spt_ppa[pg_idx]); in segspt_dismpagelock()
1134 mutex_exit(&sptd->spt_lock); in segspt_dismpagelock()
1185 struct spt_data *sptd = sptseg->s_data; in segspt_shmpagelock() local
1207 ASSERT(sptd); in segspt_shmpagelock()
1209 if (sptd->spt_flags & SHM_PAGEABLE) { in segspt_shmpagelock()
1220 if (page_index + npages > btopr(sptd->spt_amp->size)) { in segspt_shmpagelock()
1227 ASSERT(sptd->spt_ppa != NULL); in segspt_shmpagelock()
1229 seg_pinactive(seg, NULL, seg->s_base, sptd->spt_amp->size, in segspt_shmpagelock()
1230 sptd->spt_ppa, S_WRITE, SEGP_FORCE_WIRED, segspt_reclaim); in segspt_shmpagelock()
1252 pplist = seg_plookup(seg, NULL, seg->s_base, sptd->spt_amp->size, in segspt_shmpagelock()
1255 ASSERT(sptd->spt_ppa == pplist); in segspt_shmpagelock()
1256 ASSERT(sptd->spt_ppa[page_index]); in segspt_shmpagelock()
1262 *ppp = &(sptd->spt_ppa[page_index]); in segspt_shmpagelock()
1266 mutex_enter(&sptd->spt_lock); in segspt_shmpagelock()
1271 pplist = seg_plookup(seg, NULL, seg->s_base, sptd->spt_amp->size, in segspt_shmpagelock()
1274 ASSERT(sptd->spt_ppa == pplist); in segspt_shmpagelock()
1280 mutex_exit(&sptd->spt_lock); in segspt_shmpagelock()
1281 *ppp = &(sptd->spt_ppa[page_index]); in segspt_shmpagelock()
1285 if (seg_pinsert_check(seg, NULL, seg->s_base, sptd->spt_amp->size, in segspt_shmpagelock()
1287 mutex_exit(&sptd->spt_lock); in segspt_shmpagelock()
1301 if (sptd->spt_ppa == NULL) { in segspt_shmpagelock()
1302 ASSERT(sptd->spt_ppa == pplist); in segspt_shmpagelock()
1312 amp = sptd->spt_amp; in segspt_shmpagelock()
1316 ASSERT(sptd->spt_pcachecnt == 0); in segspt_shmpagelock()
1318 * btopr(sptd->spt_amp->size), KM_SLEEP); in segspt_shmpagelock()
1324 for (a = spt_base; a < (spt_base + sptd->spt_amp->size); in segspt_shmpagelock()
1335 if (a < (spt_base + sptd->spt_amp->size)) { in segspt_shmpagelock()
1339 sptd->spt_ppa = pl; in segspt_shmpagelock()
1344 pl = sptd->spt_ppa; in segspt_shmpagelock()
1349 ret = seg_pinsert(seg, NULL, seg->s_base, sptd->spt_amp->size, in segspt_shmpagelock()
1350 sptd->spt_amp->size, pl, S_WRITE, SEGP_FORCE_WIRED, in segspt_shmpagelock()
1363 sptd->spt_ppa = NULL; in segspt_shmpagelock()
1372 sptd->spt_pcachecnt++; in segspt_shmpagelock()
1379 mutex_exit(&sptd->spt_lock); in segspt_shmpagelock()
1386 *ppp = &(sptd->spt_ppa[page_index]); in segspt_shmpagelock()
1396 mutex_exit(&sptd->spt_lock); in segspt_shmpagelock()
1409 kmem_free(pl, sizeof (page_t *) * btopr(sptd->spt_amp->size)); in segspt_shmpagelock()
1441 struct spt_data *sptd; in segspt_reclaim() local
1449 sptd = sptseg->s_data; in segspt_reclaim()
1452 ASSERT(sptd->spt_pcachecnt != 0); in segspt_reclaim()
1453 ASSERT(sptd->spt_ppa == pplist); in segspt_reclaim()
1454 ASSERT(npages == btopr(sptd->spt_amp->size)); in segspt_reclaim()
1461 mutex_enter(&sptd->spt_lock); in segspt_reclaim()
1462 if (--sptd->spt_pcachecnt == 0) { in segspt_reclaim()
1472 if ((sptd->spt_flags & SHM_PAGEABLE) && in segspt_reclaim()
1473 (sptd->spt_ppa_lckcnt[i] == 0)) in segspt_reclaim()
1477 if ((sptd->spt_flags & SHM_PAGEABLE) && free_availrmem) { in segspt_reclaim()
1488 ASSERT(sptd->spt_pcachecnt == 0); in segspt_reclaim()
1490 sptd->spt_ppa = NULL; in segspt_reclaim()
1491 sptd->spt_flags &= ~DISM_PPA_CHANGED; in segspt_reclaim()
1492 sptd->spt_gen++; in segspt_reclaim()
1493 cv_broadcast(&sptd->spt_cv); in segspt_reclaim()
1496 mutex_exit(&sptd->spt_lock); in segspt_reclaim()
1579 struct spt_data *sptd; in segspt_softunlock() local
1592 sptd = sptseg->s_data; in segspt_softunlock()
1600 ((sptd->spt_flags & SHM_PAGEABLE) == 0)) { in segspt_softunlock()
1617 amp = sptd->spt_amp; in segspt_softunlock()
1677 struct spt_data *sptd; in segspt_shmattach() local
1698 sptd = shmd->shm_sptseg->s_data; in segspt_shmattach()
1700 if (sptd->spt_flags & SHM_PAGEABLE) { in segspt_shmattach()
1827 struct spt_data *sptd = sptseg->s_data; in segspt_dismfault() local
1857 if (((addr + len) - seg->s_base) > sptd->spt_realsize) in segspt_dismfault()
1885 (sptseg->s_base + sptd->spt_realsize)); in segspt_dismfault()
1900 if ((rw == S_EXEC) && !(sptd->spt_prot & PROT_EXEC)) in segspt_dismfault()
1924 a, pgsz, &ppa[pidx], sptd->spt_prot, in segspt_dismfault()
1937 sptd->spt_prot, in segspt_dismfault()
2010 struct spt_data *sptd = sptseg->s_data; in segspt_shmfault() local
2033 if (sptd->spt_flags & SHM_PAGEABLE) { in segspt_shmfault()
2048 if (((addr + len) - seg->s_base) > sptd->spt_realsize) in segspt_shmfault()
2081 (sptseg->s_base + sptd->spt_realsize)) in segspt_shmfault()
2082 size = (sptseg->s_base + sptd->spt_realsize) - sptseg_addr; in segspt_shmfault()
2087 ASSERT((sptd->spt_flags & SHM_PAGEABLE) == 0); in segspt_shmfault()
2113 if ((rw == S_EXEC) && !(sptd->spt_prot & PROT_EXEC)) in segspt_shmfault()
2141 amp = sptd->spt_amp; in segspt_shmfault()
2174 sz, &ppa[pidx], sptd->spt_prot, in segspt_shmfault()
2188 sptd->spt_prot, HAT_LOAD_SHARE); in segspt_shmfault()
2264 struct spt_data *sptd = spt_seg->s_data; in segspt_shmdup() local
2282 if (sptd->spt_flags & SHM_PAGEABLE) { in segspt_shmdup()
2307 struct spt_data *sptd = (struct spt_data *)shmd->shm_sptseg->s_data; in segspt_shmcheckprot() local
2314 return (((sptd->spt_prot & prot) != prot) ? EACCES : 0); in segspt_shmcheckprot()
2328 struct spt_data *sptd = sptseg->s_data; in spt_anon_getpages() local
2329 struct anon_map *amp = sptd->spt_amp; in spt_anon_getpages()
2330 enum seg_rw rw = sptd->spt_prot; in spt_anon_getpages()
2378 lp_addr, sptd->spt_prot, &vpprot, &ppa[ppa_idx], in spt_anon_getpages()
2484 struct spt_data *sptd = shmd->shm_sptseg->s_data; in spt_lockpages() local
2525 if (sptd->spt_ppa_lckcnt[anon_index] < in spt_lockpages()
2527 if (++sptd->spt_ppa_lckcnt[anon_index] == in spt_lockpages()
2534 kernel = (sptd->spt_ppa && in spt_lockpages()
2535 sptd->spt_ppa[anon_index]); in spt_lockpages()
2538 sptd->spt_ppa_lckcnt[anon_index]--; in spt_lockpages()
2571 struct spt_data *sptd = shmd->shm_sptseg->s_data; in spt_unlockpages() local
2572 struct anon_map *amp = sptd->spt_amp; in spt_unlockpages()
2599 kernel = (sptd->spt_ppa && sptd->spt_ppa[anon_index]); in spt_unlockpages()
2614 sptd->spt_ppa_lckcnt[anon_index]--; in spt_unlockpages()
2645 struct spt_data *sptd = sptseg->s_data; in segspt_shmlockop() local
2646 struct kshmid *sp = sptd->spt_amp->a_sp; in segspt_shmlockop()
2663 if ((sptd->spt_flags & SHM_PAGEABLE) == 0) { in segspt_shmlockop()
2708 mutex_enter(&sptd->spt_lock); in segspt_shmlockop()
2709 if (sptd->spt_ppa != NULL) in segspt_shmlockop()
2710 sptd->spt_flags |= DISM_PPA_CHANGED; in segspt_shmlockop()
2714 mutex_exit(&sptd->spt_lock); in segspt_shmlockop()
2746 if (sptd->spt_ppa != NULL) in segspt_shmlockop()
2747 sptd->spt_flags |= DISM_PPA_CHANGED; in segspt_shmlockop()
2749 mutex_exit(&sptd->spt_lock); in segspt_shmlockop()
2756 mutex_enter(&sptd->spt_lock); in segspt_shmlockop()
2758 mutex_exit(&sptd->spt_lock); in segspt_shmlockop()
2764 if (sptd->spt_ppa != NULL) in segspt_shmlockop()
2765 sptd->spt_flags |= DISM_PPA_CHANGED; in segspt_shmlockop()
2769 if ((ppa = sptd->spt_ppa) != NULL) in segspt_shmlockop()
2770 sptd->spt_flags |= DISM_PPA_CHANGED; in segspt_shmlockop()
2771 mutex_exit(&sptd->spt_lock); in segspt_shmlockop()
2787 struct spt_data *sptd = (struct spt_data *)shmd->shm_sptseg->s_data; in segspt_shmgetprot() local
2796 *protv++ = sptd->spt_prot; in segspt_shmgetprot()
2816 struct spt_data *sptd = (struct spt_data *)shmd->shm_sptseg->s_data; in segspt_shmgettype() local
2825 ((sptd->spt_flags & SHM_PAGEABLE) ? 0 : MAP_NORESERVE)); in segspt_shmgettype()
2833 struct spt_data *sptd = (struct spt_data *)shmd->shm_sptseg->s_data; in segspt_shmgetvp() local
2837 *vpp = sptd->spt_vp; in segspt_shmgetvp()
2853 struct spt_data *sptd = (struct spt_data *)shmd->shm_sptseg->s_data; in segspt_shmadvise() local
2864 if ((sptd->spt_flags & SHM_PAGEABLE) == 0) in segspt_shmadvise()
2867 amp = sptd->spt_amp; in segspt_shmadvise()
2870 mutex_enter(&sptd->spt_lock); in segspt_shmadvise()
2871 if ((ppa = sptd->spt_ppa) == NULL) { in segspt_shmadvise()
2872 mutex_exit(&sptd->spt_lock); in segspt_shmadvise()
2879 sptd->spt_flags |= DISM_PPA_CHANGED; in segspt_shmadvise()
2880 gen = sptd->spt_gen; in segspt_shmadvise()
2882 mutex_exit(&sptd->spt_lock); in segspt_shmadvise()
2899 mutex_enter(&sptd->spt_lock); in segspt_shmadvise()
2906 while (sptd->spt_gen == gen && in segspt_shmadvise()
2907 (sptd->spt_flags & DISM_PPA_CHANGED) && in segspt_shmadvise()
2909 if (!cv_timedwait_sig(&sptd->spt_cv, in segspt_shmadvise()
2910 &sptd->spt_lock, end_lbolt)) { in segspt_shmadvise()
2915 mutex_exit(&sptd->spt_lock); in segspt_shmadvise()
2963 (sptseg->s_base + sptd->spt_realsize)) in segspt_shmadvise()
2964 size = (sptseg->s_base + sptd->spt_realsize) - in segspt_shmadvise()
3020 struct spt_data *sptd = shmd->shm_sptseg->s_data; in segspt_shmgetmemid() local
3026 if (addr > (seg->s_base + sptd->spt_realsize)) { in segspt_shmgetmemid()