直接返回pgd所指向的页目录表项
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);
set_pgd(pgd, __pgd(__pa(pmd_table) | _PAGE_PRESENT));
pud = pud_offset(pgd, 0);
if (pmd_table != pmd_offset(pud, 0))
BUG();
#else
pmd_table和pgd指向同一个页目录项
|-------------------------------------|
| pud = pud_offset(pgd, 0); |
| pmd_table = pmd_offset(pud, 0); |
|-------------------------------------|
#endif
return pmd_table;
}
#define
pud_offset(pgd, start) (pgd)
static
inline pmd_t
*
pmd_offset(pud_t
*
pud, unsigned
long
address)
{
return (pmd_t *)pud;
}
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);
set_pgd(pgd, __pgd(__pa(pmd_table) | _PAGE_PRESENT));
pud = pud_offset(pgd, 0);
if (pmd_table != pmd_offset(pud, 0))
BUG();
#else
pmd_table和pgd指向同一个页目录项
|-------------------------------------|
| pud = pud_offset(pgd, 0); |
| pmd_table = pmd_offset(pud, 0); |
|-------------------------------------|
#endif
return pmd_table;
}




