preempt_disable(); 
void __cpuinit start_secondary(void){	/*	 * Dont put anything before smp_callin(), SMP	 * booting is too fragile that we want to limit the	 * things done here to the most necessary things.	 */	cpu_init();	smp_callin();	/* otherwise gcc will move up the smp_processor_id before the cpu_init */	barrier();	Dprintk("cpu %d: setting up apic clock\n", smp_processor_id()); 		setup_secondary_APIC_clock();	Dprintk("cpu %d: enabling apic timer\n", smp_processor_id());	if (nmi_watchdog == NMI_IO_APIC) {		disable_8259A_irq(0);		enable_NMI_through_LVT0(NULL);		enable_8259A_irq(0);	}	enable_APIC_timer();	/*	 * The sibling maps must be set before turing the online map on for	 * this cpu	 */	set_cpu_sibling_map(smp_processor_id());	/*   	 * Wait for TSC sync to not schedule things before.	 * We still process interrupts, which could see an inconsistent	 * time in that window unfortunately. 	 * Do this here because TSC sync has global unprotected state. 	 */	tsc_sync_wait();	/*	 * We need to hold call_lock, so there is no inconsistency	 * between the time smp_call_function() determines number of	 * IPI receipients, and the time when the determination is made	 * for which cpus receive the IPI in genapic_flat.c. Holding this	 * lock helps us to not include this cpu in a currently in progress	 * smp_call_function().	 */	lock_ipi_call_lock();	/*	 * Allow the master to continue.	 */	cpu_set(smp_processor_id(), cpu_online_map);	per_cpu(cpu_state, smp_processor_id()) = CPU_ONLINE;	unlock_ipi_call_lock();	cpu_idle();}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/5bfb5d690f36d316a5f3b4f7775fda996faa6b12/smpboot.c/clean/arch/x86_64/kernel/smpboot.c