Lines Matching refs:seg

79 static void	segkp_dump(struct seg *seg);
80 static int segkp_checkprot(struct seg *seg, caddr_t addr, size_t len,
82 static int segkp_kluster(struct seg *seg, caddr_t addr, ssize_t delta);
83 static int segkp_pagelock(struct seg *seg, caddr_t addr, size_t len,
86 static void segkp_insert(struct seg *seg, struct segkp_data *kpd);
87 static void segkp_delete(struct seg *seg, struct segkp_data *kpd);
88 static caddr_t segkp_get_internal(struct seg *seg, size_t len, uint_t flags,
90 static void segkp_release_internal(struct seg *seg,
92 static int segkp_unlock(struct hat *hat, struct seg *seg, caddr_t vaddr,
94 static int segkp_load(struct hat *hat, struct seg *seg, caddr_t vaddr,
96 static struct segkp_data *segkp_find(struct seg *seg, caddr_t vaddr);
97 static int segkp_getmemid(struct seg *seg, caddr_t addr, memid_t *memidp);
98 static lgrp_mem_policy_info_t *segkp_getpolicy(struct seg *seg,
100 static int segkp_capable(struct seg *seg, segcapability_t capability);
183 static void segkpinit_mem_config(struct seg *);
192 segkp_create(struct seg *seg) in segkp_create() argument
197 ASSERT(seg != NULL && seg->s_as == &kas); in segkp_create()
198 ASSERT(RW_WRITE_HELD(&seg->s_as->a_lock)); in segkp_create()
200 if (seg->s_size & PAGEOFFSET) { in segkp_create()
217 np = btop(seg->s_size); in segkp_create()
218 kpsd->kpsd_arena = vmem_create("segkp", seg->s_base, in segkp_create()
219 seg->s_size, PAGESIZE, NULL, NULL, NULL, 5 * PAGESIZE, in segkp_create()
227 seg->s_data = (void *)kpsd; in segkp_create()
228 seg->s_ops = &segkp_ops; in segkp_create()
229 segkpinit_mem_config(seg); in segkp_create()
238 segkp_cache_init(struct seg *seg, int maxsize, size_t len, uint_t flags) in segkp_cache_init() argument
252 segkp_cache[i].kpf_seg = seg; in segkp_cache_init()
268 struct seg *seg; in segkp_cache_free() local
279 seg = segkp_cache[i].kpf_seg; in segkp_cache_free()
288 segkp_release_internal(seg, kpd, kpd->kp_len); in segkp_cache_free()
302 segkp_get(struct seg *seg, size_t len, uint_t flags) in segkp_get() argument
306 if (segkp_get_internal(seg, len, flags, &kpd, NULL) != NULL) { in segkp_get()
322 struct seg *seg; in segkp_cache_get() local
331 seg = freelist->kpf_seg; in segkp_cache_get()
339 segkp_insert(seg, kpd); in segkp_cache_get()
344 if (segkp_get_internal(seg, len, flags, &kpd, NULL) != NULL) { in segkp_cache_get()
353 struct seg *seg, in segkp_get_withanonmap() argument
362 if (segkp_get_internal(seg, len, flags, &kpd, amp) != NULL) { in segkp_get_withanonmap()
384 struct seg *seg, in segkp_get_internal() argument
390 struct segkp_segdata *kpsd = (struct segkp_segdata *)seg->s_data; in segkp_get_internal()
400 caddr_t s_base = (segkp_fromheap) ? kvseg.s_base : seg->s_base; in segkp_get_internal()
423 vbase = vmem_alloc(SEGKP_VMEM(seg), len, kmflag | VM_BESTFIT); in segkp_get_internal()
433 vmem_free(SEGKP_VMEM(seg), vbase, len); in segkp_get_internal()
468 vmem_free(SEGKP_VMEM(seg), vbase, len); in segkp_get_internal()
537 NULL, pl, PAGESIZE, seg, va, S_CREATE, in segkp_get_internal()
554 PG_NORELOC, seg, va)) == NULL) { in segkp_get_internal()
562 segkp_release_internal(seg, kpd, va - vbase); in segkp_get_internal()
574 hat_memload(seg->s_as->a_hat, va, pp, (PROT_READ|PROT_WRITE), in segkp_get_internal()
594 segkp_insert(seg, kpd); in segkp_get_internal()
605 segkp_release(struct seg *seg, caddr_t vaddr) in segkp_release() argument
610 if ((kpd = segkp_find(seg, vaddr)) == NULL) { in segkp_release()
619 segkp_delete(seg, kpd); in segkp_release()
630 segkp_release_internal(seg, kpd, kpd->kp_len); in segkp_release()
639 segkp_release_internal(struct seg *seg, struct segkp_data *kpd, size_t len) in segkp_release_internal() argument
659 segkp_delete(seg, kpd); in segkp_release_internal()
673 hat_unload(seg->s_as->a_hat, va, (np << PAGESHIFT), in segkp_release_internal()
756 vmem_free(SEGKP_VMEM(seg), kpd->kp_base, kpd->kp_len); in segkp_release_internal()
805 struct seg kseg; in segkp_map_red()
933 struct seg *seg, in segkp_fault() argument
942 ASSERT(seg->s_as == &kas && RW_READ_HELD(&seg->s_as->a_lock)); in segkp_fault()
952 if ((kpd = segkp_find(seg, vaddr)) == NULL) in segkp_fault()
971 if ((err = segkp_load(hat, seg, vaddr, len, kpd, KPD_LOCKED))) { in segkp_fault()
1003 err = segkp_load(hat, seg, vaddr, len, kpd, kpd->kp_flags); in segkp_fault()
1030 err = segkp_unlock(hat, seg, vaddr, len, kpd, flags); in segkp_fault()
1048 segkp_checkprot(struct seg *seg, caddr_t vaddr, size_t len, uint_t prot) in segkp_checkprot() argument
1054 if ((kpd = segkp_find(seg, vaddr)) == NULL) in segkp_checkprot()
1079 segkp_kluster(struct seg *seg, caddr_t addr, ssize_t delta) in segkp_kluster() argument
1091 struct seg *seg, in segkp_load() argument
1141 pl, PAGESIZE, seg, va, S_READ, kcred, NULL); in segkp_load()
1147 (void) segkp_unlock(hat, seg, vaddr, in segkp_load()
1176 struct seg *seg, in segkp_unlock() argument
1191 seg = seg; in segkp_unlock()
1275 segkp_insert(struct seg *seg, struct segkp_data *kpd) in segkp_insert() argument
1277 struct segkp_segdata *kpsd = (struct segkp_segdata *)seg->s_data; in segkp_insert()
1295 segkp_delete(struct seg *seg, struct segkp_data *kpd) in segkp_delete() argument
1297 struct segkp_segdata *kpsd = (struct segkp_segdata *)seg->s_data; in segkp_delete()
1326 segkp_find(struct seg *seg, caddr_t vaddr) in segkp_find() argument
1328 struct segkp_segdata *kpsd = (struct segkp_segdata *)seg->s_data; in segkp_find()
1369 segkp_dump(struct seg *seg) in segkp_dump() argument
1373 struct segkp_segdata *kpsd = (struct segkp_segdata *)seg->s_data; in segkp_dump()
1385 ASSERT(seg->s_as == &kas); in segkp_dump()
1386 pfn = hat_getpfnum(seg->s_as->a_hat, addr); in segkp_dump()
1388 dump_addpage(seg->s_as, addr, pfn); in segkp_dump()
1398 segkp_pagelock(struct seg *seg, caddr_t addr, size_t len, in segkp_pagelock() argument
1406 segkp_getmemid(struct seg *seg, caddr_t addr, memid_t *memidp) in segkp_getmemid() argument
1413 segkp_getpolicy(struct seg *seg, caddr_t addr) in segkp_getpolicy() argument
1420 segkp_capable(struct seg *seg, segcapability_t capability) in segkp_capable() argument
1462 segkpinit_mem_config(struct seg *seg) in segkpinit_mem_config() argument
1466 ret = kphysm_setup_func_register(&segkp_mem_config_vec, (void *)seg); in segkpinit_mem_config()