MIPS: Limit fixrange_init() to the FIXMAP region
fixrange_init() allocates page tables for all addresses higher than FIXADDR_TOP. On processors that override the default FIXADDR_TOP address of 0xfffe_0000, this can consume up to 4 pages (1 page per 4MB) for pgd's that are never used. Signed-off-by: Kevin Cernekee <cernekee@gmail.com> Cc: linux-mips@linux-mips.org Cc: linux-kernel@vger.kernel.org Patchwork: https://patchwork.linux-mips.org/patch/1980/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
		
							parent
							
								
									273f2d7e64
								
							
						
					
					
						commit
						464fd83e84
					
				| @ -277,11 +277,11 @@ void __init fixrange_init(unsigned long start, unsigned long end, | ||||
| 	k = __pmd_offset(vaddr); | ||||
| 	pgd = pgd_base + i; | ||||
| 
 | ||||
| 	for ( ; (i < PTRS_PER_PGD) && (vaddr != end); pgd++, i++) { | ||||
| 	for ( ; (i < PTRS_PER_PGD) && (vaddr < end); pgd++, i++) { | ||||
| 		pud = (pud_t *)pgd; | ||||
| 		for ( ; (j < PTRS_PER_PUD) && (vaddr != end); pud++, j++) { | ||||
| 		for ( ; (j < PTRS_PER_PUD) && (vaddr < end); pud++, j++) { | ||||
| 			pmd = (pmd_t *)pud; | ||||
| 			for (; (k < PTRS_PER_PMD) && (vaddr != end); pmd++, k++) { | ||||
| 			for (; (k < PTRS_PER_PMD) && (vaddr < end); pmd++, k++) { | ||||
| 				if (pmd_none(*pmd)) { | ||||
| 					pte = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE); | ||||
| 					set_pmd(pmd, __pmd((unsigned long)pte)); | ||||
|  | ||||
| @ -52,7 +52,7 @@ void __init pagetable_init(void) | ||||
| 	 * Fixed mappings: | ||||
| 	 */ | ||||
| 	vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK; | ||||
| 	fixrange_init(vaddr, 0, pgd_base); | ||||
| 	fixrange_init(vaddr, vaddr + FIXADDR_SIZE, pgd_base); | ||||
| 
 | ||||
| #ifdef CONFIG_HIGHMEM | ||||
| 	/*
 | ||||
|  | ||||
| @ -76,5 +76,5 @@ void __init pagetable_init(void) | ||||
| 	 * Fixed mappings: | ||||
| 	 */ | ||||
| 	vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK; | ||||
| 	fixrange_init(vaddr, 0, pgd_base); | ||||
| 	fixrange_init(vaddr, vaddr + FIXADDR_SIZE, pgd_base); | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user