Lines Matching refs:ahp

292 	struct anon_hdr *ahp;  in anon_create()  local
296 if ((ahp = kmem_zalloc(sizeof (struct anon_hdr), kmemflags)) == NULL) { in anon_create()
300 mutex_init(&ahp->serial_lock, NULL, MUTEX_DEFAULT, NULL); in anon_create()
304 ahp->size = npages; in anon_create()
308 ahp->flags |= ANON_ALLOC_FORCE; in anon_create()
310 ahp->array_chunk = kmem_zalloc( in anon_create()
311 ahp->size * sizeof (struct anon *), kmemflags); in anon_create()
313 if (ahp->array_chunk == NULL) { in anon_create()
314 kmem_free(ahp, sizeof (struct anon_hdr)); in anon_create()
329 ahp->size = P2ROUNDUP(npages, ANON_CHUNK_SIZE); in anon_create()
330 nchunks = ahp->size >> ANON_CHUNK_SHIFT; in anon_create()
332 ahp->array_chunk = kmem_zalloc(nchunks * sizeof (ulong_t *), in anon_create()
335 if (ahp->array_chunk == NULL) { in anon_create()
336 kmem_free(ahp, sizeof (struct anon_hdr)); in anon_create()
340 return (ahp); in anon_create()
347 anon_release(struct anon_hdr *ahp, pgcnt_t npages) in anon_release() argument
353 ASSERT(npages <= ahp->size); in anon_release()
358 if (npages <= ANON_CHUNK_SIZE || (ahp->flags & ANON_ALLOC_FORCE)) { in anon_release()
359 kmem_free(ahp->array_chunk, ahp->size * sizeof (struct anon *)); in anon_release()
364 nchunks = ahp->size >> ANON_CHUNK_SHIFT; in anon_release()
366 ppp = &ahp->array_chunk[i]; in anon_release()
370 kmem_free(ahp->array_chunk, nchunks * sizeof (ulong_t *)); in anon_release()
372 mutex_destroy(&ahp->serial_lock); in anon_release()
373 kmem_free(ahp, sizeof (struct anon_hdr)); in anon_release()
381 anon_get_ptr(struct anon_hdr *ahp, ulong_t an_idx) in anon_get_ptr() argument
385 ASSERT(an_idx < ahp->size); in anon_get_ptr()
390 if ((ahp->size <= ANON_CHUNK_SIZE) || (ahp->flags & ANON_ALLOC_FORCE)) { in anon_get_ptr()
392 ((uintptr_t)ahp->array_chunk[an_idx] & ANON_PTRMASK)); in anon_get_ptr()
398 app = ahp->array_chunk[an_idx >> ANON_CHUNK_SHIFT]; in anon_get_ptr()
414 anon_get_next_ptr(struct anon_hdr *ahp, ulong_t *index) in anon_get_next_ptr() argument
424 size = ahp->size; in anon_get_next_ptr()
428 if ((size <= ANON_CHUNK_SIZE) || (ahp->flags & ANON_ALLOC_FORCE)) { in anon_get_next_ptr()
434 ((uintptr_t)ahp->array_chunk[i] & ANON_PTRMASK); in anon_get_next_ptr()
447 app = ahp->array_chunk[i >> ANON_CHUNK_SHIFT]; in anon_get_next_ptr()
469 anon_set_ptr(struct anon_hdr *ahp, ulong_t an_idx, struct anon *ap, int flags) in anon_set_ptr() argument
476 ASSERT(an_idx < ahp->size); in anon_set_ptr()
481 if (ahp->size <= ANON_CHUNK_SIZE || (ahp->flags & ANON_ALLOC_FORCE)) { in anon_set_ptr()
482 ap_addr = (uintptr_t *)&ahp->array_chunk[an_idx]; in anon_set_ptr()
488 ppp = &ahp->array_chunk[an_idx >> ANON_CHUNK_SHIFT]; in anon_set_ptr()
492 mutex_enter(&ahp->serial_lock); in anon_set_ptr()
493 ppp = &ahp->array_chunk[an_idx >> ANON_CHUNK_SHIFT]; in anon_set_ptr()
497 mutex_exit(&ahp->serial_lock); in anon_set_ptr()
501 mutex_exit(&ahp->serial_lock); in anon_set_ptr()
629 anon_grow(struct anon_hdr *ahp, ulong_t *startidx_p, pgcnt_t oldseg_pgs, in anon_grow() argument
633 pgcnt_t oldamp_pgs = ahp->size, newamp_pgs; in anon_grow()
642 ASSERT(startidx + oldseg_pgs <= ahp->size); in anon_grow()
671 if (totpages <= ANON_CHUNK_SIZE || (ahp->flags & ANON_ALLOC_FORCE)) { in anon_grow()
689 !(ahp->flags & ANON_ALLOC_FORCE)) { in anon_grow()
697 level2 = (void *)ahp->array_chunk; in anon_grow()
706 ANON_INITBUF(ahp->array_chunk, oldarrsz, in anon_grow()
708 kmem_free(ahp->array_chunk, oldarrsz); in anon_grow()
718 ANON_INITBUF(ahp->array_chunk, oldarrsz, in anon_grow()
720 kmem_free(ahp->array_chunk, oldarrsz); in anon_grow()
723 ahp->array_chunk = level1; in anon_grow()
724 ahp->size = newamp_pgs; in anon_grow()
1112 anon_szcshare(struct anon_hdr *ahp, ulong_t anon_index) in anon_szcshare() argument
1117 ap = anon_get_ptr(ahp, anon_index); in anon_szcshare()
1138 anon_share(struct anon_hdr *ahp, ulong_t anon_index, pgcnt_t nslots) in anon_share() argument
1143 if ((ap = anon_get_ptr(ahp, anon_index)) != NULL && in anon_share()
1154 struct anon_hdr *ahp, in anon_decref_pages() argument
1158 struct anon *ap = anon_get_ptr(ahp, an_idx); in anon_decref_pages()
1173 ASSERT(an_idx < ahp->size); in anon_decref_pages()
1175 if (ahp->size - an_idx < pgcnt) { in anon_decref_pages()
1180 pgcnt = ahp->size - an_idx; in anon_decref_pages()
1192 ASSERT(!anon_share(ahp, an_idx, pgcnt)); in anon_decref_pages()
1200 if ((ap = anon_get_ptr(ahp, an_idx + i)) == NULL) { in anon_decref_pages()
1215 (void) anon_set_ptr(ahp, an_idx + i, NULL, in anon_decref_pages()
1255 ap = anon_get_ptr(ahp, an_idx + j); in anon_decref_pages()
1279 ap = anon_get_ptr(ahp, an_idx + j); in anon_decref_pages()
1283 (void) anon_set_ptr(ahp, an_idx + j, in anon_decref_pages()
1318 (void) anon_set_ptr(ahp, an_idx + i, NULL, ANON_SLEEP); in anon_decref_pages()
1495 struct anon_hdr *ahp, in anon_fill_cow_holes() argument
1525 if (anon_get_next_ptr(ahp, &index) == NULL) { in anon_fill_cow_holes()
1529 ASSERT(!ANON_ISBUSY(anon_get_slot(ahp, index))); in anon_fill_cow_holes()
1548 if ((ap = anon_get_ptr(ahp, an_idx)) == NULL) { in anon_fill_cow_holes()
1569 (void) anon_set_ptr(ahp, an_idx, ap, in anon_fill_cow_holes()
1590 anon_free(struct anon_hdr *ahp, ulong_t index, size_t size) in anon_free() argument
1600 if ((ap = anon_get_next_ptr(ahp, &index)) == NULL) in anon_free()
1603 ASSERT(!ANON_ISBUSY(anon_get_slot(ahp, index))); in anon_free()
1608 (void) anon_set_ptr(ahp, index, NULL, ANON_SLEEP); in anon_free()
1620 struct anon_hdr *ahp, in anon_free_pages() argument
1635 ASSERT(an_idx < ahp->size); in anon_free_pages()
1645 if (anon_get_next_ptr(ahp, &index) == NULL) in anon_free_pages()
1648 ASSERT(!ANON_ISBUSY(anon_get_slot(ahp, index))); in anon_free_pages()
1660 anon_decref_pages(ahp, index, szc); in anon_free_pages()
1683 struct anon_hdr *ahp = amp->ahp; in anon_disclaim() local
1698 if ((ap = anon_get_next_ptr(ahp, &index)) == NULL) in anon_disclaim()
1709 ap = anon_get_ptr(ahp, index); in anon_disclaim()
1786 (void) anon_set_ptr(ahp, index, in anon_disclaim()
1854 ap = anon_get_ptr(ahp, index + i); in anon_disclaim()
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()
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()
2374 !anon_szcshare(amp->ahp, start_idx)) { in anon_map_getpages()
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()
2889 ap = anon_get_ptr(amp->ahp, index); in anon_map_createpages()
2947 anon_pages(amp->ahp, index, pg_cnt) == 0) { 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()
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()
3064 struct anon_hdr *ahp, in anon_try_demote_pages() argument
3083 ASSERT(sidx < ahp->size); in anon_try_demote_pages()
3090 ap = anon_get_ptr(ahp, sidx); in anon_try_demote_pages()
3110 if (ahp->size - sidx < pgcnt) { in anon_try_demote_pages()
3112 pgcnt = ahp->size - sidx; in anon_try_demote_pages()
3115 ap = anon_get_ptr(ahp, sidx); in anon_try_demote_pages()
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()
3285 struct anon_hdr *ahp = amp->ahp; in anon_shmap_free_pages() local
3294 ASSERT(eidx <= ahp->size); in anon_shmap_free_pages()
3295 ASSERT(!anon_share(ahp, sidx, btopr(len))); in anon_shmap_free_pages()
3303 (eidx < sidx_aligned + pages && eidx < ahp->size)) { in anon_shmap_free_pages()
3304 if (!anon_try_demote_pages(ahp, sidx_aligned, in anon_shmap_free_pages()
3311 anon_free(ahp, sidx, size); in anon_shmap_free_pages()
3319 anon_free_pages(ahp, sidx, in anon_shmap_free_pages()
3329 if (eidx != ahp->size && anon_get_next_ptr(ahp, &tidx) != NULL && in anon_shmap_free_pages()
3331 if (!anon_try_demote_pages(ahp, sidx, amp->a_szc, NULL, 0)) { in anon_shmap_free_pages()
3335 anon_free(ahp, sidx, size); in anon_shmap_free_pages()
3337 anon_free_pages(ahp, sidx, pages << PAGESHIFT, amp->a_szc); in anon_shmap_free_pages()
3404 amp->ahp = anon_create(btopr(size), flags); in anonmap_alloc()
3405 if (amp->ahp == NULL) { in anonmap_alloc()
3427 ASSERT(amp->ahp != NULL); in anonmap_free()
3434 anon_release(amp->ahp, btopr(amp->size)); in anonmap_free()
3446 non_anon(struct anon_hdr *ahp, ulong_t anon_idx, u_offset_t *offp, in non_anon() argument
3455 ap = anon_get_ptr(ahp, anon_idx); in non_anon()
3481 anon_pages(struct anon_hdr *ahp, ulong_t anon_index, pgcnt_t nslots) in anon_pages() argument
3486 if ((anon_get_ptr(ahp, anon_index)) != NULL) in anon_pages()
3562 anon_get_slot(struct anon_hdr *ahp, ulong_t an_idx) in anon_get_slot() argument
3567 ASSERT(an_idx < ahp->size); in anon_get_slot()
3572 if ((ahp->size <= ANON_CHUNK_SIZE) || (ahp->flags & ANON_ALLOC_FORCE)) { in anon_get_slot()
3573 return ((ulong_t *)&ahp->array_chunk[an_idx]); in anon_get_slot()
3579 ppp = &ahp->array_chunk[an_idx >> ANON_CHUNK_SHIFT]; in anon_get_slot()
3581 mutex_enter(&ahp->serial_lock); in anon_get_slot()
3582 ppp = &ahp->array_chunk[an_idx >> ANON_CHUNK_SHIFT]; in anon_get_slot()
3585 mutex_exit(&ahp->serial_lock); in anon_get_slot()
3614 ap_slot = anon_get_slot(amp->ahp, an_idx); in anon_array_enter()
3648 ap_slot = anon_get_slot(amp->ahp, an_idx); in anon_array_try_enter()