one_md_table_init()

来源:互联网 发布:淘宝搜索引擎 编辑:程序博客网 时间:2024/06/06 01:28
直接返回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;
}