ACPI hibernate: Introduce new kernel parameter acpi_sleep=s4_nonvs
On some machines it may be necessary to disable the saving/restoring of the ACPI NVS memory region during hibernation/resume. For this purpose, introduce new ACPI kernel command line option acpi_sleep=s4_nonvs. Based on a patch by Zhang Rui. Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> Acked-by: Nigel Cunningham <nigel@tuxonice.net> Acked-by: Pavel Machek <pavel@suse.cz> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
parent
b69edc7653
commit
ba84ed9546
|
@ -149,7 +149,8 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
default: 0
|
||||
|
||||
acpi_sleep= [HW,ACPI] Sleep options
|
||||
Format: { s3_bios, s3_mode, s3_beep, s4_nohwsig, old_ordering }
|
||||
Format: { s3_bios, s3_mode, s3_beep, s4_nohwsig,
|
||||
old_ordering, s4_nonvs }
|
||||
See Documentation/power/video.txt for s3_bios and s3_mode.
|
||||
s3_beep is for debugging; it makes the PC's speaker beep
|
||||
as soon as the kernel's real-mode entry point is called.
|
||||
|
@ -159,6 +160,8 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
control method, wrt putting devices into low power
|
||||
states, to be enforced (the ACPI 2.0 ordering of _PTS is
|
||||
used by default).
|
||||
s4_nonvs prevents the kernel from saving/restoring the
|
||||
ACPI NVS memory during hibernation.
|
||||
|
||||
acpi_sci= [HW,ACPI] ACPI System Control Interrupt trigger mode
|
||||
Format: { level | edge | high | low }
|
||||
|
|
|
@ -159,6 +159,8 @@ static int __init acpi_sleep_setup(char *str)
|
|||
#endif
|
||||
if (strncmp(str, "old_ordering", 12) == 0)
|
||||
acpi_old_suspend_ordering();
|
||||
if (strncmp(str, "s4_nonvs", 8) == 0)
|
||||
acpi_s4_no_nvs();
|
||||
str = strchr(str, ',');
|
||||
if (str != NULL)
|
||||
str += strspn(str, ", \t");
|
||||
|
|
|
@ -101,6 +101,19 @@ void __init acpi_old_suspend_ordering(void)
|
|||
* cases.
|
||||
*/
|
||||
static bool set_sci_en_on_resume;
|
||||
/*
|
||||
* The ACPI specification wants us to save NVS memory regions during hibernation
|
||||
* and to restore them during the subsequent resume. However, it is not certain
|
||||
* if this mechanism is going to work on all machines, so we allow the user to
|
||||
* disable this mechanism using the 'acpi_sleep=s4_nonvs' kernel command line
|
||||
* option.
|
||||
*/
|
||||
static bool s4_no_nvs;
|
||||
|
||||
void __init acpi_s4_no_nvs(void)
|
||||
{
|
||||
s4_no_nvs = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* acpi_pm_disable_gpes - Disable the GPEs.
|
||||
|
@ -396,7 +409,7 @@ static int acpi_hibernation_begin(void)
|
|||
{
|
||||
int error;
|
||||
|
||||
error = hibernate_nvs_alloc();
|
||||
error = s4_no_nvs ? 0 : hibernate_nvs_alloc();
|
||||
if (!error) {
|
||||
acpi_target_sleep_state = ACPI_STATE_S4;
|
||||
acpi_sleep_tts_switch(acpi_target_sleep_state);
|
||||
|
@ -494,7 +507,8 @@ static int acpi_hibernation_begin_old(void)
|
|||
error = acpi_sleep_prepare(ACPI_STATE_S4);
|
||||
|
||||
if (!error) {
|
||||
error = hibernate_nvs_alloc();
|
||||
if (!s4_no_nvs)
|
||||
error = hibernate_nvs_alloc();
|
||||
if (!error)
|
||||
acpi_target_sleep_state = ACPI_STATE_S4;
|
||||
}
|
||||
|
|
|
@ -270,6 +270,7 @@ int acpi_check_mem_region(resource_size_t start, resource_size_t n,
|
|||
#ifdef CONFIG_PM_SLEEP
|
||||
void __init acpi_no_s4_hw_signature(void);
|
||||
void __init acpi_old_suspend_ordering(void);
|
||||
void __init acpi_s4_no_nvs(void);
|
||||
#endif /* CONFIG_PM_SLEEP */
|
||||
#else /* CONFIG_ACPI */
|
||||
|
||||
|
|
Loading…
Reference in New Issue