Merge branch 'bugzilla-16396' into release
This commit is contained in:
@@ -647,3 +647,10 @@ Who: Stefan Richter <stefanr@s5r6.in-berlin.de>
|
|||||||
|
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
|
What: The acpi_sleep=s4_nonvs command line option
|
||||||
|
When: 2.6.37
|
||||||
|
Files: arch/x86/kernel/acpi/sleep.c
|
||||||
|
Why: superseded by acpi_sleep=nonvs
|
||||||
|
Who: Rafael J. Wysocki <rjw@sisk.pl>
|
||||||
|
|
||||||
|
----------------------------
|
||||||
|
@@ -254,8 +254,8 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
control method, with respect to putting devices into
|
control method, with respect to putting devices into
|
||||||
low power states, to be enforced (the ACPI 2.0 ordering
|
low power states, to be enforced (the ACPI 2.0 ordering
|
||||||
of _PTS is used by default).
|
of _PTS is used by default).
|
||||||
s4_nonvs prevents the kernel from saving/restoring the
|
nonvs prevents the kernel from saving/restoring the
|
||||||
ACPI NVS memory during hibernation.
|
ACPI NVS memory during suspend/hibernation and resume.
|
||||||
sci_force_enable causes the kernel to set SCI_EN directly
|
sci_force_enable causes the kernel to set SCI_EN directly
|
||||||
on resume from S1/S3 (which is against the ACPI spec,
|
on resume from S1/S3 (which is against the ACPI spec,
|
||||||
but some broken systems don't work without it).
|
but some broken systems don't work without it).
|
||||||
|
@@ -157,9 +157,14 @@ static int __init acpi_sleep_setup(char *str)
|
|||||||
#ifdef CONFIG_HIBERNATION
|
#ifdef CONFIG_HIBERNATION
|
||||||
if (strncmp(str, "s4_nohwsig", 10) == 0)
|
if (strncmp(str, "s4_nohwsig", 10) == 0)
|
||||||
acpi_no_s4_hw_signature();
|
acpi_no_s4_hw_signature();
|
||||||
if (strncmp(str, "s4_nonvs", 8) == 0)
|
if (strncmp(str, "s4_nonvs", 8) == 0) {
|
||||||
acpi_s4_no_nvs();
|
pr_warning("ACPI: acpi_sleep=s4_nonvs is deprecated, "
|
||||||
|
"please use acpi_sleep=nonvs instead");
|
||||||
|
acpi_nvs_nosave();
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
if (strncmp(str, "nonvs", 5) == 0)
|
||||||
|
acpi_nvs_nosave();
|
||||||
if (strncmp(str, "old_ordering", 12) == 0)
|
if (strncmp(str, "old_ordering", 12) == 0)
|
||||||
acpi_old_suspend_ordering();
|
acpi_old_suspend_ordering();
|
||||||
str = strchr(str, ',');
|
str = strchr(str, ',');
|
||||||
|
@@ -81,6 +81,20 @@ static int acpi_sleep_prepare(u32 acpi_state)
|
|||||||
#ifdef CONFIG_ACPI_SLEEP
|
#ifdef CONFIG_ACPI_SLEEP
|
||||||
static u32 acpi_target_sleep_state = ACPI_STATE_S0;
|
static u32 acpi_target_sleep_state = ACPI_STATE_S0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The ACPI specification wants us to save NVS memory regions during hibernation
|
||||||
|
* and to restore them during the subsequent resume. Windows does that also for
|
||||||
|
* suspend to RAM. However, it is known that this mechanism does not work on
|
||||||
|
* all machines, so we allow the user to disable it with the help of the
|
||||||
|
* 'acpi_sleep=nonvs' kernel command line option.
|
||||||
|
*/
|
||||||
|
static bool nvs_nosave;
|
||||||
|
|
||||||
|
void __init acpi_nvs_nosave(void)
|
||||||
|
{
|
||||||
|
nvs_nosave = true;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ACPI 1.0 wants us to execute _PTS before suspending devices, so we allow the
|
* ACPI 1.0 wants us to execute _PTS before suspending devices, so we allow the
|
||||||
* user to request that behavior by using the 'acpi_old_suspend_ordering'
|
* user to request that behavior by using the 'acpi_old_suspend_ordering'
|
||||||
@@ -197,8 +211,7 @@ static int acpi_suspend_begin(suspend_state_t pm_state)
|
|||||||
u32 acpi_state = acpi_suspend_states[pm_state];
|
u32 acpi_state = acpi_suspend_states[pm_state];
|
||||||
int error = 0;
|
int error = 0;
|
||||||
|
|
||||||
error = suspend_nvs_alloc();
|
error = nvs_nosave ? 0 : suspend_nvs_alloc();
|
||||||
|
|
||||||
if (error)
|
if (error)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
@@ -388,20 +401,6 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
|
|||||||
#endif /* CONFIG_SUSPEND */
|
#endif /* CONFIG_SUSPEND */
|
||||||
|
|
||||||
#ifdef CONFIG_HIBERNATION
|
#ifdef CONFIG_HIBERNATION
|
||||||
/*
|
|
||||||
* 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
static unsigned long s4_hardware_signature;
|
static unsigned long s4_hardware_signature;
|
||||||
static struct acpi_table_facs *facs;
|
static struct acpi_table_facs *facs;
|
||||||
static bool nosigcheck;
|
static bool nosigcheck;
|
||||||
@@ -415,7 +414,7 @@ static int acpi_hibernation_begin(void)
|
|||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
error = s4_no_nvs ? 0 : suspend_nvs_alloc();
|
error = nvs_nosave ? 0 : suspend_nvs_alloc();
|
||||||
if (!error) {
|
if (!error) {
|
||||||
acpi_target_sleep_state = ACPI_STATE_S4;
|
acpi_target_sleep_state = ACPI_STATE_S4;
|
||||||
acpi_sleep_tts_switch(acpi_target_sleep_state);
|
acpi_sleep_tts_switch(acpi_target_sleep_state);
|
||||||
@@ -510,7 +509,7 @@ static int acpi_hibernation_begin_old(void)
|
|||||||
error = acpi_sleep_prepare(ACPI_STATE_S4);
|
error = acpi_sleep_prepare(ACPI_STATE_S4);
|
||||||
|
|
||||||
if (!error) {
|
if (!error) {
|
||||||
if (!s4_no_nvs)
|
if (!nvs_nosave)
|
||||||
error = suspend_nvs_alloc();
|
error = suspend_nvs_alloc();
|
||||||
if (!error)
|
if (!error)
|
||||||
acpi_target_sleep_state = ACPI_STATE_S4;
|
acpi_target_sleep_state = ACPI_STATE_S4;
|
||||||
|
@@ -253,7 +253,7 @@ int acpi_resources_are_enforced(void);
|
|||||||
#ifdef CONFIG_PM_SLEEP
|
#ifdef CONFIG_PM_SLEEP
|
||||||
void __init acpi_no_s4_hw_signature(void);
|
void __init acpi_no_s4_hw_signature(void);
|
||||||
void __init acpi_old_suspend_ordering(void);
|
void __init acpi_old_suspend_ordering(void);
|
||||||
void __init acpi_s4_no_nvs(void);
|
void __init acpi_nvs_nosave(void);
|
||||||
#endif /* CONFIG_PM_SLEEP */
|
#endif /* CONFIG_PM_SLEEP */
|
||||||
|
|
||||||
struct acpi_osc_context {
|
struct acpi_osc_context {
|
||||||
|
Reference in New Issue
Block a user