mirror of https://gitee.com/openkylin/linux.git
ACPI: reboot: Avoid racing after writing to ACPI RESET_REG
According to the ACPI spec, "The system must reset immediately following the write to the ACPI RESET_REG register.", but there are cases that the system does not follow this and results in racing with the subsequetial reboot mechanism, which brings unexpected behavior. Fix this by adding a 15ms delay after writing to the ACPI RESET_REG. Reported-by: Ghorai, Sukumar <sukumar.ghorai@intel.com> Signed-off-by: Zhang Rui <rui.zhang@intel.com> [ rjw: Edit comment in the code and subject ] Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
cf1d2b44f6
commit
9a4888888c
|
@ -3,6 +3,7 @@
|
|||
#include <linux/pci.h>
|
||||
#include <linux/acpi.h>
|
||||
#include <acpi/reboot.h>
|
||||
#include <linux/delay.h>
|
||||
|
||||
#ifdef CONFIG_PCI
|
||||
static void acpi_pci_reboot(struct acpi_generic_address *rr, u8 reset_value)
|
||||
|
@ -66,4 +67,14 @@ void acpi_reboot(void)
|
|||
acpi_reset();
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Some platforms do not shut down immediately after writing to the
|
||||
* ACPI reset register, and this results in racing with the
|
||||
* subsequent reboot mechanism.
|
||||
*
|
||||
* The 15ms delay has been found to be long enough for the system
|
||||
* to reboot on the affected platforms.
|
||||
*/
|
||||
mdelay(15);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue