Lines Matching refs:seg

67 #include <vm/seg.h>
76 * Private seg op routines
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)
197 ASSERT(seg != NULL && seg->s_as == &kas);
198 ASSERT(RW_WRITE_HELD(&seg->s_as->a_lock));
200 if (seg->s_size & PAGEOFFSET) {
217 np = btop(seg->s_size);
218 kpsd->kpsd_arena = vmem_create("segkp", seg->s_base,
219 seg->s_size, PAGESIZE, NULL, NULL, NULL, 5 * PAGESIZE,
227 seg->s_data = (void *)kpsd;
228 seg->s_ops = &segkp_ops;
229 segkpinit_mem_config(seg);
238 segkp_cache_init(struct seg *seg, int maxsize, size_t len, uint_t flags)
252 segkp_cache[i].kpf_seg = seg;
268 struct seg *seg;
279 seg = segkp_cache[i].kpf_seg;
288 segkp_release_internal(seg, kpd, kpd->kp_len);
302 segkp_get(struct seg *seg, size_t len, uint_t flags)
306 if (segkp_get_internal(seg, len, flags, &kpd, NULL) != NULL) {
322 struct seg *seg;
331 seg = freelist->kpf_seg;
339 segkp_insert(seg, kpd);
344 if (segkp_get_internal(seg, len, flags, &kpd, NULL) != NULL) {
353 struct seg *seg,
362 if (segkp_get_internal(seg, len, flags, &kpd, amp) != NULL) {
384 struct seg *seg,
390 struct segkp_segdata *kpsd = (struct segkp_segdata *)seg->s_data;
400 caddr_t s_base = (segkp_fromheap) ? kvseg.s_base : seg->s_base;
422 vbase = vmem_alloc(SEGKP_VMEM(seg), len, kmflag | VM_BESTFIT);
432 vmem_free(SEGKP_VMEM(seg), vbase, len);
467 vmem_free(SEGKP_VMEM(seg), vbase, len);
536 NULL, pl, PAGESIZE, seg, va, S_CREATE,
553 PG_NORELOC, seg, va)) == NULL) {
561 segkp_release_internal(seg, kpd, va - vbase);
573 hat_memload(seg->s_as->a_hat, va, pp, (PROT_READ|PROT_WRITE),
593 segkp_insert(seg, kpd);
604 segkp_release(struct seg *seg, caddr_t vaddr)
609 if ((kpd = segkp_find(seg, vaddr)) == NULL) {
618 segkp_delete(seg, kpd);
629 segkp_release_internal(seg, kpd, kpd->kp_len);
638 segkp_release_internal(struct seg *seg, struct segkp_data *kpd, size_t len)
657 segkp_delete(seg, kpd);
671 hat_unload(seg->s_as->a_hat, va, (np << PAGESHIFT),
754 vmem_free(SEGKP_VMEM(seg), kpd->kp_base, kpd->kp_len);
803 struct seg kseg;
931 struct seg *seg,
940 ASSERT(seg->s_as == &kas && RW_READ_HELD(&seg->s_as->a_lock));
950 if ((kpd = segkp_find(seg, vaddr)) == NULL)
969 if ((err = segkp_load(hat, seg, vaddr, len, kpd, KPD_LOCKED))) {
1001 err = segkp_load(hat, seg, vaddr, len, kpd, kpd->kp_flags);
1028 err = segkp_unlock(hat, seg, vaddr, len, kpd, flags);
1046 segkp_checkprot(struct seg *seg, caddr_t vaddr, size_t len, uint_t prot)
1052 if ((kpd = segkp_find(seg, vaddr)) == NULL)
1077 segkp_kluster(struct seg *seg, caddr_t addr, ssize_t delta)
1089 struct seg *seg,
1139 pl, PAGESIZE, seg, va, S_READ, kcred, NULL);
1145 (void) segkp_unlock(hat, seg, vaddr,
1174 struct seg *seg,
1189 seg = seg;
1273 segkp_insert(struct seg *seg, struct segkp_data *kpd)
1275 struct segkp_segdata *kpsd = (struct segkp_segdata *)seg->s_data;
1293 segkp_delete(struct seg *seg, struct segkp_data *kpd)
1295 struct segkp_segdata *kpsd = (struct segkp_segdata *)seg->s_data;
1324 segkp_find(struct seg *seg, caddr_t vaddr)
1326 struct segkp_segdata *kpsd = (struct segkp_segdata *)seg->s_data;
1367 segkp_dump(struct seg *seg)
1371 struct segkp_segdata *kpsd = (struct segkp_segdata *)seg->s_data;
1383 ASSERT(seg->s_as == &kas);
1384 pfn = hat_getpfnum(seg->s_as->a_hat, addr);
1386 dump_addpage(seg->s_as, addr, pfn);
1396 segkp_pagelock(struct seg *seg, caddr_t addr, size_t len,
1404 segkp_getmemid(struct seg *seg, caddr_t addr, memid_t *memidp)
1411 segkp_getpolicy(struct seg *seg, caddr_t addr)
1418 segkp_capable(struct seg *seg, segcapability_t capability)
1460 segkpinit_mem_config(struct seg *seg)
1464 ret = kphysm_setup_func_register(&segkp_mem_config_vec, (void *)seg);