Lines Matching refs:amp

176 	struct anon_map *amp = buf;  in anonmap_cache_constructor()  local
178 rw_init(&amp->a_rwlock, NULL, RW_DEFAULT, NULL); in anonmap_cache_constructor()
179 cv_init(&amp->a_purgecv, NULL, CV_DEFAULT, NULL); in anonmap_cache_constructor()
180 mutex_init(&amp->a_pmtx, NULL, MUTEX_DEFAULT, NULL); in anonmap_cache_constructor()
181 mutex_init(&amp->a_purgemtx, NULL, MUTEX_DEFAULT, NULL); in anonmap_cache_constructor()
189 struct anon_map *amp = buf; in anonmap_cache_destructor() local
191 rw_destroy(&amp->a_rwlock); in anonmap_cache_destructor()
192 cv_destroy(&amp->a_purgecv); in anonmap_cache_destructor()
193 mutex_destroy(&amp->a_pmtx); in anonmap_cache_destructor()
194 mutex_destroy(&amp->a_purgemtx); in anonmap_cache_destructor()
1665 anon_disclaim(struct anon_map *amp, ulong_t index, size_t size, in anon_disclaim() argument
1676 struct anon_hdr *ahp = amp->ahp; in anon_disclaim()
1681 ASSERT(RW_READ_HELD(&amp->a_rwlock)); in anon_disclaim()
1701 anon_array_enter(amp, index, &cookie); in anon_disclaim()
1965 struct anon_map *amp, in anon_map_getpages() argument
2007 if ((ap = anon_get_ptr(amp->ahp, start_idx)) != NULL) { in anon_map_getpages()
2030 (void) anon_set_ptr(amp->ahp, start_idx, ap, in anon_map_getpages()
2046 ap = anon_get_ptr(amp->ahp, start_idx); in anon_map_getpages()
2075 !anon_szcshare(amp->ahp, start_idx)) { in anon_map_getpages()
2098 if ((ap = anon_get_ptr(amp->ahp, an_idx)) != in anon_map_getpages()
2127 return (anon_map_privatepages(amp, start_idx, szc, seg, in anon_map_getpages()
2139 if ((ap = anon_get_ptr(amp->ahp, an_idx)) == NULL) { in anon_map_getpages()
2231 anon_share(amp->ahp, an_idx, npgs)) { in anon_map_getpages()
2278 (void) anon_set_ptr(amp->ahp, an_idx, ap, ANON_SLEEP); in anon_map_getpages()
2309 return (anon_map_privatepages(amp, start_idx, szc, seg, addr, prot, in anon_map_getpages()
2367 !anon_szcshare(amp->ahp, start_idx)) { in anon_map_getpages()
2534 struct anon_map *amp, in anon_map_privatepages() argument
2572 ASSERT(amp != NULL); in anon_map_privatepages()
2573 ap = anon_get_ptr(amp->ahp, start_idx); in anon_map_privatepages()
2604 ASSERT(!anon_share(amp->ahp, start_idx, pgcnt)); in anon_map_privatepages()
2674 oldap = anon_get_ptr(amp->ahp, an_idx); in anon_map_privatepages()
2762 (void) anon_set_ptr(amp->ahp, an_idx, ap, ANON_SLEEP); in anon_map_privatepages()
2837 struct anon_map *amp, in anon_map_createpages() argument
2878 ANON_LOCK_ENTER(&amp->a_rwlock, RW_WRITER); in anon_map_createpages()
2890 ap = anon_get_ptr(amp->ahp, index); in anon_map_createpages()
2895 ANON_LOCK_EXIT(&amp->a_rwlock); in anon_map_createpages()
2948 anon_pages(amp->ahp, index, pg_cnt) == 0) { in anon_map_createpages()
2994 ANON_LOCK_EXIT(&amp->a_rwlock); in anon_map_createpages()
2999 ASSERT(anon_get_ptr(amp->ahp, index) == NULL); in anon_map_createpages()
3000 (void) anon_set_ptr(amp->ahp, index, ap, ANON_SLEEP); in anon_map_createpages()
3033 ANON_LOCK_EXIT(&amp->a_rwlock); in anon_map_createpages()
3043 ASSERT(anon_get_ptr(amp->ahp, index) == NULL); in anon_map_createpages()
3044 (void) anon_set_ptr(amp->ahp, index, ap, ANON_SLEEP); in anon_map_createpages()
3059 ANON_LOCK_EXIT(&amp->a_rwlock); in anon_map_createpages()
3182 struct anon_map *amp, in anon_map_demotepages() argument
3204 ASSERT(RW_WRITE_HELD(&amp->a_rwlock)); in anon_map_demotepages()
3209 ASSERT(szc == amp->a_szc); in anon_map_demotepages()
3214 if (anon_try_demote_pages(amp->ahp, start_idx, szc, ppa, 1)) { in anon_map_demotepages()
3226 ap = anon_get_ptr(amp->ahp, an_idx); in anon_map_demotepages()
3242 err = anon_map_privatepages(amp, start_idx, szc, seg, addr, prot, ppa, in anon_map_demotepages()
3282 anon_shmap_free_pages(struct anon_map *amp, ulong_t sidx, size_t len) in anon_shmap_free_pages() argument
3285 pgcnt_t pages = page_get_pagecnt(amp->a_szc); in anon_shmap_free_pages()
3286 struct anon_hdr *ahp = amp->ahp; in anon_shmap_free_pages()
3292 ASSERT(ANON_WRITE_HELD(&amp->a_rwlock)); in anon_shmap_free_pages()
3293 ASSERT(amp->refcnt <= 1); in anon_shmap_free_pages()
3294 ASSERT(amp->a_szc > 0); in anon_shmap_free_pages()
3306 amp->a_szc, NULL, 0)) { in anon_shmap_free_pages()
3322 amp->a_szc); in anon_shmap_free_pages()
3332 if (!anon_try_demote_pages(ahp, sidx, amp->a_szc, NULL, 0)) { in anon_shmap_free_pages()
3338 anon_free_pages(ahp, sidx, pages << PAGESHIFT, amp->a_szc); in anon_shmap_free_pages()
3349 anonmap_purge(struct anon_map *amp) in anonmap_purge() argument
3351 ASSERT(ANON_WRITE_HELD(&amp->a_rwlock)); in anonmap_purge()
3352 ASSERT(amp->refcnt <= 1); in anonmap_purge()
3354 if (amp->a_softlockcnt != 0) { in anonmap_purge()
3355 seg_ppurge(NULL, amp, 0); in anonmap_purge()
3372 ASSERT(amp->a_phead.p_lnext == &amp->a_phead); in anonmap_purge()
3373 ASSERT(amp->a_phead.p_lprev == &amp->a_phead); in anonmap_purge()
3375 mutex_enter(&amp->a_purgemtx); in anonmap_purge()
3376 while (amp->a_softlockcnt != 0) { in anonmap_purge()
3377 ASSERT(amp->a_phead.p_lnext == &amp->a_phead); in anonmap_purge()
3378 ASSERT(amp->a_phead.p_lprev == &amp->a_phead); in anonmap_purge()
3379 amp->a_purgewait = 1; in anonmap_purge()
3380 cv_wait(&amp->a_purgecv, &amp->a_purgemtx); in anonmap_purge()
3382 mutex_exit(&amp->a_purgemtx); in anonmap_purge()
3384 ASSERT(amp->a_phead.p_lnext == &amp->a_phead); in anonmap_purge()
3385 ASSERT(amp->a_phead.p_lprev == &amp->a_phead); in anonmap_purge()
3386 ASSERT(amp->a_softlockcnt == 0); in anonmap_purge()
3396 struct anon_map *amp; in anonmap_alloc() local
3399 amp = kmem_cache_alloc(anonmap_cache, kmflags); in anonmap_alloc()
3400 if (amp == NULL) { in anonmap_alloc()
3405 amp->ahp = anon_create(btopr(size), flags); in anonmap_alloc()
3406 if (amp->ahp == NULL) { in anonmap_alloc()
3408 kmem_cache_free(anonmap_cache, amp); in anonmap_alloc()
3411 amp->refcnt = 1; in anonmap_alloc()
3412 amp->size = size; in anonmap_alloc()
3413 amp->swresv = swresv; in anonmap_alloc()
3414 amp->locality = 0; in anonmap_alloc()
3415 amp->a_szc = 0; in anonmap_alloc()
3416 amp->a_sp = NULL; in anonmap_alloc()
3417 amp->a_softlockcnt = 0; in anonmap_alloc()
3418 amp->a_purgewait = 0; in anonmap_alloc()
3419 amp->a_phead.p_lnext = &amp->a_phead; in anonmap_alloc()
3420 amp->a_phead.p_lprev = &amp->a_phead; in anonmap_alloc()
3422 return (amp); in anonmap_alloc()
3426 anonmap_free(struct anon_map *amp) in anonmap_free() argument
3428 ASSERT(amp->ahp != NULL); in anonmap_free()
3429 ASSERT(amp->refcnt == 0); in anonmap_free()
3430 ASSERT(amp->a_softlockcnt == 0); in anonmap_free()
3431 ASSERT(amp->a_phead.p_lnext == &amp->a_phead); in anonmap_free()
3432 ASSERT(amp->a_phead.p_lprev == &amp->a_phead); in anonmap_free()
3434 lgrp_shm_policy_fini(amp, NULL); in anonmap_free()
3435 anon_release(amp->ahp, btopr(amp->size)); in anonmap_free()
3436 kmem_cache_free(anonmap_cache, amp); in anonmap_free()
3594 anon_array_enter(struct anon_map *amp, ulong_t an_idx, anon_sync_obj_t *sobj) in anon_array_enter() argument
3609 ASSERT(RW_READ_HELD(&amp->a_rwlock)); in anon_array_enter()
3610 an_idx = P2ALIGN(an_idx, page_get_pagecnt(amp->a_szc)); in anon_array_enter()
3611 hash = ANON_ARRAY_HASH(amp, an_idx); in anon_array_enter()
3615 ap_slot = anon_get_slot(amp->ahp, an_idx); in anon_array_enter()
3624 anon_array_try_enter(struct anon_map *amp, ulong_t an_idx, in anon_array_try_enter() argument
3641 ASSERT(RW_READ_HELD(&amp->a_rwlock)); in anon_array_try_enter()
3642 an_idx = P2ALIGN(an_idx, page_get_pagecnt(amp->a_szc)); in anon_array_try_enter()
3643 hash = ANON_ARRAY_HASH(amp, an_idx); in anon_array_try_enter()
3649 ap_slot = anon_get_slot(amp->ahp, an_idx); in anon_array_try_enter()