88 *
89 * segmap_kpm -- separate on/off switch for segmap using segkpm:
90 * . Set by default.
91 * . Will be disabled when kpm_enable is zero.
92 * . Will be disabled when MAXBSIZE != PAGESIZE.
93 * . Can be disabled via /etc/system.
94 *
95 */
96 int kpm_enable = 1;
97 int kpm_smallpages = 0;
98 int segmap_kpm = 1;
99
100 /*
101 * Private seg op routines.
102 */
103 faultcode_t segkpm_fault(struct hat *hat, struct seg *seg, caddr_t addr,
104 size_t len, enum fault_type type, enum seg_rw rw);
105 static void segkpm_dump(struct seg *);
106 static void segkpm_badop(void);
107 static int segkpm_notsup(void);
108 static int segkpm_capable(struct seg *, segcapability_t);
109
110 #define SEGKPM_BADOP(t) (t(*)())segkpm_badop
111 #define SEGKPM_NOTSUP (int(*)())segkpm_notsup
112
113 static struct seg_ops segkpm_ops = {
114 .dup = SEGKPM_BADOP(int),
115 .unmap = SEGKPM_BADOP(int),
116 .free = SEGKPM_BADOP(void),
117 .fault = segkpm_fault,
118 .faulta = SEGKPM_BADOP(int),
119 .setprot = SEGKPM_BADOP(int),
120 .checkprot = SEGKPM_BADOP(int),
121 .kluster = SEGKPM_BADOP(int),
122 .swapout = SEGKPM_BADOP(size_t),
123 .sync = SEGKPM_BADOP(int),
124 .incore = SEGKPM_BADOP(size_t),
125 .lockop = SEGKPM_BADOP(int),
126 .getprot = SEGKPM_BADOP(int),
127 .getoffset = SEGKPM_BADOP(u_offset_t),
128 .gettype = SEGKPM_BADOP(int),
129 .getvp = SEGKPM_BADOP(int),
130 .advise = SEGKPM_BADOP(int),
131 .dump = segkpm_dump,
132 .pagelock = SEGKPM_NOTSUP,
133 .setpagesize = SEGKPM_BADOP(int),
134 .getmemid = SEGKPM_BADOP(int),
135 .getpolicy = SEGKPM_BADOP(lgrp_mem_policy_info_t *),
136 .capable = segkpm_capable,
137 };
138
139 /*
140 * kpm_pgsz and kpm_pgshft are set by platform layer.
141 */
142 size_t kpm_pgsz; /* kpm page size */
143 uint_t kpm_pgshft; /* kpm page shift */
144 u_offset_t kpm_pgoff; /* kpm page offset mask */
145 uint_t kpmp2pshft; /* kpm page to page shift */
146 pgcnt_t kpmpnpgs; /* how many pages per kpm page */
147
148
149 #ifdef SEGKPM_SUPPORT
150
151 int
152 segkpm_create(struct seg *seg, void *argsp)
153 {
154 struct segkpm_data *skd;
155 struct segkpm_crargs *b = (struct segkpm_crargs *)argsp;
156 ushort_t *p;
311 void segkpm_mapout_validkpme(struct kpme *kpme) {}
312
313 static void
314 segkpm_badop() {}
315
316 #endif /* SEGKPM_SUPPORT */
317
318 static int
319 segkpm_notsup()
320 {
321 return (ENOTSUP);
322 }
323
324 /*
325 * segkpm pages are not dumped, so we just return
326 */
327 /*ARGSUSED*/
328 static void
329 segkpm_dump(struct seg *seg)
330 {}
331
332 /*
333 * We claim to have no special capabilities.
334 */
335 /*ARGSUSED*/
336 static int
337 segkpm_capable(struct seg *seg, segcapability_t capability)
338 {
339 return (0);
340 }
|
88 *
89 * segmap_kpm -- separate on/off switch for segmap using segkpm:
90 * . Set by default.
91 * . Will be disabled when kpm_enable is zero.
92 * . Will be disabled when MAXBSIZE != PAGESIZE.
93 * . Can be disabled via /etc/system.
94 *
95 */
96 int kpm_enable = 1;
97 int kpm_smallpages = 0;
98 int segmap_kpm = 1;
99
100 /*
101 * Private seg op routines.
102 */
103 faultcode_t segkpm_fault(struct hat *hat, struct seg *seg, caddr_t addr,
104 size_t len, enum fault_type type, enum seg_rw rw);
105 static void segkpm_dump(struct seg *);
106 static void segkpm_badop(void);
107 static int segkpm_notsup(void);
108
109 #define SEGKPM_BADOP(t) (t(*)())segkpm_badop
110 #define SEGKPM_NOTSUP (int(*)())segkpm_notsup
111
112 static struct seg_ops segkpm_ops = {
113 .dup = SEGKPM_BADOP(int),
114 .unmap = SEGKPM_BADOP(int),
115 .free = SEGKPM_BADOP(void),
116 .fault = segkpm_fault,
117 .faulta = SEGKPM_BADOP(int),
118 .setprot = SEGKPM_BADOP(int),
119 .checkprot = SEGKPM_BADOP(int),
120 .kluster = SEGKPM_BADOP(int),
121 .swapout = SEGKPM_BADOP(size_t),
122 .sync = SEGKPM_BADOP(int),
123 .incore = SEGKPM_BADOP(size_t),
124 .lockop = SEGKPM_BADOP(int),
125 .getprot = SEGKPM_BADOP(int),
126 .getoffset = SEGKPM_BADOP(u_offset_t),
127 .gettype = SEGKPM_BADOP(int),
128 .getvp = SEGKPM_BADOP(int),
129 .advise = SEGKPM_BADOP(int),
130 .dump = segkpm_dump,
131 .pagelock = SEGKPM_NOTSUP,
132 .setpagesize = SEGKPM_BADOP(int),
133 .getmemid = SEGKPM_BADOP(int),
134 .getpolicy = SEGKPM_BADOP(lgrp_mem_policy_info_t *),
135 };
136
137 /*
138 * kpm_pgsz and kpm_pgshft are set by platform layer.
139 */
140 size_t kpm_pgsz; /* kpm page size */
141 uint_t kpm_pgshft; /* kpm page shift */
142 u_offset_t kpm_pgoff; /* kpm page offset mask */
143 uint_t kpmp2pshft; /* kpm page to page shift */
144 pgcnt_t kpmpnpgs; /* how many pages per kpm page */
145
146
147 #ifdef SEGKPM_SUPPORT
148
149 int
150 segkpm_create(struct seg *seg, void *argsp)
151 {
152 struct segkpm_data *skd;
153 struct segkpm_crargs *b = (struct segkpm_crargs *)argsp;
154 ushort_t *p;
309 void segkpm_mapout_validkpme(struct kpme *kpme) {}
310
311 static void
312 segkpm_badop() {}
313
314 #endif /* SEGKPM_SUPPORT */
315
316 static int
317 segkpm_notsup()
318 {
319 return (ENOTSUP);
320 }
321
322 /*
323 * segkpm pages are not dumped, so we just return
324 */
325 /*ARGSUSED*/
326 static void
327 segkpm_dump(struct seg *seg)
328 {}
|