92 .fault = SEGSPT_BADOP(int),
93 .faulta = SEGSPT_BADOP(faultcode_t),
94 .setprot = SEGSPT_BADOP(int),
95 .checkprot = SEGSPT_BADOP(int),
96 .kluster = SEGSPT_BADOP(int),
97 .swapout = SEGSPT_BADOP(size_t),
98 .sync = SEGSPT_BADOP(int),
99 .incore = SEGSPT_BADOP(size_t),
100 .lockop = SEGSPT_BADOP(int),
101 .getprot = SEGSPT_BADOP(int),
102 .getoffset = SEGSPT_BADOP(u_offset_t),
103 .gettype = SEGSPT_BADOP(int),
104 .getvp = SEGSPT_BADOP(int),
105 .advise = SEGSPT_BADOP(int),
106 .dump = SEGSPT_BADOP(void),
107 .pagelock = SEGSPT_BADOP(int),
108 .setpagesize = SEGSPT_BADOP(int),
109 .getmemid = SEGSPT_BADOP(int),
110 .getpolicy = segspt_getpolicy,
111 .capable = SEGSPT_BADOP(int),
112 .inherit = seg_inherit_notsup,
113 };
114
115 static int segspt_shmdup(struct seg *seg, struct seg *newseg);
116 static int segspt_shmunmap(struct seg *seg, caddr_t raddr, size_t ssize);
117 static void segspt_shmfree(struct seg *seg);
118 static faultcode_t segspt_shmfault(struct hat *hat, struct seg *seg,
119 caddr_t addr, size_t len, enum fault_type type, enum seg_rw rw);
120 static faultcode_t segspt_shmfaulta(struct seg *seg, caddr_t addr);
121 static int segspt_shmsetprot(register struct seg *seg, register caddr_t addr,
122 register size_t len, register uint_t prot);
123 static int segspt_shmcheckprot(struct seg *seg, caddr_t addr, size_t size,
124 uint_t prot);
125 static int segspt_shmkluster(struct seg *seg, caddr_t addr, ssize_t delta);
126 static size_t segspt_shmswapout(struct seg *seg);
127 static size_t segspt_shmincore(struct seg *seg, caddr_t addr, size_t len,
128 register char *vec);
129 static int segspt_shmsync(struct seg *seg, register caddr_t addr, size_t len,
130 int attr, uint_t flags);
131 static int segspt_shmlockop(struct seg *seg, caddr_t addr, size_t len,
132 int attr, int op, ulong_t *lockmap, size_t pos);
152 .fault = segspt_shmfault,
153 .faulta = segspt_shmfaulta,
154 .setprot = segspt_shmsetprot,
155 .checkprot = segspt_shmcheckprot,
156 .kluster = segspt_shmkluster,
157 .swapout = segspt_shmswapout,
158 .sync = segspt_shmsync,
159 .incore = segspt_shmincore,
160 .lockop = segspt_shmlockop,
161 .getprot = segspt_shmgetprot,
162 .getoffset = segspt_shmgetoffset,
163 .gettype = segspt_shmgettype,
164 .getvp = segspt_shmgetvp,
165 .advise = segspt_shmadvise,
166 .dump = segspt_shmdump,
167 .pagelock = segspt_shmpagelock,
168 .setpagesize = segspt_shmsetpgsz,
169 .getmemid = segspt_shmgetmemid,
170 .getpolicy = segspt_shmgetpolicy,
171 .capable = segspt_shmcapable,
172 .inherit = seg_inherit_notsup,
173 };
174
175 static void segspt_purge(struct seg *seg);
176 static int segspt_reclaim(void *, caddr_t, size_t, struct page **,
177 enum seg_rw, int);
178 static int spt_anon_getpages(struct seg *seg, caddr_t addr, size_t len,
179 page_t **ppa);
180
181
182
183 /*ARGSUSED*/
184 int
185 sptcreate(size_t size, struct seg **sptseg, struct anon_map *amp,
186 uint_t prot, uint_t flags, uint_t share_szc)
187 {
188 int err;
189 struct as *newas;
190 struct segspt_crargs sptcargs;
191
192 #ifdef DEBUG
|
92 .fault = SEGSPT_BADOP(int),
93 .faulta = SEGSPT_BADOP(faultcode_t),
94 .setprot = SEGSPT_BADOP(int),
95 .checkprot = SEGSPT_BADOP(int),
96 .kluster = SEGSPT_BADOP(int),
97 .swapout = SEGSPT_BADOP(size_t),
98 .sync = SEGSPT_BADOP(int),
99 .incore = SEGSPT_BADOP(size_t),
100 .lockop = SEGSPT_BADOP(int),
101 .getprot = SEGSPT_BADOP(int),
102 .getoffset = SEGSPT_BADOP(u_offset_t),
103 .gettype = SEGSPT_BADOP(int),
104 .getvp = SEGSPT_BADOP(int),
105 .advise = SEGSPT_BADOP(int),
106 .dump = SEGSPT_BADOP(void),
107 .pagelock = SEGSPT_BADOP(int),
108 .setpagesize = SEGSPT_BADOP(int),
109 .getmemid = SEGSPT_BADOP(int),
110 .getpolicy = segspt_getpolicy,
111 .capable = SEGSPT_BADOP(int),
112 };
113
114 static int segspt_shmdup(struct seg *seg, struct seg *newseg);
115 static int segspt_shmunmap(struct seg *seg, caddr_t raddr, size_t ssize);
116 static void segspt_shmfree(struct seg *seg);
117 static faultcode_t segspt_shmfault(struct hat *hat, struct seg *seg,
118 caddr_t addr, size_t len, enum fault_type type, enum seg_rw rw);
119 static faultcode_t segspt_shmfaulta(struct seg *seg, caddr_t addr);
120 static int segspt_shmsetprot(register struct seg *seg, register caddr_t addr,
121 register size_t len, register uint_t prot);
122 static int segspt_shmcheckprot(struct seg *seg, caddr_t addr, size_t size,
123 uint_t prot);
124 static int segspt_shmkluster(struct seg *seg, caddr_t addr, ssize_t delta);
125 static size_t segspt_shmswapout(struct seg *seg);
126 static size_t segspt_shmincore(struct seg *seg, caddr_t addr, size_t len,
127 register char *vec);
128 static int segspt_shmsync(struct seg *seg, register caddr_t addr, size_t len,
129 int attr, uint_t flags);
130 static int segspt_shmlockop(struct seg *seg, caddr_t addr, size_t len,
131 int attr, int op, ulong_t *lockmap, size_t pos);
151 .fault = segspt_shmfault,
152 .faulta = segspt_shmfaulta,
153 .setprot = segspt_shmsetprot,
154 .checkprot = segspt_shmcheckprot,
155 .kluster = segspt_shmkluster,
156 .swapout = segspt_shmswapout,
157 .sync = segspt_shmsync,
158 .incore = segspt_shmincore,
159 .lockop = segspt_shmlockop,
160 .getprot = segspt_shmgetprot,
161 .getoffset = segspt_shmgetoffset,
162 .gettype = segspt_shmgettype,
163 .getvp = segspt_shmgetvp,
164 .advise = segspt_shmadvise,
165 .dump = segspt_shmdump,
166 .pagelock = segspt_shmpagelock,
167 .setpagesize = segspt_shmsetpgsz,
168 .getmemid = segspt_shmgetmemid,
169 .getpolicy = segspt_shmgetpolicy,
170 .capable = segspt_shmcapable,
171 };
172
173 static void segspt_purge(struct seg *seg);
174 static int segspt_reclaim(void *, caddr_t, size_t, struct page **,
175 enum seg_rw, int);
176 static int spt_anon_getpages(struct seg *seg, caddr_t addr, size_t len,
177 page_t **ppa);
178
179
180
181 /*ARGSUSED*/
182 int
183 sptcreate(size_t size, struct seg **sptseg, struct anon_map *amp,
184 uint_t prot, uint_t flags, uint_t share_szc)
185 {
186 int err;
187 struct as *newas;
188 struct segspt_crargs sptcargs;
189
190 #ifdef DEBUG
|