rem: int _start(kernel_args *oldka, int cpu_num)
add: _start(kernel_args *oldka, int cpu_num)
context: int _start(kernel_args *oldka, int cpu_num){	memcpy(&ka, oldka, sizeof(kernel_args));	smp_set_num_cpus(ka.num_cpus);	// do any pre-booting cpu config	cpu_preboot_init(&ka);	// if we're not a boot cpu, spin here until someone wakes us up	if (smp_trap_non_boot_cpus(&ka, cpu_num) == B_NO_ERROR) {		// we're the boot processor, so wait for all of the APs to enter the kernel		smp_wait_for_ap_cpus(&ka);		// setup debug output		dbg_init(&ka);		dbg_set_serial_debug(true);		dprintf("Welcome to kernel debugger output!\n");		// init modules		cpu_init(&ka);		int_init(&ka);		vm_init(&ka);		dprintf("vm up\n");		// now we can use the heap and create areas		dbg_init2(&ka);		int_init2(&ka);		faults_init(&ka);		smp_init(&ka);		timer_init(&ka);		arch_cpu_init2(&ka);		sem_init(&ka);		// now we can create and use semaphores		vm_init_postsem(&ka);		cbuf_init();		vfs_init(&ka);		team_init(&ka);		thread_init(&ka);		port_init(&ka);		vm_init_postthread(&ka);		elf_init(&ka);		// start a thread to finish initializing the rest of the system		{			thread_id tid;			tid = thread_create_kernel_thread("main2", &main2, NULL);			thread_resume_thread(tid);		}		smp_wake_up_all_non_boot_cpus();		smp_enable_ici(); // ici's were previously being ignored		start_scheduler();	} else {		// this is run per cpu for each AP processor after they've been set loose		thread_init_percpu(cpu_num);	}	enable_interrupts();	dprintf("main: done... begin idle loop on cpu %d\n", cpu_num);	for(;;)		arch_cpu_idle();	return 0;}