sys_reboot()

Personal Computer/Linux 2007. 12. 11. 20:40 posted by tolkien
수행하고 있는 project에서 가끔 reboot이 되지 않는 문제가 발생해서
reboot() system call을 추적해봤다.
kernel/sys.c:sys_reboot()
	switch (cmd) {
	case LINUX_REBOOT_CMD_RESTART:
		kernel_restart(NULL);
		break;

kernel/sys.c:kernel_restart()
	kernel_restart_prepare(cmd);
	if (!cmd)
		printk(KERN_EMERG "Restarting system.\n");
	else
		printk(KERN_EMERG "Restarting system with command '%s'.\n", cmd);
	machine_restart(cmd);

arch/arm/kernel/process.c:machine_restart()
	arm_pm_restart(reboot_mode);

arch/arm/kernel/process.c:
void (*arm_pm_restart)(char str) = arm_machine_restart;

arch/arm/kernel/process.c:arm_machine_restart()
	...
	/*
	 * Now call the architecture specific reboot code.
	 */
	arch_reset(mode);

	/*
	 * Whoops - the architecture was unable to reboot.
	 * Tell the user!
	 */
	mdelay(1000);
	printk("Reboot failed -- System halted\n");
	while (1);