x86, mm: Unifying after_bootmem for 32bit and 64bit
after_bootmem has different meaning in 32bit and 64bit. 32bit: after bootmem is ready 64bit: after bootmem is distroyed Let's merget them make 32bit the same as 64bit. for 32bit, it is mixing alloc_bootmem_pages, and alloc_low_page under after_bootmem is set or not set. alloc_bootmem is just wrapper for memblock for x86. Now we have alloc_low_page() with memblock too. We can drop bootmem path now, and only alloc_low_page only. At the same time, we make alloc_low_page could handle real after_bootmem for 32bit, because alloc_bootmem_pages could fallback to use slab too. At last move after_bootmem set position for 32bit the same as 64bit. Signed-off-by: Yinghai Lu <yinghai@kernel.org> Link: http://lkml.kernel.org/r/1353123563-3103-40-git-send-email-yinghai@kernel.org Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
This commit is contained in:
parent
2e8059edb6
commit
4e37a89047
2 changed files with 4 additions and 19 deletions
|
@ -39,7 +39,6 @@ __ref void *alloc_low_pages(unsigned int num)
|
|||
unsigned long pfn;
|
||||
int i;
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
if (after_bootmem) {
|
||||
unsigned int order;
|
||||
|
||||
|
@ -47,7 +46,6 @@ __ref void *alloc_low_pages(unsigned int num)
|
|||
return (void *)__get_free_pages(GFP_ATOMIC | __GFP_NOTRACK |
|
||||
__GFP_ZERO, order);
|
||||
}
|
||||
#endif
|
||||
|
||||
if ((pgt_buf_end + num) >= pgt_buf_top) {
|
||||
unsigned long ret;
|
||||
|
|
|
@ -73,10 +73,7 @@ static pmd_t * __init one_md_table_init(pgd_t *pgd)
|
|||
|
||||
#ifdef CONFIG_X86_PAE
|
||||
if (!(pgd_val(*pgd) & _PAGE_PRESENT)) {
|
||||
if (after_bootmem)
|
||||
pmd_table = (pmd_t *)alloc_bootmem_pages(PAGE_SIZE);
|
||||
else
|
||||
pmd_table = (pmd_t *)alloc_low_page();
|
||||
pmd_table = (pmd_t *)alloc_low_page();
|
||||
paravirt_alloc_pmd(&init_mm, __pa(pmd_table) >> PAGE_SHIFT);
|
||||
set_pgd(pgd, __pgd(__pa(pmd_table) | _PAGE_PRESENT));
|
||||
pud = pud_offset(pgd, 0);
|
||||
|
@ -98,17 +95,7 @@ static pmd_t * __init one_md_table_init(pgd_t *pgd)
|
|||
static pte_t * __init one_page_table_init(pmd_t *pmd)
|
||||
{
|
||||
if (!(pmd_val(*pmd) & _PAGE_PRESENT)) {
|
||||
pte_t *page_table = NULL;
|
||||
|
||||
if (after_bootmem) {
|
||||
#if defined(CONFIG_DEBUG_PAGEALLOC) || defined(CONFIG_KMEMCHECK)
|
||||
page_table = (pte_t *) alloc_bootmem_pages(PAGE_SIZE);
|
||||
#endif
|
||||
if (!page_table)
|
||||
page_table =
|
||||
(pte_t *)alloc_bootmem_pages(PAGE_SIZE);
|
||||
} else
|
||||
page_table = (pte_t *)alloc_low_page();
|
||||
pte_t *page_table = (pte_t *)alloc_low_page();
|
||||
|
||||
paravirt_alloc_pte(&init_mm, __pa(page_table) >> PAGE_SHIFT);
|
||||
set_pmd(pmd, __pmd(__pa(page_table) | _PAGE_TABLE));
|
||||
|
@ -708,8 +695,6 @@ void __init setup_bootmem_allocator(void)
|
|||
printk(KERN_INFO " mapped low ram: 0 - %08lx\n",
|
||||
max_pfn_mapped<<PAGE_SHIFT);
|
||||
printk(KERN_INFO " low ram: 0 - %08lx\n", max_low_pfn<<PAGE_SHIFT);
|
||||
|
||||
after_bootmem = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -795,6 +780,8 @@ void __init mem_init(void)
|
|||
if (page_is_ram(tmp) && PageReserved(pfn_to_page(tmp)))
|
||||
reservedpages++;
|
||||
|
||||
after_bootmem = 1;
|
||||
|
||||
codesize = (unsigned long) &_etext - (unsigned long) &_text;
|
||||
datasize = (unsigned long) &_edata - (unsigned long) &_etext;
|
||||
initsize = (unsigned long) &__init_end - (unsigned long) &__init_begin;
|
||||
|
|
Loading…
Reference in a new issue