diff options
Diffstat (limited to 'arch/x86/mm/init_32.c')
-rw-r--r-- | arch/x86/mm/init_32.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c index 33d367a3432e..c7d19471261d 100644 --- a/arch/x86/mm/init_32.c +++ b/arch/x86/mm/init_32.c | |||
@@ -85,13 +85,20 @@ static pmd_t * __init one_md_table_init(pgd_t *pgd) | |||
85 | static pte_t * __init one_page_table_init(pmd_t *pmd) | 85 | static pte_t * __init one_page_table_init(pmd_t *pmd) |
86 | { | 86 | { |
87 | if (!(pmd_val(*pmd) & _PAGE_PRESENT)) { | 87 | if (!(pmd_val(*pmd) & _PAGE_PRESENT)) { |
88 | pte_t *page_table = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE); | 88 | pte_t *page_table = NULL; |
89 | |||
90 | #ifdef CONFIG_DEBUG_PAGEALLOC | ||
91 | page_table = (pte_t *) alloc_bootmem_pages(PAGE_SIZE); | ||
92 | #endif | ||
93 | if (!page_table) | ||
94 | page_table = | ||
95 | (pte_t *)alloc_bootmem_low_pages(PAGE_SIZE); | ||
89 | 96 | ||
90 | paravirt_alloc_pt(&init_mm, __pa(page_table) >> PAGE_SHIFT); | 97 | paravirt_alloc_pt(&init_mm, __pa(page_table) >> PAGE_SHIFT); |
91 | set_pmd(pmd, __pmd(__pa(page_table) | _PAGE_TABLE)); | 98 | set_pmd(pmd, __pmd(__pa(page_table) | _PAGE_TABLE)); |
92 | BUG_ON(page_table != pte_offset_kernel(pmd, 0)); | 99 | BUG_ON(page_table != pte_offset_kernel(pmd, 0)); |
93 | } | 100 | } |
94 | 101 | ||
95 | return pte_offset_kernel(pmd, 0); | 102 | return pte_offset_kernel(pmd, 0); |
96 | } | 103 | } |
97 | 104 | ||