Lines Matching refs:seg
163 static int segdev_dup(struct seg *, struct seg *);
164 static int segdev_unmap(struct seg *, caddr_t, size_t);
165 static void segdev_free(struct seg *);
166 static faultcode_t segdev_fault(struct hat *, struct seg *, caddr_t, size_t,
168 static faultcode_t segdev_faulta(struct seg *, caddr_t);
169 static int segdev_setprot(struct seg *, caddr_t, size_t, uint_t);
170 static int segdev_checkprot(struct seg *, caddr_t, size_t, uint_t);
172 static int segdev_sync(struct seg *, caddr_t, size_t, int, uint_t);
173 static size_t segdev_incore(struct seg *, caddr_t, size_t, char *);
174 static int segdev_lockop(struct seg *, caddr_t, size_t, int, int,
176 static int segdev_getprot(struct seg *, caddr_t, size_t, uint_t *);
177 static u_offset_t segdev_getoffset(struct seg *, caddr_t);
178 static int segdev_gettype(struct seg *, caddr_t);
179 static int segdev_getvp(struct seg *, caddr_t, struct vnode **);
180 static int segdev_advise(struct seg *, caddr_t, size_t, uint_t);
181 static void segdev_dump(struct seg *);
182 static int segdev_pagelock(struct seg *, caddr_t, size_t,
184 static int segdev_setpagesize(struct seg *, caddr_t, size_t, uint_t);
185 static int segdev_getmemid(struct seg *, caddr_t, memid_t *);
186 static lgrp_mem_policy_info_t *segdev_getpolicy(struct seg *, caddr_t);
187 static int segdev_capable(struct seg *, segcapability_t);
203 (size_t (*)(struct seg *))NULL, /* swapout */
225 static void segdev_softunlock(struct hat *, struct seg *, caddr_t,
228 static faultcode_t segdev_faultpage(struct hat *, struct seg *, caddr_t,
231 static faultcode_t segdev_faultpages(struct hat *, struct seg *, caddr_t,
250 struct seg *newseg);
359 segdev_create(struct seg *seg, void *argsp) in segdev_create() argument
370 ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as, &seg->s_as->a_lock)); in segdev_create()
372 hat_map(seg->s_as->a_hat, seg->s_base, seg->s_size, HAT_MAP); in segdev_create()
406 seg->s_ops = &segdev_ops; in segdev_create()
407 seg->s_data = sdp; in segdev_create()
410 dhp->dh_seg = seg; in segdev_create()
422 seg->s_as, seg->s_base, seg->s_size, in segdev_create()
427 hat_unload(seg->s_as->a_hat, seg->s_base, seg->s_size, in segdev_create()
434 if ((SEGOP_GETTYPE(seg, (seg)->s_base) & (MAP_SHARED | in segdev_create()
436 seg->s_as->a_resvsize -= seg->s_size; in segdev_create()
458 segdev_dup(struct seg *seg, struct seg *newseg) in segdev_dup() argument
460 struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_dup()
467 "segdev_dup:start dhp=%p, seg=%p", (void *)dhp, (void *)seg); in segdev_dup()
470 (void *)dhp, (void *)seg)); in segdev_dup()
476 ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as, &seg->s_as->a_lock)); in segdev_dup()
480 newseg->s_ops = seg->s_ops; in segdev_dup()
518 ret, (void *)dhp, (void *)seg); in segdev_dup()
521 ret, (void *)dhp, (void *)seg)); in segdev_dup()
540 struct seg *newseg) in devmap_handle_dup()
619 segdev_unmap(struct seg *seg, caddr_t addr, size_t len) in segdev_unmap() argument
621 register struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_unmap()
623 register struct seg *nseg; in segdev_unmap()
639 (void *)dhp, (void *)seg, (void *)addr, len); in segdev_unmap()
642 (void *)dhp, (void *)seg, (void *)addr, len)); in segdev_unmap()
648 ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as, &seg->s_as->a_lock)); in segdev_unmap()
664 if (addr < seg->s_base || addr + len > seg->s_base + seg->s_size || in segdev_unmap()
689 hat_unload(seg->s_as->a_hat, dhpp->dh_uvaddr, in segdev_unmap()
697 hat_unload(seg->s_as->a_hat, addr, len, in segdev_unmap()
704 hat_unload(seg->s_as->a_hat, addr, len, HAT_UNLOAD_UNMAP); in segdev_unmap()
710 off = sdp->offset + (offset_t)(addr - seg->s_base); in segdev_unmap()
716 (void) VOP_DELMAP(VTOCVP(sdp->vp), off, seg->s_as, addr, len, in segdev_unmap()
722 if (addr == seg->s_base && len == seg->s_size) { in segdev_unmap()
723 seg_free(seg); in segdev_unmap()
727 opages = seg_pages(seg); in segdev_unmap()
734 if (addr == seg->s_base) { in segdev_unmap()
756 seg->s_base += len; in segdev_unmap()
757 seg->s_size -= len; in segdev_unmap()
765 if (addr + len == seg->s_base + seg->s_size) { in segdev_unmap()
778 seg->s_size -= len; in segdev_unmap()
795 nsize = (seg->s_base + seg->s_size) - nbase; /* new seg size */ in segdev_unmap()
796 seg->s_size = addr - seg->s_base; /* shrink old seg */ in segdev_unmap()
797 nseg = seg_alloc(seg->s_as, nbase, nsize); in segdev_unmap()
802 "segdev_unmap: seg=%p nseg=%p", (void *)seg, (void *)nseg); in segdev_unmap()
804 (void *)seg, (void *)nseg)); in segdev_unmap()
807 nseg->s_ops = seg->s_ops; in segdev_unmap()
812 nsdp->offset = sdp->offset + (offset_t)(nseg->s_base - seg->s_base); in segdev_unmap()
834 npages = seg_pages(seg); /* seg has shrunk */ in segdev_unmap()
1081 register struct seg *seg = dhp->dh_seg; in devmap_handle_unmap_tail() local
1082 register struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in devmap_handle_unmap_tail()
1099 off = (ulong_t)sdp->offset + (addr - seg->s_base); in devmap_handle_unmap_tail()
1123 segdev_free(struct seg *seg) in segdev_free() argument
1125 register struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_free()
1129 "segdev_free: dhp=%p seg=%p", (void *)dhp, (void *)seg); in segdev_free()
1131 (void *)dhp, (void *)seg)); in segdev_free()
1137 ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as, &seg->s_as->a_lock)); in segdev_free()
1144 kmem_free(sdp->vpage, vpgtob(seg_pages(seg))); in segdev_free()
1322 struct seg *seg, /* seg_dev of interest */ in segdev_softunlock() argument
1327 struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_softunlock()
1387 if (AS_ISUNMAPWAIT(seg->s_as)) { in segdev_softunlock()
1388 mutex_enter(&seg->s_as->a_contents); in segdev_softunlock()
1389 if (AS_ISUNMAPWAIT(seg->s_as)) { in segdev_softunlock()
1390 AS_CLRUNMAPWAIT(seg->s_as); in segdev_softunlock()
1391 cv_broadcast(&seg->s_as->a_cv); in segdev_softunlock()
1393 mutex_exit(&seg->s_as->a_contents); in segdev_softunlock()
1408 struct seg *seg, /* seg_dev of interest */ in segdev_faultpage() argument
1415 struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_faultpage()
1423 "segdev_faultpage: dhp=%p seg=%p addr=%p", dhp, seg, addr); in segdev_faultpage()
1425 (void *)dhp, (void *)seg, (void *)addr)); in segdev_faultpage()
1465 offset = sdp->offset + (u_offset_t)(addr - seg->s_base); in segdev_faultpage()
1586 if (ddi_map_fault(dip, hat, seg, addr, NULL, pfnum, prot & PROT_ALL, in segdev_faultpage()
1596 struct seg *seg, /* the seg_dev of interest */ in segdev_fault() argument
1602 struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_fault()
1614 (void *)dhp_head, (void *)seg, (void *)addr, len, type); in segdev_fault()
1617 (void *)dhp_head, (void *)seg, (void *)addr, len, type)); in segdev_fault()
1619 ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); in segdev_fault()
1623 return (segdev_faultpages(hat, seg, addr, len, type, rw, NULL)); in segdev_fault()
1809 aoff = sdp->offset + (offset_t)(laddr - seg->s_base); in segdev_fault()
1827 err = segdev_faultpages(hat, seg, laddr, llen, in segdev_fault()
1848 (void) segdev_fault(hat, seg, addr, done, in segdev_fault()
1901 struct seg *seg, /* the seg_dev of interest */ in segdev_faultpages() argument
1908 register struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_faultpages()
1916 (void *)dhp, (void *)seg, (void *)addr, len); in segdev_faultpages()
1919 (void *)dhp, (void *)seg, (void *)addr, len)); in segdev_faultpages()
1935 segdev_softunlock(hat, seg, addr, len, rw); in segdev_faultpages()
2020 vpage = &sdp->vpage[seg_page(seg, addr)]; in segdev_faultpages()
2024 if (err = segdev_faultpage(hat, seg, a, vpage, type, rw, dhp)) { in segdev_faultpages()
2035 segdev_softunlock(hat, seg, addr, done, S_OTHER); in segdev_faultpages()
2055 segdev_faulta(struct seg *seg, caddr_t addr) in segdev_faulta() argument
2058 "segdev_faulta: seg=%p addr=%p", (void *)seg, (void *)addr); in segdev_faulta()
2059 ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); in segdev_faulta()
2065 segdev_setprot(struct seg *seg, caddr_t addr, size_t len, uint_t prot) in segdev_setprot() argument
2067 register struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_setprot()
2076 (void *)seg, (void *)addr, len, prot); in segdev_setprot()
2077 ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); in segdev_setprot()
2117 if (addr == seg->s_base && len == seg->s_size && sdp->pageprot == 0) { in segdev_setprot()
2130 sdp->vpage = kmem_zalloc(vpgtob(seg_pages(seg)), in segdev_setprot()
2132 evp = &sdp->vpage[seg_pages(seg)]; in segdev_setprot()
2139 evp = &sdp->vpage[seg_page(seg, addr + len)]; in segdev_setprot()
2140 for (vp = &sdp->vpage[seg_page(seg, addr)]; vp < evp; vp++) in segdev_setprot()
2166 hat_unload(seg->s_as->a_hat, dhp->dh_uvaddr, in segdev_setprot()
2178 hat_unload(seg->s_as->a_hat, addr, len, HAT_UNLOAD); in segdev_setprot()
2185 hat_chgprot(seg->s_as->a_hat, addr, len, prot); in segdev_setprot()
2192 segdev_checkprot(struct seg *seg, caddr_t addr, size_t len, uint_t prot) in segdev_checkprot() argument
2194 struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_checkprot()
2199 (void *)seg, (void *)addr, len, prot); in segdev_checkprot()
2200 ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); in segdev_checkprot()
2217 evp = &sdp->vpage[seg_page(seg, addr + len)]; in segdev_checkprot()
2218 for (vp = &sdp->vpage[seg_page(seg, addr)]; vp < evp; vp++) { in segdev_checkprot()
2229 segdev_getprot(struct seg *seg, caddr_t addr, size_t len, uint_t *protv) in segdev_getprot() argument
2231 struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_getprot()
2236 (void *)seg, (void *)addr, len, (void *)protv); in segdev_getprot()
2237 ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); in segdev_getprot()
2239 pgno = seg_page(seg, addr + len) - seg_page(seg, addr) + 1; in segdev_getprot()
2247 size_t pgoff = seg_page(seg, addr); in segdev_getprot()
2261 segdev_getoffset(register struct seg *seg, caddr_t addr) in segdev_getoffset() argument
2263 register struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_getoffset()
2266 "segdev_getoffset:start seg=%p addr=%p", (void *)seg, (void *)addr); in segdev_getoffset()
2268 ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); in segdev_getoffset()
2270 return ((u_offset_t)sdp->offset + (addr - seg->s_base)); in segdev_getoffset()
2275 segdev_gettype(register struct seg *seg, caddr_t addr) in segdev_gettype() argument
2277 register struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_gettype()
2280 "segdev_gettype:start seg=%p addr=%p", (void *)seg, (void *)addr); in segdev_gettype()
2282 ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); in segdev_gettype()
2290 segdev_getvp(register struct seg *seg, caddr_t addr, struct vnode **vpp) in segdev_getvp() argument
2292 register struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_getvp()
2295 "segdev_getvp:start seg=%p addr=%p", (void *)seg, (void *)addr); in segdev_getvp()
2297 ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); in segdev_getvp()
2323 segdev_sync(struct seg *seg, caddr_t addr, size_t len, int attr, uint_t flags) in segdev_sync() argument
2327 ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); in segdev_sync()
2337 segdev_incore(struct seg *seg, caddr_t addr, size_t len, char *vec) in segdev_incore() argument
2343 ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); in segdev_incore()
2357 segdev_lockop(struct seg *seg, caddr_t addr, in segdev_lockop() argument
2362 ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); in segdev_lockop()
2373 segdev_advise(struct seg *seg, caddr_t addr, size_t len, uint_t behav) in segdev_advise() argument
2377 ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); in segdev_advise()
2387 segdev_dump(struct seg *seg) in segdev_dump() argument
2474 segdev_pagelock(struct seg *seg, caddr_t addr, size_t len, in segdev_pagelock() argument
2484 segdev_setpagesize(struct seg *seg, caddr_t addr, size_t len, in segdev_setpagesize() argument
4020 segdev_getmemid(struct seg *seg, caddr_t addr, memid_t *memidp) in segdev_getmemid() argument
4022 struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_getmemid()
4030 memidp->val[1] = sdp->offset + (uintptr_t)(addr - seg->s_base); in segdev_getmemid()
4036 segdev_getpolicy(struct seg *seg, caddr_t addr) in segdev_getpolicy() argument
4043 segdev_capable(struct seg *seg, segcapability_t capability) in segdev_capable() argument
4062 struct seg kseg; in segdev_init()
4082 segdev_copyfrom(struct seg *seg, in segdev_copyfrom() argument
4085 struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_copyfrom()
4089 (off_t)(uaddr - seg->s_base), devaddr, kaddr, len)); in segdev_copyfrom()
4093 segdev_copyto(struct seg *seg, in segdev_copyto() argument
4096 struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_copyto()
4100 (off_t)(uaddr - seg->s_base), kaddr, devaddr, len)); in segdev_copyto()