121 static int segvn_getprot(struct seg *seg, caddr_t addr, size_t len,
122 uint_t *protv);
123 static u_offset_t segvn_getoffset(struct seg *seg, caddr_t addr);
124 static int segvn_gettype(struct seg *seg, caddr_t addr);
125 static int segvn_getvp(struct seg *seg, caddr_t addr,
126 struct vnode **vpp);
127 static int segvn_advise(struct seg *seg, caddr_t addr, size_t len,
128 uint_t behav);
129 static void segvn_dump(struct seg *seg);
130 static int segvn_pagelock(struct seg *seg, caddr_t addr, size_t len,
131 struct page ***ppp, enum lock_type type, enum seg_rw rw);
132 static int segvn_setpagesize(struct seg *seg, caddr_t addr, size_t len,
133 uint_t szc);
134 static int segvn_getmemid(struct seg *seg, caddr_t addr,
135 memid_t *memidp);
136 static lgrp_mem_policy_info_t *segvn_getpolicy(struct seg *, caddr_t);
137 static int segvn_capable(struct seg *seg, segcapability_t capable);
138 static int segvn_inherit(struct seg *, caddr_t, size_t, uint_t);
139
140 struct seg_ops segvn_ops = {
141 segvn_dup,
142 segvn_unmap,
143 segvn_free,
144 segvn_fault,
145 segvn_faulta,
146 segvn_setprot,
147 segvn_checkprot,
148 segvn_kluster,
149 segvn_swapout,
150 segvn_sync,
151 segvn_incore,
152 segvn_lockop,
153 segvn_getprot,
154 segvn_getoffset,
155 segvn_gettype,
156 segvn_getvp,
157 segvn_advise,
158 segvn_dump,
159 segvn_pagelock,
160 segvn_setpagesize,
161 segvn_getmemid,
162 segvn_getpolicy,
163 segvn_capable,
164 segvn_inherit
165 };
166
167 /*
168 * Common zfod structures, provided as a shorthand for others to use.
169 */
170 static segvn_crargs_t zfod_segvn_crargs =
171 SEGVN_ZFOD_ARGS(PROT_ZFOD, PROT_ALL);
172 static segvn_crargs_t kzfod_segvn_crargs =
173 SEGVN_ZFOD_ARGS(PROT_ZFOD & ~PROT_USER,
174 PROT_ALL & ~PROT_USER);
175 static segvn_crargs_t stack_noexec_crargs =
176 SEGVN_ZFOD_ARGS(PROT_ZFOD & ~PROT_EXEC, PROT_ALL);
177
178 caddr_t zfod_argsp = (caddr_t)&zfod_segvn_crargs; /* user zfod argsp */
179 caddr_t kzfod_argsp = (caddr_t)&kzfod_segvn_crargs; /* kernel zfod argsp */
180 caddr_t stack_exec_argsp = (caddr_t)&zfod_segvn_crargs; /* executable stack */
181 caddr_t stack_noexec_argsp = (caddr_t)&stack_noexec_crargs; /* noexec stack */
182
183 #define vpgtob(n) ((n) * sizeof (struct vpage)) /* For brevity */
184
|
121 static int segvn_getprot(struct seg *seg, caddr_t addr, size_t len,
122 uint_t *protv);
123 static u_offset_t segvn_getoffset(struct seg *seg, caddr_t addr);
124 static int segvn_gettype(struct seg *seg, caddr_t addr);
125 static int segvn_getvp(struct seg *seg, caddr_t addr,
126 struct vnode **vpp);
127 static int segvn_advise(struct seg *seg, caddr_t addr, size_t len,
128 uint_t behav);
129 static void segvn_dump(struct seg *seg);
130 static int segvn_pagelock(struct seg *seg, caddr_t addr, size_t len,
131 struct page ***ppp, enum lock_type type, enum seg_rw rw);
132 static int segvn_setpagesize(struct seg *seg, caddr_t addr, size_t len,
133 uint_t szc);
134 static int segvn_getmemid(struct seg *seg, caddr_t addr,
135 memid_t *memidp);
136 static lgrp_mem_policy_info_t *segvn_getpolicy(struct seg *, caddr_t);
137 static int segvn_capable(struct seg *seg, segcapability_t capable);
138 static int segvn_inherit(struct seg *, caddr_t, size_t, uint_t);
139
140 struct seg_ops segvn_ops = {
141 .dup = segvn_dup,
142 .unmap = segvn_unmap,
143 .free = segvn_free,
144 .fault = segvn_fault,
145 .faulta = segvn_faulta,
146 .setprot = segvn_setprot,
147 .checkprot = segvn_checkprot,
148 .kluster = segvn_kluster,
149 .swapout = segvn_swapout,
150 .sync = segvn_sync,
151 .incore = segvn_incore,
152 .lockop = segvn_lockop,
153 .getprot = segvn_getprot,
154 .getoffset = segvn_getoffset,
155 .gettype = segvn_gettype,
156 .getvp = segvn_getvp,
157 .advise = segvn_advise,
158 .dump = segvn_dump,
159 .pagelock = segvn_pagelock,
160 .setpagesize = segvn_setpagesize,
161 .getmemid = segvn_getmemid,
162 .getpolicy = segvn_getpolicy,
163 .capable = segvn_capable,
164 .inherit = segvn_inherit,
165 };
166
167 /*
168 * Common zfod structures, provided as a shorthand for others to use.
169 */
170 static segvn_crargs_t zfod_segvn_crargs =
171 SEGVN_ZFOD_ARGS(PROT_ZFOD, PROT_ALL);
172 static segvn_crargs_t kzfod_segvn_crargs =
173 SEGVN_ZFOD_ARGS(PROT_ZFOD & ~PROT_USER,
174 PROT_ALL & ~PROT_USER);
175 static segvn_crargs_t stack_noexec_crargs =
176 SEGVN_ZFOD_ARGS(PROT_ZFOD & ~PROT_EXEC, PROT_ALL);
177
178 caddr_t zfod_argsp = (caddr_t)&zfod_segvn_crargs; /* user zfod argsp */
179 caddr_t kzfod_argsp = (caddr_t)&kzfod_segvn_crargs; /* kernel zfod argsp */
180 caddr_t stack_exec_argsp = (caddr_t)&zfod_segvn_crargs; /* executable stack */
181 caddr_t stack_noexec_argsp = (caddr_t)&stack_noexec_crargs; /* noexec stack */
182
183 #define vpgtob(n) ((n) * sizeof (struct vpage)) /* For brevity */
184
|