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 SEGKPM_BADOP(int), /* dup */
115 SEGKPM_BADOP(int), /* unmap */
116 SEGKPM_BADOP(void), /* free */
117 segkpm_fault,
118 SEGKPM_BADOP(int), /* faulta */
119 SEGKPM_BADOP(int), /* setprot */
120 SEGKPM_BADOP(int), /* checkprot */
121 SEGKPM_BADOP(int), /* kluster */
122 SEGKPM_BADOP(size_t), /* swapout */
123 SEGKPM_BADOP(int), /* sync */
124 SEGKPM_BADOP(size_t), /* incore */
125 SEGKPM_BADOP(int), /* lockop */
126 SEGKPM_BADOP(int), /* getprot */
127 SEGKPM_BADOP(u_offset_t), /* getoffset */
128 SEGKPM_BADOP(int), /* gettype */
129 SEGKPM_BADOP(int), /* getvp */
130 SEGKPM_BADOP(int), /* advise */
131 segkpm_dump, /* dump */
132 SEGKPM_NOTSUP, /* pagelock */
133 SEGKPM_BADOP(int), /* setpgsz */
134 SEGKPM_BADOP(int), /* getmemid */
135 SEGKPM_BADOP(lgrp_mem_policy_info_t *), /* getpolicy */
136 segkpm_capable, /* capable */
137 seg_inherit_notsup /* inherit */
138 };
139
140 /*
141 * kpm_pgsz and kpm_pgshft are set by platform layer.
142 */
143 size_t kpm_pgsz; /* kpm page size */
144 uint_t kpm_pgshft; /* kpm page shift */
145 u_offset_t kpm_pgoff; /* kpm page offset mask */
146 uint_t kpmp2pshft; /* kpm page to page shift */
147 pgcnt_t kpmpnpgs; /* how many pages per kpm page */
148
149
150 #ifdef SEGKPM_SUPPORT
151
152 int
153 segkpm_create(struct seg *seg, void *argsp)
154 {
155 struct segkpm_data *skd;
156 struct segkpm_crargs *b = (struct segkpm_crargs *)argsp;
157 ushort_t *p;
|
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 .inherit = seg_inherit_notsup,
138 };
139
140 /*
141 * kpm_pgsz and kpm_pgshft are set by platform layer.
142 */
143 size_t kpm_pgsz; /* kpm page size */
144 uint_t kpm_pgshft; /* kpm page shift */
145 u_offset_t kpm_pgoff; /* kpm page offset mask */
146 uint_t kpmp2pshft; /* kpm page to page shift */
147 pgcnt_t kpmpnpgs; /* how many pages per kpm page */
148
149
150 #ifdef SEGKPM_SUPPORT
151
152 int
153 segkpm_create(struct seg *seg, void *argsp)
154 {
155 struct segkpm_data *skd;
156 struct segkpm_crargs *b = (struct segkpm_crargs *)argsp;
157 ushort_t *p;
|