diff options
Diffstat (limited to 'arch/arm/mm/mmu.c')
| -rw-r--r-- | arch/arm/mm/mmu.c | 14 | 
1 files changed, 10 insertions, 4 deletions
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index 9d4da6ac28e..241c24a1c18 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c @@ -420,6 +420,10 @@ static void __init build_mem_type_table(void)  		user_pgprot |= L_PTE_SHARED;  		kern_pgprot |= L_PTE_SHARED;  		vecs_pgprot |= L_PTE_SHARED; +		mem_types[MT_DEVICE_WC].prot_sect |= PMD_SECT_S; +		mem_types[MT_DEVICE_WC].prot_pte |= L_PTE_SHARED; +		mem_types[MT_DEVICE_CACHED].prot_sect |= PMD_SECT_S; +		mem_types[MT_DEVICE_CACHED].prot_pte |= L_PTE_SHARED;  		mem_types[MT_MEMORY].prot_sect |= PMD_SECT_S;  		mem_types[MT_MEMORY_NONCACHED].prot_sect |= PMD_SECT_S;  #endif @@ -1050,10 +1054,12 @@ void setup_mm_for_reboot(char mode)  	pgd_t *pgd;  	int i; -	if (current->mm && current->mm->pgd) -		pgd = current->mm->pgd; -	else -		pgd = init_mm.pgd; +	/* +	 * We need to access to user-mode page tables here. For kernel threads +	 * we don't have any user-mode mappings so we use the context that we +	 * "borrowed". +	 */ +	pgd = current->active_mm->pgd;  	base_pmdval = PMD_SECT_AP_WRITE | PMD_SECT_AP_READ | PMD_TYPE_SECT;  	if (cpu_architecture() <= CPU_ARCH_ARMv5TEJ && !cpu_is_xscale())  |