107 struct as *s_as; /* containing address space */
108 avl_node_t s_tree; /* AVL tree links to segs in this as */
109 struct seg_ops *s_ops; /* ops vector: see below */
110 void *s_data; /* private data for instance */
111 kmutex_t s_pmtx; /* protects seg's pcache list */
112 pcache_link_t s_phead; /* head of seg's pcache list */
113 } seg_t;
114
115 #define S_PURGE (0x01) /* seg should be purged in as_gap() */
116
117 struct seg_ops {
118 int (*dup)(struct seg *, struct seg *);
119 int (*unmap)(struct seg *, caddr_t, size_t);
120 void (*free)(struct seg *);
121 faultcode_t (*fault)(struct hat *, struct seg *, caddr_t, size_t,
122 enum fault_type, enum seg_rw);
123 faultcode_t (*faulta)(struct seg *, caddr_t);
124 int (*setprot)(struct seg *, caddr_t, size_t, uint_t);
125 int (*checkprot)(struct seg *, caddr_t, size_t, uint_t);
126 int (*kluster)(struct seg *, caddr_t, ssize_t);
127 size_t (*swapout)(struct seg *);
128 int (*sync)(struct seg *, caddr_t, size_t, int, uint_t);
129 size_t (*incore)(struct seg *, caddr_t, size_t, char *);
130 int (*lockop)(struct seg *, caddr_t, size_t, int, int, ulong_t *,
131 size_t);
132 int (*getprot)(struct seg *, caddr_t, size_t, uint_t *);
133 u_offset_t (*getoffset)(struct seg *, caddr_t);
134 int (*gettype)(struct seg *, caddr_t);
135 int (*getvp)(struct seg *, caddr_t, struct vnode **);
136 int (*advise)(struct seg *, caddr_t, size_t, uint_t);
137 void (*dump)(struct seg *);
138 int (*pagelock)(struct seg *, caddr_t, size_t, struct page ***,
139 enum lock_type, enum seg_rw);
140 int (*setpagesize)(struct seg *, caddr_t, size_t, uint_t);
141 int (*getmemid)(struct seg *, caddr_t, memid_t *);
142 struct lgrp_mem_policy_info *(*getpolicy)(struct seg *, caddr_t);
143 int (*capable)(struct seg *, segcapability_t);
144 int (*inherit)(struct seg *, caddr_t, size_t, uint_t);
145 };
146
147 #ifdef _KERNEL
202 #define SEGP_FAIL 1 /* seg_pinsert() failed */
203
204 /* Page status bits for segop_incore */
205 #define SEG_PAGE_INCORE 0x01 /* VA has a page backing it */
206 #define SEG_PAGE_LOCKED 0x02 /* VA has a page that is locked */
207 #define SEG_PAGE_HASCOW 0x04 /* VA has a page with a copy-on-write */
208 #define SEG_PAGE_SOFTLOCK 0x08 /* VA has a page with softlock held */
209 #define SEG_PAGE_VNODEBACKED 0x10 /* Segment is backed by a vnode */
210 #define SEG_PAGE_ANON 0x20 /* VA has an anonymous page */
211 #define SEG_PAGE_VNODE 0x40 /* VA has a vnode page backing it */
212
213 #define SEGOP_DUP(s, n) (*(s)->s_ops->dup)((s), (n))
214 #define SEGOP_UNMAP(s, a, l) (*(s)->s_ops->unmap)((s), (a), (l))
215 #define SEGOP_FREE(s) (*(s)->s_ops->free)((s))
216 #define SEGOP_FAULT(h, s, a, l, t, rw) \
217 (*(s)->s_ops->fault)((h), (s), (a), (l), (t), (rw))
218 #define SEGOP_FAULTA(s, a) (*(s)->s_ops->faulta)((s), (a))
219 #define SEGOP_SETPROT(s, a, l, p) (*(s)->s_ops->setprot)((s), (a), (l), (p))
220 #define SEGOP_CHECKPROT(s, a, l, p) (*(s)->s_ops->checkprot)((s), (a), (l), (p))
221 #define SEGOP_KLUSTER(s, a, d) (*(s)->s_ops->kluster)((s), (a), (d))
222 #define SEGOP_SWAPOUT(s) (*(s)->s_ops->swapout)((s))
223 #define SEGOP_SYNC(s, a, l, atr, f) \
224 (*(s)->s_ops->sync)((s), (a), (l), (atr), (f))
225 #define SEGOP_INCORE(s, a, l, v) (*(s)->s_ops->incore)((s), (a), (l), (v))
226 #define SEGOP_LOCKOP(s, a, l, atr, op, b, p) \
227 (*(s)->s_ops->lockop)((s), (a), (l), (atr), (op), (b), (p))
228 #define SEGOP_GETPROT(s, a, l, p) (*(s)->s_ops->getprot)((s), (a), (l), (p))
229 #define SEGOP_GETOFFSET(s, a) (*(s)->s_ops->getoffset)((s), (a))
230 #define SEGOP_GETTYPE(s, a) (*(s)->s_ops->gettype)((s), (a))
231 #define SEGOP_GETVP(s, a, vpp) (*(s)->s_ops->getvp)((s), (a), (vpp))
232 #define SEGOP_ADVISE(s, a, l, b) (*(s)->s_ops->advise)((s), (a), (l), (b))
233 #define SEGOP_DUMP(s) (*(s)->s_ops->dump)((s))
234 #define SEGOP_PAGELOCK(s, a, l, p, t, rw) \
235 (*(s)->s_ops->pagelock)((s), (a), (l), (p), (t), (rw))
236 #define SEGOP_SETPAGESIZE(s, a, l, szc) \
237 (*(s)->s_ops->setpagesize)((s), (a), (l), (szc))
238 #define SEGOP_GETMEMID(s, a, mp) (*(s)->s_ops->getmemid)((s), (a), (mp))
239 #define SEGOP_GETPOLICY(s, a) (*(s)->s_ops->getpolicy)((s), (a))
240 #define SEGOP_CAPABLE(s, c) (*(s)->s_ops->capable)((s), (c))
241 #define SEGOP_INHERIT(s, a, l, b) (*(s)->s_ops->inherit)((s), (a), (l), (b))
242
|
107 struct as *s_as; /* containing address space */
108 avl_node_t s_tree; /* AVL tree links to segs in this as */
109 struct seg_ops *s_ops; /* ops vector: see below */
110 void *s_data; /* private data for instance */
111 kmutex_t s_pmtx; /* protects seg's pcache list */
112 pcache_link_t s_phead; /* head of seg's pcache list */
113 } seg_t;
114
115 #define S_PURGE (0x01) /* seg should be purged in as_gap() */
116
117 struct seg_ops {
118 int (*dup)(struct seg *, struct seg *);
119 int (*unmap)(struct seg *, caddr_t, size_t);
120 void (*free)(struct seg *);
121 faultcode_t (*fault)(struct hat *, struct seg *, caddr_t, size_t,
122 enum fault_type, enum seg_rw);
123 faultcode_t (*faulta)(struct seg *, caddr_t);
124 int (*setprot)(struct seg *, caddr_t, size_t, uint_t);
125 int (*checkprot)(struct seg *, caddr_t, size_t, uint_t);
126 int (*kluster)(struct seg *, caddr_t, ssize_t);
127 int (*sync)(struct seg *, caddr_t, size_t, int, uint_t);
128 size_t (*incore)(struct seg *, caddr_t, size_t, char *);
129 int (*lockop)(struct seg *, caddr_t, size_t, int, int, ulong_t *,
130 size_t);
131 int (*getprot)(struct seg *, caddr_t, size_t, uint_t *);
132 u_offset_t (*getoffset)(struct seg *, caddr_t);
133 int (*gettype)(struct seg *, caddr_t);
134 int (*getvp)(struct seg *, caddr_t, struct vnode **);
135 int (*advise)(struct seg *, caddr_t, size_t, uint_t);
136 void (*dump)(struct seg *);
137 int (*pagelock)(struct seg *, caddr_t, size_t, struct page ***,
138 enum lock_type, enum seg_rw);
139 int (*setpagesize)(struct seg *, caddr_t, size_t, uint_t);
140 int (*getmemid)(struct seg *, caddr_t, memid_t *);
141 struct lgrp_mem_policy_info *(*getpolicy)(struct seg *, caddr_t);
142 int (*capable)(struct seg *, segcapability_t);
143 int (*inherit)(struct seg *, caddr_t, size_t, uint_t);
144 };
145
146 #ifdef _KERNEL
201 #define SEGP_FAIL 1 /* seg_pinsert() failed */
202
203 /* Page status bits for segop_incore */
204 #define SEG_PAGE_INCORE 0x01 /* VA has a page backing it */
205 #define SEG_PAGE_LOCKED 0x02 /* VA has a page that is locked */
206 #define SEG_PAGE_HASCOW 0x04 /* VA has a page with a copy-on-write */
207 #define SEG_PAGE_SOFTLOCK 0x08 /* VA has a page with softlock held */
208 #define SEG_PAGE_VNODEBACKED 0x10 /* Segment is backed by a vnode */
209 #define SEG_PAGE_ANON 0x20 /* VA has an anonymous page */
210 #define SEG_PAGE_VNODE 0x40 /* VA has a vnode page backing it */
211
212 #define SEGOP_DUP(s, n) (*(s)->s_ops->dup)((s), (n))
213 #define SEGOP_UNMAP(s, a, l) (*(s)->s_ops->unmap)((s), (a), (l))
214 #define SEGOP_FREE(s) (*(s)->s_ops->free)((s))
215 #define SEGOP_FAULT(h, s, a, l, t, rw) \
216 (*(s)->s_ops->fault)((h), (s), (a), (l), (t), (rw))
217 #define SEGOP_FAULTA(s, a) (*(s)->s_ops->faulta)((s), (a))
218 #define SEGOP_SETPROT(s, a, l, p) (*(s)->s_ops->setprot)((s), (a), (l), (p))
219 #define SEGOP_CHECKPROT(s, a, l, p) (*(s)->s_ops->checkprot)((s), (a), (l), (p))
220 #define SEGOP_KLUSTER(s, a, d) (*(s)->s_ops->kluster)((s), (a), (d))
221 #define SEGOP_SYNC(s, a, l, atr, f) \
222 (*(s)->s_ops->sync)((s), (a), (l), (atr), (f))
223 #define SEGOP_INCORE(s, a, l, v) (*(s)->s_ops->incore)((s), (a), (l), (v))
224 #define SEGOP_LOCKOP(s, a, l, atr, op, b, p) \
225 (*(s)->s_ops->lockop)((s), (a), (l), (atr), (op), (b), (p))
226 #define SEGOP_GETPROT(s, a, l, p) (*(s)->s_ops->getprot)((s), (a), (l), (p))
227 #define SEGOP_GETOFFSET(s, a) (*(s)->s_ops->getoffset)((s), (a))
228 #define SEGOP_GETTYPE(s, a) (*(s)->s_ops->gettype)((s), (a))
229 #define SEGOP_GETVP(s, a, vpp) (*(s)->s_ops->getvp)((s), (a), (vpp))
230 #define SEGOP_ADVISE(s, a, l, b) (*(s)->s_ops->advise)((s), (a), (l), (b))
231 #define SEGOP_DUMP(s) (*(s)->s_ops->dump)((s))
232 #define SEGOP_PAGELOCK(s, a, l, p, t, rw) \
233 (*(s)->s_ops->pagelock)((s), (a), (l), (p), (t), (rw))
234 #define SEGOP_SETPAGESIZE(s, a, l, szc) \
235 (*(s)->s_ops->setpagesize)((s), (a), (l), (szc))
236 #define SEGOP_GETMEMID(s, a, mp) (*(s)->s_ops->getmemid)((s), (a), (mp))
237 #define SEGOP_GETPOLICY(s, a) (*(s)->s_ops->getpolicy)((s), (a))
238 #define SEGOP_CAPABLE(s, c) (*(s)->s_ops->capable)((s), (c))
239 #define SEGOP_INHERIT(s, a, l, b) (*(s)->s_ops->inherit)((s), (a), (l), (b))
240
|