add: TRACE(("enable interrupts, exit kernel startup\n"));
context: _start(kernel_args *oldka, int cpu_num){	thread_id thread = -1;	kernel_startup = true;	if (oldka->kernel_args_size != sizeof(kernel_args)		|| oldka->version != CURRENT_KERNEL_ARGS_VERSION) {		// This is something we cannot handle right now - release kernels		// should always be able to handle the kernel_args of earlier		// released kernels.		arch_dbg_con_early_boot_message("Version mismatch between boot loader and kernel!\n");		return -1;	}	memcpy(&ka, oldka, sizeof(kernel_args));		// the passed in kernel args are in a non-allocated range of memory	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		debug_init(&ka);		set_dprintf_enabled(true);		dprintf("Welcome to kernel debugger output!\n");		// init modules		cpu_init(&ka);		int_init(&ka);		vm_init(&ka);			// Before vm_init_post_sem() is called, we have to make sure that			// the boot loader allocated region is not used anymore		TRACE(("vm up\n"));		// now we can use the heap and create areas		debug_init_post_vm(&ka);		int_init_post_vm(&ka);		cpu_init_post_vm(&ka);		faults_init(&ka);		smp_init(&ka);		rtc_init(&ka);		timer_init(&ka);		sem_init(&ka);		TRACE(("##################################################################\n"));		TRACE(("semaphores now available\n"));		TRACE(("##################################################################\n"));		// now we can create and use semaphores		vm_init_post_sem(&ka);		cbuf_init();		vfs_init(&ka);		team_init(&ka);		thread_init(&ka);		port_init(&ka);		kernel_daemon_init();		vm_init_post_thread(&ka);		elf_init(&ka);		// start a thread to finish initializing the rest of the system		thread = spawn_kernel_thread(&main2, "main2", B_NORMAL_PRIORITY, NULL);		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		smp_per_cpu_init(&ka, cpu_num);		thread_per_cpu_init(cpu_num);	}	TRACE(("##################################################################\n"));	TRACE(("interrupts now enabled\n"));	TRACE(("##################################################################\n"));	kernel_startup = false;	enable_interrupts();	if (thread >= B_OK)		resume_thread(thread);	TRACE(("main: done... begin idle loop on cpu %d\n", cpu_num));	for (;;)		arch_cpu_idle();	return 0;}