printk("Restarting CPUs"); atomic_set(&freeze, 0); while (atomic_read(&cpu_counter)) { cpu_relax(); barrier(); 
int cpu, error;  printk("Thawing cpus ...\n"); for_each_cpu_mask(cpu, frozen_cpus) { error = smp_prepare_cpu(cpu); if (!error) error = cpu_up(cpu); if (!error) { printk("CPU%d is up\n", cpu); continue; } printk("Error taking cpu %d up: %d\n", cpu, error); panic("Not enough cpus"); 
void enable_nonboot_cpus(void){	printk("Restarting CPUs");	atomic_set(&freeze, 0);	while (atomic_read(&cpu_counter)) {		cpu_relax();		barrier();	}	printk("...");	set_cpus_allowed(current, oldmask);	schedule();	printk("ok\n");}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/5a72e04df5470df0ec646029d31e5528167ab1a7/smp.c/buggy/kernel/power/smp.c