if (ret == 0) { unsigned long timeout;  /* * CPU was successfully started, wait for it * to come online or time out. */ timeout = jiffies + HZ; while (time_before(jiffies, timeout)) { if (cpu_online(cpu)) break;  udelay(10); barrier(); }  if (!cpu_online(cpu)) ret = -EIO; }  secondary_data.stack = 0; secondary_data.pgdir = 0;  *pmd_offset(pgd, PHYS_OFFSET) = __pmd(0); pgd_free(pgd);  
int __init __cpu_up(unsigned int cpu){	struct task_struct *idle;	int ret;	/*	 * Spawn a new process manually.  Grab a pointer to	 * its task struct so we can mess with it	 */	idle = fork_idle(cpu);	if (IS_ERR(idle)) {		printk(KERN_ERR "CPU%u: fork() failed\n", cpu);		return PTR_ERR(idle);	}	/*	 * Now bring the CPU into our world.	 */	ret = boot_secondary(cpu, idle);	if (ret) {		printk(KERN_CRIT "cpu_up: processor %d failed to boot\n", cpu);		/*		 * FIXME: We need to clean up the new idle thread. --rmk		 */	}	return ret;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/e65f38ed0bb7af367ff919c573cf29643fc5f9e8/smp.c/buggy/arch/arm/kernel/smp.c