提交 4b2ce8f1 编写于 作者: L Linus Torvalds

Merge branch 'x86-reboot-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull x86 reboot changes from Ingo Molnar:
 "Refine the reboot logic around the CF9 and EFI reboot methods, to make
  it more robust.  The expectation is for no working system to break,
  and for a couple of reboot-force systems to start rebooting
  automatically again"

* 'x86-reboot-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86, reboot: Only use CF9_COND automatically, not CF9
  x86, reboot: Add EFI and CF9 reboot methods into the default list
...@@ -464,9 +464,12 @@ void __attribute__((weak)) mach_reboot_fixups(void) ...@@ -464,9 +464,12 @@ void __attribute__((weak)) mach_reboot_fixups(void)
* 2) If still alive, write to the keyboard controller * 2) If still alive, write to the keyboard controller
* 3) If still alive, write to the ACPI reboot register again * 3) If still alive, write to the ACPI reboot register again
* 4) If still alive, write to the keyboard controller again * 4) If still alive, write to the keyboard controller again
* 5) If still alive, call the EFI runtime service to reboot
* 6) If still alive, write to the PCI IO port 0xCF9 to reboot
* 7) If still alive, inform BIOS to do a proper reboot
* *
* If the machine is still alive at this stage, it gives up. We default to * If the machine is still alive at this stage, it gives up. We default to
* following the same pattern, except that if we're still alive after (4) we'll * following the same pattern, except that if we're still alive after (7) we'll
* try to force a triple fault and then cycle between hitting the keyboard * try to force a triple fault and then cycle between hitting the keyboard
* controller and doing that * controller and doing that
*/ */
...@@ -502,7 +505,7 @@ static void native_machine_emergency_restart(void) ...@@ -502,7 +505,7 @@ static void native_machine_emergency_restart(void)
attempt = 1; attempt = 1;
reboot_type = BOOT_ACPI; reboot_type = BOOT_ACPI;
} else { } else {
reboot_type = BOOT_TRIPLE; reboot_type = BOOT_EFI;
} }
break; break;
...@@ -510,13 +513,15 @@ static void native_machine_emergency_restart(void) ...@@ -510,13 +513,15 @@ static void native_machine_emergency_restart(void)
load_idt(&no_idt); load_idt(&no_idt);
__asm__ __volatile__("int3"); __asm__ __volatile__("int3");
/* We're probably dead after this, but... */
reboot_type = BOOT_KBD; reboot_type = BOOT_KBD;
break; break;
case BOOT_BIOS: case BOOT_BIOS:
machine_real_restart(MRR_BIOS); machine_real_restart(MRR_BIOS);
reboot_type = BOOT_KBD; /* We're probably dead after this, but... */
reboot_type = BOOT_TRIPLE;
break; break;
case BOOT_ACPI: case BOOT_ACPI:
...@@ -530,7 +535,7 @@ static void native_machine_emergency_restart(void) ...@@ -530,7 +535,7 @@ static void native_machine_emergency_restart(void)
EFI_RESET_WARM : EFI_RESET_WARM :
EFI_RESET_COLD, EFI_RESET_COLD,
EFI_SUCCESS, 0, NULL); EFI_SUCCESS, 0, NULL);
reboot_type = BOOT_KBD; reboot_type = BOOT_CF9_COND;
break; break;
case BOOT_CF9: case BOOT_CF9:
...@@ -548,7 +553,7 @@ static void native_machine_emergency_restart(void) ...@@ -548,7 +553,7 @@ static void native_machine_emergency_restart(void)
outb(cf9|reboot_code, 0xcf9); outb(cf9|reboot_code, 0xcf9);
udelay(50); udelay(50);
} }
reboot_type = BOOT_KBD; reboot_type = BOOT_BIOS;
break; break;
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册