static pmd_t * __init one_md_table_init(pgd_t *pgd)
{
pud_t *pud;
pmd_t *pmd_table;
#ifdef CONFIG_X86_PAE
pmd_table = (pmd_t *) alloc_bootmem_low_pages(PAGE_SIZE);
paravirt_alloc_pmd(__pa(page_table) >> PAGE_SHIFT);
^^^^^^^^^^ pmd_table?
set_pgd(pgd, __pgd(__pa(pmd_table) | _PAGE_PRESENT));
pud = pud_offset(pgd, 0);
if (pmd_table != pmd_offset(pud, 0))
BUG();
#else
pud = pud_offset(pgd, 0);
pmd_table = pmd_offset(pud, 0);
#endif
return pmd_table;
}
Also, did you anticipate that these paravirt_alloc_* functions would be
useful for Xen to maintain the "pagetable pages must be RO"
constraint?
Or do you think that will need to be done in a second pass (which is how
it seems to me).
J