/* This is the secondary CPU boot entry. We're using this CPUs idle thread stack, but a set of temporary page tables.  */
asmlinkage void __cpuinit secondary_start_kernel(void)
/* This is the secondary CPU boot entry. We're using this CPUs idle thread stack, but a set of temporary page tables.  */
asmlinkage void __cpuinit secondary_start_kernel(void)
{
	struct mm_struct *mm = &init_mm;
	unsigned int cpu = smp_processor_id();
	printk("CPU%u: Booted secondary processor\n", cpu);
	atomic_inc(&mm->mm_users);
	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();
	cpu_init();
	preempt_disable();
	platform_secondary_init(cpu);
	notify_cpu_starting(cpu);
	local_irq_enable();
	local_fiq_enable();
	percpu_timer_setup();
	calibrate_delay();
	smp_store_cpu_info(cpu);
	set_cpu_online(cpu, true);
	cpu_idle();
}