31 static inline int reset_table(
void *initm,
32 struct pgde *pgd,
unsigned long pma,
unsigned long vma,
41 TO_IDX(vma, pgt_idx, page_idx);
46 if (!pgd[pgt_idx].
p) {
57 pgt = (
struct pgte*)(pgd[pgt_idx].pt_base * tmp);
60 while (page_idx < NR_PAGES && size >= tmp) {
67 for (i = 0; i <
NR_PAGES && !pgt[i].
p; i++);
85 static inline struct pgte *get_pgt(
void *initm,
struct pgde *pgd,
int idx)
92 pgt = (
struct pgte *)(pgd[idx].pt_base * pagesize);
111 static inline int setup_table(
void *initm,
struct pgde *pgd,
123 TO_IDX(vma, pgt_idx, page_idx);
125 pgt = get_pgt(initm, pgd, pgt_idx);
131 if (pgt[page_idx].p) {
136 pgt[page_idx].
rw = 1;
150 pgt = get_pgt(initm, pgd, pgt_idx);
179 ret = setup_table(map->
initm, pgd, 0x0, 0x0, 1 << 20);
188 ret = setup_table(map->
initm, pgd,
201 ret = setup_table(map->
initm, pgd,
215 ret = setup_table(map->
initm, pgd,
252 reset_table(map->
initm, pgd,
273 ret = setup_table(map->
initm, s_rpgd,
283 ret = setup_table(map->
initm, s_rpgd,
296 ret = setup_table(map->
initm, s_rpgd,
307 register unsigned int cr0;
313 asm volatile (
"movl %%cr0, %0":
"=r"(cr0):);
315 asm volatile (
"movl %0, %%cr0"::
"r"(cr0));
320 register unsigned int cr0;
322 asm volatile (
"mov %%cr0, %0":
"=r"(cr0):);
323 return !!(cr0 & 0x80000000);
341 for (i = 0; i < memcnt; i++) {
350 if (
create_zone(node, zone[i], membase[i], memsize[i]) < 0) {
362 assert(i == 0 &&
"Failed to create ZONE_SYSTEM");