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
This commit is contained in:
commit
4b2ce8f15f
|
@ -464,9 +464,12 @@ void __attribute__((weak)) mach_reboot_fixups(void)
|
|||
* 2) If still alive, write to the keyboard controller
|
||||
* 3) If still alive, write to the ACPI reboot register 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
|
||||
* 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
|
||||
* controller and doing that
|
||||
*/
|
||||
|
@ -502,7 +505,7 @@ static void native_machine_emergency_restart(void)
|
|||
attempt = 1;
|
||||
reboot_type = BOOT_ACPI;
|
||||
} else {
|
||||
reboot_type = BOOT_TRIPLE;
|
||||
reboot_type = BOOT_EFI;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -510,13 +513,15 @@ static void native_machine_emergency_restart(void)
|
|||
load_idt(&no_idt);
|
||||
__asm__ __volatile__("int3");
|
||||
|
||||
/* We're probably dead after this, but... */
|
||||
reboot_type = BOOT_KBD;
|
||||
break;
|
||||
|
||||
case BOOT_BIOS:
|
||||
machine_real_restart(MRR_BIOS);
|
||||
|
||||
reboot_type = BOOT_KBD;
|
||||
/* We're probably dead after this, but... */
|
||||
reboot_type = BOOT_TRIPLE;
|
||||
break;
|
||||
|
||||
case BOOT_ACPI:
|
||||
|
@ -530,7 +535,7 @@ static void native_machine_emergency_restart(void)
|
|||
EFI_RESET_WARM :
|
||||
EFI_RESET_COLD,
|
||||
EFI_SUCCESS, 0, NULL);
|
||||
reboot_type = BOOT_KBD;
|
||||
reboot_type = BOOT_CF9_COND;
|
||||
break;
|
||||
|
||||
case BOOT_CF9:
|
||||
|
@ -548,7 +553,7 @@ static void native_machine_emergency_restart(void)
|
|||
outb(cf9|reboot_code, 0xcf9);
|
||||
udelay(50);
|
||||
}
|
||||
reboot_type = BOOT_KBD;
|
||||
reboot_type = BOOT_BIOS;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue