if (nr < 1 || nr > 3) 
if (nr < 0 || nr > 3) 
static void __init smp_core99_kick_cpu(int nr){	unsigned long save_vector, new_vector;	unsigned long flags;	volatile unsigned long *vector		 = ((volatile unsigned long *)(KERNELBASE+0x100));	if (nr < 1 || nr > 3)		return;	if (ppc_md.progress) ppc_md.progress("smp_core99_kick_cpu", 0x346);	local_irq_save(flags);	local_irq_disable();	/* Save reset vector */	save_vector = *vector;	/* Setup fake reset vector that does		 *   b __secondary_start_psurge - KERNELBASE	 */	switch(nr) {		case 1:			new_vector = (unsigned long)__secondary_start_psurge;			break;		case 2:			new_vector = (unsigned long)__secondary_start_psurge2;			break;		case 3:			new_vector = (unsigned long)__secondary_start_psurge3;			break;	}	*vector = 0x48000002 + new_vector - KERNELBASE;	/* flush data cache and inval instruction cache */	flush_icache_range((unsigned long) vector, (unsigned long) vector + 4);	/* Put some life in our friend */	pmac_call_feature(PMAC_FTR_RESET_CPU, NULL, nr, 0);	/* FIXME: We wait a bit for the CPU to take the exception, I should	 * instead wait for the entry code to set something for me. Well,	 * ideally, all that crap will be done in prom.c and the CPU left	 * in a RAM-based wait loop like CHRP.	 */	mdelay(1);	/* Restore our exception vector */	*vector = save_vector;	flush_icache_range((unsigned long) vector, (unsigned long) vector + 4);	local_irq_restore(flags);	if (ppc_md.progress) ppc_md.progress("smp_core99_kick_cpu done", 0x347);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/31139971b3dc9fbb2e8a8572fb81e6e8470f363a/pmac_smp.c/buggy/arch/ppc/platforms/pmac_smp.c