Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ARM: early_alloc()

Add a common early allocator function, in preparation for switching
over to LMB. When we do, this function will need to do a little more
than just allocating memory; we need it zero initialized too.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>

+10 -8
+10 -8
arch/arm/mm/mmu.c
··· 487 487 488 488 #define vectors_base() (vectors_high() ? 0xffff0000 : 0) 489 489 490 + static void __init *early_alloc(unsigned long sz) 491 + { 492 + return alloc_bootmem_low_pages(sz); 493 + } 494 + 490 495 static void __init alloc_init_pte(pmd_t *pmd, unsigned long addr, 491 496 unsigned long end, unsigned long pfn, 492 497 const struct mem_type *type) ··· 499 494 pte_t *pte; 500 495 501 496 if (pmd_none(*pmd)) { 502 - pte = alloc_bootmem_low_pages(2 * PTRS_PER_PTE * sizeof(pte_t)); 497 + pte = early_alloc(2 * PTRS_PER_PTE * sizeof(pte_t)); 503 498 __pmd_populate(pmd, __pa(pte) | type->prot_l1); 504 499 } 505 500 ··· 878 873 /* 879 874 * Allocate the vector page early. 880 875 */ 881 - vectors = alloc_bootmem_low_pages(PAGE_SIZE); 876 + vectors = early_alloc(PAGE_SIZE); 882 877 883 878 for (addr = VMALLOC_END; addr; addr += PGDIR_SIZE) 884 879 pmd_clear(pmd_off_k(addr)); ··· 950 945 { 951 946 #ifdef CONFIG_HIGHMEM 952 947 pmd_t *pmd = pmd_off_k(PKMAP_BASE); 953 - pte_t *pte = alloc_bootmem_low_pages(2 * PTRS_PER_PTE * sizeof(pte_t)); 948 + pte_t *pte = early_alloc(2 * PTRS_PER_PTE * sizeof(pte_t)); 954 949 BUG_ON(!pmd_none(*pmd) || !pte); 955 950 __pmd_populate(pmd, __pa(pte) | _PAGE_KERNEL_TABLE); 956 951 pkmap_page_table = pte + PTRS_PER_PTE; ··· 1010 1005 1011 1006 top_pmd = pmd_off_k(0xffff0000); 1012 1007 1013 - /* 1014 - * allocate the zero page. Note that this always succeeds and 1015 - * returns a zeroed result. 1016 - */ 1017 - zero_page = alloc_bootmem_low_pages(PAGE_SIZE); 1008 + /* allocate the zero page. */ 1009 + zero_page = early_alloc(PAGE_SIZE); 1018 1010 empty_zero_page = virt_to_page(zero_page); 1019 1011 __flush_dcache_page(NULL, empty_zero_page); 1020 1012 }