Lines Matching refs:seg

61 static int	segnf_dup(struct seg *seg, struct seg *newseg);
62 static int segnf_unmap(struct seg *seg, caddr_t addr, size_t len);
63 static void segnf_free(struct seg *seg);
65 static int segnf_setprot(struct seg *seg, caddr_t addr,
67 static int segnf_checkprot(struct seg *seg, caddr_t addr,
71 static int segnf_getprot(struct seg *seg, caddr_t addr,
73 static u_offset_t segnf_getoffset(struct seg *seg, caddr_t addr);
74 static int segnf_gettype(struct seg *seg, caddr_t addr);
75 static int segnf_getvp(struct seg *seg, caddr_t addr, struct vnode **vpp);
76 static void segnf_dump(struct seg *seg);
77 static int segnf_pagelock(struct seg *seg, caddr_t addr, size_t len,
79 static int segnf_setpagesize(struct seg *seg, caddr_t addr, size_t len,
81 static int segnf_getmemid(struct seg *seg, caddr_t addr, memid_t *memidp);
82 static lgrp_mem_policy_info_t *segnf_getpolicy(struct seg *seg,
90 (faultcode_t (*)(struct hat *, struct seg *, caddr_t, size_t,
93 (faultcode_t (*)(struct seg *, caddr_t))
98 (size_t (*)(struct seg *))NULL, /* swapout */
99 (int (*)(struct seg *, caddr_t, size_t, int, uint_t))
101 (size_t (*)(struct seg *, caddr_t, size_t, char *))
103 (int (*)(struct seg *, caddr_t, size_t, int, int, ulong_t *, size_t))
109 (int (*)(struct seg *, caddr_t, size_t, uint_t))
177 segnf_create(struct seg *seg, void *argsp) in segnf_create() argument
184 struct seg *s1; in segnf_create()
185 struct seg *s2; in segnf_create()
187 struct as *as = seg->s_as; in segnf_create()
196 struct seg kseg; in segnf_create()
217 hat_map(as->a_hat, seg->s_base, seg->s_size, HAT_MAP); in segnf_create()
222 seg->s_ops = &segnf_ops; in segnf_create()
223 seg->s_data = seg; in segnf_create()
224 seg->s_flags |= S_PURGE; in segnf_create()
231 color = addr_to_vcolor(seg->s_base); in segnf_create()
234 hat_memload(as->a_hat, seg->s_base, nfpp[color], in segnf_create()
241 if ((s1 = AS_SEGPREV(as, seg)) != NULL && in segnf_create()
243 s1->s_base + s1->s_size == seg->s_base) { in segnf_create()
246 seg->s_base -= size; in segnf_create()
247 seg->s_size += size; in segnf_create()
250 if ((s2 = AS_SEGNEXT(as, seg)) != NULL && in segnf_create()
252 seg->s_base + seg->s_size == s2->s_base) { in segnf_create()
255 seg->s_size += size; in segnf_create()
269 s1 = AS_SEGPREV(as, seg); in segnf_create()
273 s1 = AS_SEGPREV(s1->s_as, seg); in segnf_create()
276 s1 = AS_SEGNEXT(as, seg); in segnf_create()
280 s1 = AS_SEGNEXT(as, seg); in segnf_create()
295 segnf_dup(struct seg *seg, struct seg *newseg) in segnf_dup() argument
305 segnf_unmap(struct seg *seg, caddr_t addr, size_t len) in segnf_unmap() argument
307 ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as)); in segnf_unmap()
312 if (addr < seg->s_base || addr + len > seg->s_base + seg->s_size || in segnf_unmap()
320 hat_unload(seg->s_as->a_hat, addr, len, HAT_UNLOAD_UNMAP); in segnf_unmap()
322 if (addr == seg->s_base && len == seg->s_size) { in segnf_unmap()
326 seg_free(seg); in segnf_unmap()
327 } else if (addr == seg->s_base) { in segnf_unmap()
331 seg->s_base += len; in segnf_unmap()
332 seg->s_size -= len; in segnf_unmap()
333 } else if (addr + len == seg->s_base + seg->s_size) { in segnf_unmap()
337 seg->s_size -= len; in segnf_unmap()
345 size_t nsize = (seg->s_base + seg->s_size) - nbase; in segnf_unmap()
346 struct seg *nseg; in segnf_unmap()
351 seg->s_size = addr - seg->s_base; in segnf_unmap()
352 nseg = seg_alloc(seg->s_as, nbase, nsize); in segnf_unmap()
359 nseg->s_ops = seg->s_ops; in segnf_unmap()
362 mutex_enter(&seg->s_as->a_contents); in segnf_unmap()
363 seg->s_as->a_flags |= AS_NEEDSPURGE; in segnf_unmap()
364 mutex_exit(&seg->s_as->a_contents); in segnf_unmap()
374 segnf_free(struct seg *seg) in segnf_free() argument
376 ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as)); in segnf_free()
390 segnf_setprot(struct seg *seg, caddr_t addr, size_t len, uint_t prot) in segnf_setprot() argument
392 ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as)); in segnf_setprot()
398 segnf_checkprot(struct seg *seg, caddr_t addr, size_t len, uint_t prot) in segnf_checkprot() argument
401 ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as)); in segnf_checkprot()
403 sprot = seg->s_as == &kas ? PROT_READ : PROT_READ|PROT_USER; in segnf_checkprot()
421 segnf_getprot(struct seg *seg, caddr_t addr, size_t len, uint_t *protv) in segnf_getprot() argument
423 size_t pgno = seg_page(seg, addr + len) - seg_page(seg, addr) + 1; in segnf_getprot()
425 ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as)); in segnf_getprot()
434 segnf_getoffset(struct seg *seg, caddr_t addr) in segnf_getoffset() argument
436 ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as)); in segnf_getoffset()
443 segnf_gettype(struct seg *seg, caddr_t addr) in segnf_gettype() argument
445 ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as)); in segnf_gettype()
452 segnf_getvp(struct seg *seg, caddr_t addr, struct vnode **vpp) in segnf_getvp() argument
454 ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as)); in segnf_getvp()
465 segnf_dump(struct seg *seg) in segnf_dump() argument
470 segnf_pagelock(struct seg *seg, caddr_t addr, size_t len, in segnf_pagelock() argument
478 segnf_setpagesize(struct seg *seg, caddr_t addr, size_t len, in segnf_setpagesize() argument
486 segnf_getmemid(struct seg *seg, caddr_t addr, memid_t *memidp) in segnf_getmemid() argument
493 segnf_getpolicy(struct seg *seg, caddr_t addr) in segnf_getpolicy() argument