int __init boot_secondary(unsigned int cpu, struct task_struct *idle) 
int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) 
int __init boot_secondary(unsigned int cpu, struct task_struct *idle){	unsigned long timeout;	/*	 * set synchronisation state between this boot processor	 * and the secondary one	 */	spin_lock(&boot_lock);	/*	 * The secondary processor is waiting to be released from	 * the holding pen - release it, then wait for it to flag	 * that it has been released by resetting pen_release.	 *	 * Note that "pen_release" is the hardware CPU ID, whereas	 * "cpu" is Linux's internal ID.	 */	pen_release = cpu;	/*	 * XXX	 *	 * This is a later addition to the booting protocol: the	 * bootMonitor now puts secondary cores into WFI, so	 * poke_milo() no longer gets the cores moving; we need	 * to send a soft interrupt to wake the secondary core.	 * Use smp_cross_call() for this, since there's little	 * point duplicating the code here	 */	smp_cross_call(cpumask_of_cpu(cpu));	timeout = jiffies + (1 * HZ);	while (time_before(jiffies, timeout)) {		if (pen_release == -1)			break;		udelay(10);	}	/*	 * now the secondary core is starting up let it run its	 * calibrations, then wait for it to finish	 */	spin_unlock(&boot_lock);	return pen_release != -1 ? -ENOSYS : 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/bd6f68af298cab4e059f8489b56e46ae36243fcc/platsmp.c/clean/arch/arm/mach-integrator/platsmp.c