x86_64: Add ACPI reboot option
PATCH 1/1 x86_64: Add ACPI reboot option
Add the ability to reboot an x86_64 based machine using the RESET_REG in the FADT ACPI table.
Signed-off-by Aaron Durbin <[email protected]>
----
This patch relies on the ACPI reboot mechanism patch.
Documentation/x86_64/boot-options.txt +4 -1
@@ -108,12 +108,15 @@ Idle loop Rebooting - reboot=b[ios] | t[riple] | k[bd] [, [w]arm | [c]old] + reboot=b[ios] | t[riple] | k[bd] | a[cpi] [, [w]arm | [c]old] bios Use the CPU reboot vector for warm reset warm Don't set the cold reboot flag cold Set the cold reboot flag triple Force a triple fault (init) kbd Use the keyboard controller. cold reset (default) + acpi Use the ACPI RESET_REG in the FADT. If ACPI is not configured or the + ACPI reset does not work, the reboot path attempts the reset using + the keyboard controller. Using warm reset will be much faster especially on big memory systems because the BIOS will not go through the memory check.
arch/x86_64/kernel/reboot.c +10 -1
@@ -9,6 +9,7 @@ #include <linux/string.h>#include <linux/pm.h> #include <linux/kdebug.h> #include <linux/sched.h> +#include <acpi/reboot.h> #include <asm/io.h> #include <asm/delay.h> #include <asm/hw_irq.h>
@@ -26,7 +27,8 @@ EXPORT_SYMBOL(pm_power_off);static long no_idt[3 ];static enum {BOOT_TRIPLE ='t' , -BOOT_KBD ='k' +BOOT_KBD ='k' , +BOOT_ACPI ='a' } reboot_type =BOOT_KBD ;static int reboot_mode =0 ;int reboot_force;
@@ -36,6 +38,7 @@ int reboot_force;cold Set the cold reboot flag triple Force a triple fault (init) kbd Use the keyboard controller. cold reset (default) +acpi Use the RESET_REG in the FADT force Avoid anything that could hang. */ static int __init reboot_setup (char *str)
@@ -51,6 +54,7 @@ static int __init reboot_setup(char *strbreak ;case 't' : +case 'a' :case 'b' :case 'k' : reboot_type = *str;
@@ -137,6 +141,11 @@ void machine_emergency_restart(void) reboot_type =BOOT_KBD ;break ; + +case BOOT_ACPI : +acpi_reboot (); + reboot_type =BOOT_KBD ; +break ; } } }