The ARM SMP booting code allocates a temporary set of page tables containing an identity mapping of the kernel image and provides this to secondary CPUs for initial booting. In reality, we only need to include the __turn_mmu_on function in the identity mapping since the rest of the kernel is executing from virtual addresses after this point. This patch adds __turn_mmu_on to the .idmap.text section, allowing the SMP booting code to use the idmap_pgd directly and not have to populate its own set of page table. As a result of this patch, we can make the identity_mapping_add function static (since it is only used within mm/idmap.c) and also remove the identity_mapping_del function. The identity map population is moved to an early initcall so that it is setup in time for secondary CPU bringup. Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com>
		
			
				
	
	
		
			14 lines
		
	
	
	
		
			316 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			14 lines
		
	
	
	
		
			316 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef __ASM_IDMAP_H
 | 
						|
#define __ASM_IDMAP_H
 | 
						|
 | 
						|
#include <linux/compiler.h>
 | 
						|
#include <asm/pgtable.h>
 | 
						|
 | 
						|
/* Tag a function as requiring to be executed via an identity mapping. */
 | 
						|
#define __idmap __section(.idmap.text) noinline notrace
 | 
						|
 | 
						|
extern pgd_t *idmap_pgd;
 | 
						|
 | 
						|
void setup_mm_for_reboot(void);
 | 
						|
 | 
						|
#endif	/* __ASM_IDMAP_H */
 |