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