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(int), /* sync */
123 SEGKPM_BADOP(size_t), /* incore */
124 SEGKPM_BADOP(int), /* lockop */
125 SEGKPM_BADOP(int), /* getprot */
126 SEGKPM_BADOP(u_offset_t), /* getoffset */
127 SEGKPM_BADOP(int), /* gettype */
128 SEGKPM_BADOP(int), /* getvp */
129 SEGKPM_BADOP(int), /* advise */
130 segkpm_dump, /* dump */
131 SEGKPM_NOTSUP, /* pagelock */
132 SEGKPM_BADOP(int), /* setpgsz */
133 SEGKPM_BADOP(int), /* getmemid */
134 SEGKPM_BADOP(lgrp_mem_policy_info_t *), /* getpolicy */
135 segkpm_capable, /* capable */
136 seg_inherit_notsup /* inherit */
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;
|
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 .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 .capable = segkpm_capable,
136 .inherit = seg_inherit_notsup,
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;
|