diff options
| author | Tony Lindgren <tony@atomide.com> | 2012-11-09 14:58:01 -0800 | 
|---|---|---|
| committer | Tony Lindgren <tony@atomide.com> | 2012-11-09 14:58:01 -0800 | 
| commit | edf8dde393f879fc2d8c22d4bc01ff8d37b80e1a (patch) | |
| tree | 61425adc8b2059a9c12a3ce66ba7361fea1b0bb3 /arch/arm/kernel/smp.c | |
| parent | 6ba54ab4a49bbad736b0254aa6bdf0cb83013815 (diff) | |
| parent | 3d70f8c617a436c7146ecb81df2265b4626dfe89 (diff) | |
| download | olio-linux-3.10-edf8dde393f879fc2d8c22d4bc01ff8d37b80e1a.tar.xz olio-linux-3.10-edf8dde393f879fc2d8c22d4bc01ff8d37b80e1a.zip  | |
Merge branch 'linus' into omap-for-v3.8/cleanup-headers-prepare-multiplatform-v3
Diffstat (limited to 'arch/arm/kernel/smp.c')
| -rw-r--r-- | arch/arm/kernel/smp.c | 14 | 
1 files changed, 10 insertions, 4 deletions
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 8e20754dd31..fbc8b2623d8 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c @@ -294,18 +294,24 @@ static void percpu_timer_setup(void);  asmlinkage void __cpuinit secondary_start_kernel(void)  {  	struct mm_struct *mm = &init_mm; -	unsigned int cpu = smp_processor_id(); +	unsigned int cpu; + +	/* +	 * The identity mapping is uncached (strongly ordered), so +	 * switch away from it before attempting any exclusive accesses. +	 */ +	cpu_switch_mm(mm->pgd, mm); +	enter_lazy_tlb(mm, current); +	local_flush_tlb_all();  	/*  	 * All kernel threads share the same mm context; grab a  	 * reference and switch to it.  	 */ +	cpu = smp_processor_id();  	atomic_inc(&mm->mm_count);  	current->active_mm = mm;  	cpumask_set_cpu(cpu, mm_cpumask(mm)); -	cpu_switch_mm(mm->pgd, mm); -	enter_lazy_tlb(mm, current); -	local_flush_tlb_all();  	printk("CPU%u: Booted secondary processor\n", cpu);  |