Lines Matching full:amp
175 struct anon_map *amp = buf; in anonmap_cache_constructor() local
177 rw_init(&->a_rwlock, NULL, RW_DEFAULT, NULL); in anonmap_cache_constructor()
178 cv_init(&->a_purgecv, NULL, CV_DEFAULT, NULL); in anonmap_cache_constructor()
179 mutex_init(&->a_pmtx, NULL, MUTEX_DEFAULT, NULL); in anonmap_cache_constructor()
180 mutex_init(&->a_purgemtx, NULL, MUTEX_DEFAULT, NULL); in anonmap_cache_constructor()
188 struct anon_map *amp = buf; in anonmap_cache_destructor() local
190 rw_destroy(&->a_rwlock); in anonmap_cache_destructor()
191 cv_destroy(&->a_purgecv); in anonmap_cache_destructor()
192 mutex_destroy(&->a_pmtx); in anonmap_cache_destructor()
193 mutex_destroy(&->a_purgemtx); in anonmap_cache_destructor()
326 * amp size is <= anon hdr size. in anon_create()
1672 anon_disclaim(struct anon_map *amp, ulong_t index, size_t size, in anon_disclaim() argument
1683 struct anon_hdr *ahp = amp->ahp; in anon_disclaim()
1688 ASSERT(RW_READ_HELD(&->a_rwlock)); in anon_disclaim()
1708 anon_array_enter(amp, index, &cookie); in anon_disclaim()
1972 struct anon_map *amp, in anon_map_getpages() argument
2014 if ((ap = anon_get_ptr(amp->ahp, start_idx)) != NULL) { in anon_map_getpages()
2037 (void) anon_set_ptr(amp->ahp, start_idx, ap, in anon_map_getpages()
2053 ap = anon_get_ptr(amp->ahp, start_idx); in anon_map_getpages()
2082 !anon_szcshare(amp->ahp, start_idx)) { in anon_map_getpages()
2105 if ((ap = anon_get_ptr(amp->ahp, an_idx)) != in anon_map_getpages()
2134 return (anon_map_privatepages(amp, start_idx, szc, seg, in anon_map_getpages()
2146 if ((ap = anon_get_ptr(amp->ahp, an_idx)) == NULL) { in anon_map_getpages()
2238 anon_share(amp->ahp, an_idx, npgs)) { in anon_map_getpages()
2285 (void) anon_set_ptr(amp->ahp, an_idx, ap, ANON_SLEEP); in anon_map_getpages()
2316 return (anon_map_privatepages(amp, start_idx, szc, seg, addr, prot, in anon_map_getpages()
2374 !anon_szcshare(amp->ahp, start_idx)) { in anon_map_getpages()
2537 struct anon_map *amp, in anon_map_privatepages() argument
2575 ASSERT(amp != NULL); in anon_map_privatepages()
2576 ap = anon_get_ptr(amp->ahp, start_idx); in anon_map_privatepages()
2607 ASSERT(!anon_share(amp->ahp, start_idx, pgcnt)); in anon_map_privatepages()
2677 oldap = anon_get_ptr(amp->ahp, an_idx); in anon_map_privatepages()
2765 (void) anon_set_ptr(amp->ahp, an_idx, ap, ANON_SLEEP); in anon_map_privatepages()
2836 struct anon_map *amp, in anon_map_createpages() argument
2877 ANON_LOCK_ENTER(&->a_rwlock, RW_WRITER); in anon_map_createpages()
2889 ap = anon_get_ptr(amp->ahp, index); in anon_map_createpages()
2894 ANON_LOCK_EXIT(&->a_rwlock); in anon_map_createpages()
2947 anon_pages(amp->ahp, index, pg_cnt) == 0) { in anon_map_createpages()
2993 ANON_LOCK_EXIT(&->a_rwlock); in anon_map_createpages()
2998 ASSERT(anon_get_ptr(amp->ahp, index) == NULL); in anon_map_createpages()
2999 (void) anon_set_ptr(amp->ahp, index, ap, ANON_SLEEP); in anon_map_createpages()
3032 ANON_LOCK_EXIT(&->a_rwlock); in anon_map_createpages()
3042 ASSERT(anon_get_ptr(amp->ahp, index) == NULL); in anon_map_createpages()
3043 (void) anon_set_ptr(amp->ahp, index, ap, ANON_SLEEP); in anon_map_createpages()
3058 ANON_LOCK_EXIT(&->a_rwlock); in anon_map_createpages()
3181 struct anon_map *amp, in anon_map_demotepages() argument
3203 ASSERT(RW_WRITE_HELD(&->a_rwlock)); in anon_map_demotepages()
3208 ASSERT(szc == amp->a_szc); in anon_map_demotepages()
3213 if (anon_try_demote_pages(amp->ahp, start_idx, szc, ppa, 1)) { in anon_map_demotepages()
3225 ap = anon_get_ptr(amp->ahp, an_idx); in anon_map_demotepages()
3241 err = anon_map_privatepages(amp, start_idx, szc, seg, addr, prot, ppa, in anon_map_demotepages()
3281 anon_shmap_free_pages(struct anon_map *amp, ulong_t sidx, size_t len) in anon_shmap_free_pages() argument
3284 pgcnt_t pages = page_get_pagecnt(amp->a_szc); in anon_shmap_free_pages()
3285 struct anon_hdr *ahp = amp->ahp; in anon_shmap_free_pages()
3291 ASSERT(ANON_WRITE_HELD(&->a_rwlock)); in anon_shmap_free_pages()
3292 ASSERT(amp->refcnt <= 1); in anon_shmap_free_pages()
3293 ASSERT(amp->a_szc > 0); in anon_shmap_free_pages()
3305 amp->a_szc, NULL, 0)) { in anon_shmap_free_pages()
3321 amp->a_szc); in anon_shmap_free_pages()
3331 if (!anon_try_demote_pages(ahp, sidx, amp->a_szc, NULL, 0)) { in anon_shmap_free_pages()
3337 anon_free_pages(ahp, sidx, pages << PAGESHIFT, amp->a_szc); in anon_shmap_free_pages()
3342 * This routine should be called with amp's writer lock when there're no other
3343 * users of amp. All pcache entries of this amp must have been already
3345 * attaching to this amp.
3348 anonmap_purge(struct anon_map *amp) in anonmap_purge() argument
3350 ASSERT(ANON_WRITE_HELD(&->a_rwlock)); in anonmap_purge()
3351 ASSERT(amp->refcnt <= 1); in anonmap_purge()
3353 if (amp->a_softlockcnt != 0) { in anonmap_purge()
3354 seg_ppurge(NULL, amp, 0); in anonmap_purge()
3369 * shamp_reclaim() may still be referencing this amp. in anonmap_purge()
3371 ASSERT(amp->a_phead.p_lnext == &->a_phead); in anonmap_purge()
3372 ASSERT(amp->a_phead.p_lprev == &->a_phead); in anonmap_purge()
3374 mutex_enter(&->a_purgemtx); in anonmap_purge()
3375 while (amp->a_softlockcnt != 0) { in anonmap_purge()
3376 ASSERT(amp->a_phead.p_lnext == &->a_phead); in anonmap_purge()
3377 ASSERT(amp->a_phead.p_lprev == &->a_phead); in anonmap_purge()
3378 amp->a_purgewait = 1; in anonmap_purge()
3379 cv_wait(&->a_purgecv, &->a_purgemtx); in anonmap_purge()
3381 mutex_exit(&->a_purgemtx); in anonmap_purge()
3383 ASSERT(amp->a_phead.p_lnext == &->a_phead); in anonmap_purge()
3384 ASSERT(amp->a_phead.p_lprev == &->a_phead); in anonmap_purge()
3385 ASSERT(amp->a_softlockcnt == 0); in anonmap_purge()
3395 struct anon_map *amp; in anonmap_alloc() local
3398 amp = kmem_cache_alloc(anonmap_cache, kmflags); in anonmap_alloc()
3399 if (amp == NULL) { in anonmap_alloc()
3404 amp->ahp = anon_create(btopr(size), flags); in anonmap_alloc()
3405 if (amp->ahp == NULL) { in anonmap_alloc()
3407 kmem_cache_free(anonmap_cache, amp); in anonmap_alloc()
3410 amp->refcnt = 1; in anonmap_alloc()
3411 amp->size = size; in anonmap_alloc()
3412 amp->swresv = swresv; in anonmap_alloc()
3413 amp->locality = 0; in anonmap_alloc()
3414 amp->a_szc = 0; in anonmap_alloc()
3415 amp->a_sp = NULL; in anonmap_alloc()
3416 amp->a_softlockcnt = 0; in anonmap_alloc()
3417 amp->a_purgewait = 0; in anonmap_alloc()
3418 amp->a_phead.p_lnext = &->a_phead; in anonmap_alloc()
3419 amp->a_phead.p_lprev = &->a_phead; in anonmap_alloc()
3421 return (amp); in anonmap_alloc()
3425 anonmap_free(struct anon_map *amp) in anonmap_free() argument
3427 ASSERT(amp->ahp != NULL); in anonmap_free()
3428 ASSERT(amp->refcnt == 0); in anonmap_free()
3429 ASSERT(amp->a_softlockcnt == 0); in anonmap_free()
3430 ASSERT(amp->a_phead.p_lnext == &->a_phead); in anonmap_free()
3431 ASSERT(amp->a_phead.p_lprev == &->a_phead); in anonmap_free()
3433 lgrp_shm_policy_fini(amp, NULL); in anonmap_free()
3434 anon_release(amp->ahp, btopr(amp->size)); in anonmap_free()
3435 kmem_cache_free(anonmap_cache, amp); in anonmap_free()
3593 anon_array_enter(struct anon_map *amp, ulong_t an_idx, anon_sync_obj_t *sobj) in anon_array_enter() argument
3608 ASSERT(RW_READ_HELD(&->a_rwlock)); in anon_array_enter()
3609 an_idx = P2ALIGN(an_idx, page_get_pagecnt(amp->a_szc)); in anon_array_enter()
3610 hash = ANON_ARRAY_HASH(amp, an_idx); in anon_array_enter()
3614 ap_slot = anon_get_slot(amp->ahp, an_idx); in anon_array_enter()
3623 anon_array_try_enter(struct anon_map *amp, ulong_t an_idx, in anon_array_try_enter() argument
3640 ASSERT(RW_READ_HELD(&->a_rwlock)); in anon_array_try_enter()
3641 an_idx = P2ALIGN(an_idx, page_get_pagecnt(amp->a_szc)); in anon_array_try_enter()
3642 hash = ANON_ARRAY_HASH(amp, an_idx); in anon_array_try_enter()
3648 ap_slot = anon_get_slot(amp->ahp, an_idx); in anon_array_try_enter()