 /* *      Synchronize the TSC with the BP */ if (cpu_has_tsc) synchronize_tsc_ap(); 
static void __init smp_callin(void){	int cpuid, phys_id;	unsigned long timeout;	/*	 * If waken up by an INIT in an 82489DX configuration	 * we may get here before an INIT-deassert IPI reaches	 * our local APIC.  We have to wait for the IPI or we'll	 * lock up on an APIC access.	 */	while (!atomic_read(&init_deasserted));	/*	 * (This works even if the APIC is not enabled.)	 */	phys_id = GET_APIC_ID(apic_read(APIC_ID));	cpuid = smp_processor_id();	if (cpu_isset(cpuid, cpu_callin_map)) {		panic("smp_callin: phys CPU#%d, CPU#%d already present??\n",					phys_id, cpuid);	}	Dprintk("CPU#%d (phys ID: %d) waiting for CALLOUT\n", cpuid, phys_id);	/*	 * STARTUP IPIs are fragile beasts as they might sometimes	 * trigger some glue motherboard logic. Complete APIC bus	 * silence for 1 second, this overestimates the time the	 * boot CPU is spending to send the up to 2 STARTUP IPIs	 * by a factor of two. This should be enough.	 */	/*	 * Waiting 2s total for startup (udelay is not yet working)	 */	timeout = jiffies + 2*HZ;	while (time_before(jiffies, timeout)) {		/*		 * Has the boot CPU finished it's STARTUP sequence?		 */		if (cpu_isset(cpuid, cpu_callout_map))			break;		rep_nop();	}	if (!time_before(jiffies, timeout)) {		panic("smp_callin: CPU%d started up but did not get a callout!\n",			cpuid);	}	/*	 * the boot CPU has finished the init stage and is spinning	 * on callin_map until we finish. We are free to set up this	 * CPU, first the APIC. (this is probably redundant on most	 * boards)	 */	Dprintk("CALLIN, before setup_local_APIC().\n");	setup_local_APIC();	/*	 * Get our bogomips.	 */	calibrate_delay();	Dprintk("Stack at about %p\n",&cpuid);	disable_APIC_timer();	/*	 * Save our processor parameters	 */ 	smp_store_cpu_info(cpuid);	/*	 * Allow the master to continue.	 */	cpu_set(cpuid, cpu_callin_map);	/*	 *      Synchronize the TSC with the BP	 */	if (cpu_has_tsc)		synchronize_tsc_ap();}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/a8ab26fe5bfeef43bdcde5182ca051ae0647607e/smpboot.c/clean/arch/x86_64/kernel/smpboot.c