Lines Matching refs:ahp
293 struct anon_hdr *ahp; in anon_create() local
297 if ((ahp = kmem_zalloc(sizeof (struct anon_hdr), kmemflags)) == NULL) { in anon_create()
301 mutex_init(&ahp->serial_lock, NULL, MUTEX_DEFAULT, NULL); in anon_create()
305 ahp->size = npages; in anon_create()
309 ahp->flags |= ANON_ALLOC_FORCE; in anon_create()
311 ahp->array_chunk = kmem_zalloc( in anon_create()
312 ahp->size * sizeof (struct anon *), kmemflags); in anon_create()
314 if (ahp->array_chunk == NULL) { in anon_create()
315 kmem_free(ahp, sizeof (struct anon_hdr)); in anon_create()
330 ahp->size = P2ROUNDUP(npages, ANON_CHUNK_SIZE); in anon_create()
331 nchunks = ahp->size >> ANON_CHUNK_SHIFT; in anon_create()
333 ahp->array_chunk = kmem_zalloc(nchunks * sizeof (ulong_t *), in anon_create()
336 if (ahp->array_chunk == NULL) { in anon_create()
337 kmem_free(ahp, sizeof (struct anon_hdr)); in anon_create()
341 return (ahp); in anon_create()
348 anon_release(struct anon_hdr *ahp, pgcnt_t npages) in anon_release() argument
354 ASSERT(npages <= ahp->size); in anon_release()
359 if (npages <= ANON_CHUNK_SIZE || (ahp->flags & ANON_ALLOC_FORCE)) { in anon_release()
360 kmem_free(ahp->array_chunk, ahp->size * sizeof (struct anon *)); in anon_release()
365 nchunks = ahp->size >> ANON_CHUNK_SHIFT; in anon_release()
367 ppp = &ahp->array_chunk[i]; in anon_release()
371 kmem_free(ahp->array_chunk, nchunks * sizeof (ulong_t *)); in anon_release()
373 mutex_destroy(&ahp->serial_lock); in anon_release()
374 kmem_free(ahp, sizeof (struct anon_hdr)); in anon_release()
382 anon_get_ptr(struct anon_hdr *ahp, ulong_t an_idx) in anon_get_ptr() argument
386 ASSERT(an_idx < ahp->size); in anon_get_ptr()
391 if ((ahp->size <= ANON_CHUNK_SIZE) || (ahp->flags & ANON_ALLOC_FORCE)) { in anon_get_ptr()
393 ((uintptr_t)ahp->array_chunk[an_idx] & ANON_PTRMASK)); in anon_get_ptr()
399 app = ahp->array_chunk[an_idx >> ANON_CHUNK_SHIFT]; in anon_get_ptr()
415 anon_get_next_ptr(struct anon_hdr *ahp, ulong_t *index) in anon_get_next_ptr() argument
425 size = ahp->size; in anon_get_next_ptr()
429 if ((size <= ANON_CHUNK_SIZE) || (ahp->flags & ANON_ALLOC_FORCE)) { in anon_get_next_ptr()
435 ((uintptr_t)ahp->array_chunk[i] & ANON_PTRMASK); in anon_get_next_ptr()
448 app = ahp->array_chunk[i >> ANON_CHUNK_SHIFT]; in anon_get_next_ptr()
470 anon_set_ptr(struct anon_hdr *ahp, ulong_t an_idx, struct anon *ap, int flags) in anon_set_ptr() argument
477 ASSERT(an_idx < ahp->size); in anon_set_ptr()
482 if (ahp->size <= ANON_CHUNK_SIZE || (ahp->flags & ANON_ALLOC_FORCE)) { in anon_set_ptr()
483 ap_addr = (uintptr_t *)&ahp->array_chunk[an_idx]; in anon_set_ptr()
489 ppp = &ahp->array_chunk[an_idx >> ANON_CHUNK_SHIFT]; in anon_set_ptr()
493 mutex_enter(&ahp->serial_lock); in anon_set_ptr()
494 ppp = &ahp->array_chunk[an_idx >> ANON_CHUNK_SHIFT]; in anon_set_ptr()
498 mutex_exit(&ahp->serial_lock); in anon_set_ptr()
502 mutex_exit(&ahp->serial_lock); in anon_set_ptr()
631 anon_grow(struct anon_hdr *ahp, ulong_t *startidx_p, pgcnt_t oldseg_pgs, in anon_grow() argument
635 pgcnt_t oldamp_pgs = ahp->size, newamp_pgs; in anon_grow()
644 ASSERT(startidx + oldseg_pgs <= ahp->size); in anon_grow()
673 if (totpages <= ANON_CHUNK_SIZE || (ahp->flags & ANON_ALLOC_FORCE)) { in anon_grow()
691 !(ahp->flags & ANON_ALLOC_FORCE)) { in anon_grow()
699 level2 = (void *)ahp->array_chunk; in anon_grow()
708 ANON_INITBUF(ahp->array_chunk, oldarrsz, in anon_grow()
710 kmem_free(ahp->array_chunk, oldarrsz); in anon_grow()
720 ANON_INITBUF(ahp->array_chunk, oldarrsz, in anon_grow()
722 kmem_free(ahp->array_chunk, oldarrsz); in anon_grow()
725 ahp->array_chunk = level1; in anon_grow()
726 ahp->size = newamp_pgs; in anon_grow()
1106 anon_szcshare(struct anon_hdr *ahp, ulong_t anon_index) in anon_szcshare() argument
1111 ap = anon_get_ptr(ahp, anon_index); in anon_szcshare()
1132 anon_share(struct anon_hdr *ahp, ulong_t anon_index, pgcnt_t nslots) in anon_share() argument
1137 if ((ap = anon_get_ptr(ahp, anon_index)) != NULL && in anon_share()
1148 struct anon_hdr *ahp, in anon_decref_pages() argument
1152 struct anon *ap = anon_get_ptr(ahp, an_idx); in anon_decref_pages()
1167 ASSERT(an_idx < ahp->size); in anon_decref_pages()
1169 if (ahp->size - an_idx < pgcnt) { in anon_decref_pages()
1174 pgcnt = ahp->size - an_idx; in anon_decref_pages()
1186 ASSERT(!anon_share(ahp, an_idx, pgcnt)); in anon_decref_pages()
1194 if ((ap = anon_get_ptr(ahp, an_idx + i)) == NULL) { in anon_decref_pages()
1209 (void) anon_set_ptr(ahp, an_idx + i, NULL, in anon_decref_pages()
1249 ap = anon_get_ptr(ahp, an_idx + j); in anon_decref_pages()
1272 ap = anon_get_ptr(ahp, an_idx + j); in anon_decref_pages()
1276 (void) anon_set_ptr(ahp, an_idx + j, in anon_decref_pages()
1311 (void) anon_set_ptr(ahp, an_idx + i, NULL, ANON_SLEEP); in anon_decref_pages()
1488 struct anon_hdr *ahp, in anon_fill_cow_holes() argument
1518 if (anon_get_next_ptr(ahp, &index) == NULL) { in anon_fill_cow_holes()
1522 ASSERT(!ANON_ISBUSY(anon_get_slot(ahp, index))); in anon_fill_cow_holes()
1541 if ((ap = anon_get_ptr(ahp, an_idx)) == NULL) { in anon_fill_cow_holes()
1562 (void) anon_set_ptr(ahp, an_idx, ap, in anon_fill_cow_holes()
1583 anon_free(struct anon_hdr *ahp, ulong_t index, size_t size) in anon_free() argument
1593 if ((ap = anon_get_next_ptr(ahp, &index)) == NULL) in anon_free()
1596 ASSERT(!ANON_ISBUSY(anon_get_slot(ahp, index))); in anon_free()
1601 (void) anon_set_ptr(ahp, index, NULL, ANON_SLEEP); in anon_free()
1613 struct anon_hdr *ahp, in anon_free_pages() argument
1628 ASSERT(an_idx < ahp->size); in anon_free_pages()
1638 if (anon_get_next_ptr(ahp, &index) == NULL) in anon_free_pages()
1641 ASSERT(!ANON_ISBUSY(anon_get_slot(ahp, index))); in anon_free_pages()
1653 anon_decref_pages(ahp, index, szc); in anon_free_pages()
1676 struct anon_hdr *ahp = amp->ahp; in anon_disclaim() local
1691 if ((ap = anon_get_next_ptr(ahp, &index)) == NULL) in anon_disclaim()
1702 ap = anon_get_ptr(ahp, index); in anon_disclaim()
1779 (void) anon_set_ptr(ahp, index, in anon_disclaim()
1847 ap = anon_get_ptr(ahp, index + i); in anon_disclaim()
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()
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()
2367 !anon_szcshare(amp->ahp, start_idx)) { in anon_map_getpages()
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()
2890 ap = anon_get_ptr(amp->ahp, index); in anon_map_createpages()
2948 anon_pages(amp->ahp, index, pg_cnt) == 0) { 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()
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()
3065 struct anon_hdr *ahp, in anon_try_demote_pages() argument
3084 ASSERT(sidx < ahp->size); in anon_try_demote_pages()
3091 ap = anon_get_ptr(ahp, sidx); in anon_try_demote_pages()
3111 if (ahp->size - sidx < pgcnt) { in anon_try_demote_pages()
3113 pgcnt = ahp->size - sidx; in anon_try_demote_pages()
3116 ap = anon_get_ptr(ahp, sidx); in anon_try_demote_pages()
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()
3286 struct anon_hdr *ahp = amp->ahp; in anon_shmap_free_pages() local
3295 ASSERT(eidx <= ahp->size); in anon_shmap_free_pages()
3296 ASSERT(!anon_share(ahp, sidx, btopr(len))); in anon_shmap_free_pages()
3304 (eidx < sidx_aligned + pages && eidx < ahp->size)) { in anon_shmap_free_pages()
3305 if (!anon_try_demote_pages(ahp, sidx_aligned, in anon_shmap_free_pages()
3312 anon_free(ahp, sidx, size); in anon_shmap_free_pages()
3320 anon_free_pages(ahp, sidx, in anon_shmap_free_pages()
3330 if (eidx != ahp->size && anon_get_next_ptr(ahp, &tidx) != NULL && in anon_shmap_free_pages()
3332 if (!anon_try_demote_pages(ahp, sidx, amp->a_szc, NULL, 0)) { in anon_shmap_free_pages()
3336 anon_free(ahp, sidx, size); in anon_shmap_free_pages()
3338 anon_free_pages(ahp, sidx, pages << PAGESHIFT, amp->a_szc); in anon_shmap_free_pages()
3405 amp->ahp = anon_create(btopr(size), flags); in anonmap_alloc()
3406 if (amp->ahp == NULL) { in anonmap_alloc()
3428 ASSERT(amp->ahp != NULL); in anonmap_free()
3435 anon_release(amp->ahp, btopr(amp->size)); in anonmap_free()
3447 non_anon(struct anon_hdr *ahp, ulong_t anon_idx, u_offset_t *offp, in non_anon() argument
3456 ap = anon_get_ptr(ahp, anon_idx); in non_anon()
3482 anon_pages(struct anon_hdr *ahp, ulong_t anon_index, pgcnt_t nslots) in anon_pages() argument
3487 if ((anon_get_ptr(ahp, anon_index)) != NULL) in anon_pages()
3563 anon_get_slot(struct anon_hdr *ahp, ulong_t an_idx) in anon_get_slot() argument
3568 ASSERT(an_idx < ahp->size); in anon_get_slot()
3573 if ((ahp->size <= ANON_CHUNK_SIZE) || (ahp->flags & ANON_ALLOC_FORCE)) { in anon_get_slot()
3574 return ((ulong_t *)&ahp->array_chunk[an_idx]); in anon_get_slot()
3580 ppp = &ahp->array_chunk[an_idx >> ANON_CHUNK_SHIFT]; in anon_get_slot()
3582 mutex_enter(&ahp->serial_lock); in anon_get_slot()
3583 ppp = &ahp->array_chunk[an_idx >> ANON_CHUNK_SHIFT]; in anon_get_slot()
3586 mutex_exit(&ahp->serial_lock); in anon_get_slot()
3615 ap_slot = anon_get_slot(amp->ahp, an_idx); in anon_array_enter()
3649 ap_slot = anon_get_slot(amp->ahp, an_idx); in anon_array_try_enter()