From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Len Brown <lenb@kernel.org>
Cc: ACPI Devel Maling List <linux-acpi@vger.kernel.org>,
pm list <linux-pm@lists.linux-foundation.org>,
Zhang Rui <rui.zhang@intel.com>, Ingo Molnar <mingo@elte.hu>
Subject: [PATCH 4/4] ACPI hibernate: Introduce new kernel parameter acpi_sleep=s4_nonvs
Date: Wed, 22 Oct 2008 22:54:48 +0200 [thread overview]
Message-ID: <200810222254.48666.rjw@sisk.pl> (raw)
In-Reply-To: <200810222249.20629.rjw@sisk.pl>
From: Rafael J. Wysocki <rjw@sisk.pl>
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>
Cc: Zhang Rui <rui.zhang@intel.com>
---
Documentation/kernel-parameters.txt | 5 ++++-
arch/x86/kernel/acpi/sleep.c | 2 ++
drivers/acpi/sleep/main.c | 19 +++++++++++++++++--
include/linux/acpi.h | 1 +
4 files changed, 24 insertions(+), 3 deletions(-)
Index: linux-2.6/Documentation/kernel-parameters.txt
===================================================================
--- linux-2.6.orig/Documentation/kernel-parameters.txt
+++ linux-2.6/Documentation/kernel-parameters.txt
@@ -149,7 +149,8 @@ and is between 256 and 4096 characters.
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.
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 }
Index: linux-2.6/arch/x86/kernel/acpi/sleep.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/acpi/sleep.c
+++ linux-2.6/arch/x86/kernel/acpi/sleep.c
@@ -161,6 +161,8 @@ static int __init acpi_sleep_setup(char
#endif
if (strncmp(str, "old_ordering", 12) == 0)
acpi_old_suspend_ordering();
+ if (strncmp(str, "s4_nonvs", 13) == 0)
+ acpi_s4_no_nvs();
str = strchr(str, ',');
if (str != NULL)
str += strspn(str, ", \t");
Index: linux-2.6/drivers/acpi/sleep/main.c
===================================================================
--- linux-2.6.orig/drivers/acpi/sleep/main.c
+++ linux-2.6/drivers/acpi/sleep/main.c
@@ -59,6 +59,20 @@ void __init acpi_old_suspend_ordering(vo
old_suspend_ordering = true;
}
+/*
+ * 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.
*/
@@ -323,7 +337,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;
@@ -411,7 +425,8 @@ static int acpi_hibernation_begin_old(vo
int 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;
}
Index: linux-2.6/include/linux/acpi.h
===================================================================
--- linux-2.6.orig/include/linux/acpi.h
+++ linux-2.6/include/linux/acpi.h
@@ -238,6 +238,7 @@ int acpi_check_mem_region(resource_size_
#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 */
next prev parent reply other threads:[~2008-10-22 20:50 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-22 20:49 [PATCH 0/4] Hibernate: Handle ACPI NVS memory as required by the spec Rafael J. Wysocki
2008-10-22 20:50 ` [PATCH 1/4] Hibernate: Call platform_begin before swsusp_shrink_memory Rafael J. Wysocki
2008-10-22 20:50 ` Rafael J. Wysocki
2008-10-22 22:37 ` Nigel Cunningham
2008-10-26 12:00 ` [linux-pm] " Pavel Machek
2008-10-26 12:00 ` Pavel Machek
2008-10-22 20:52 ` [PATCH 2/4] ACPI hibernate: Add a mechanism to save/restore ACPI NVS memory Rafael J. Wysocki
2008-10-22 20:52 ` Rafael J. Wysocki
2008-10-22 22:48 ` [linux-pm] " Nigel Cunningham
2008-10-22 23:08 ` Rafael J. Wysocki
2008-10-22 23:08 ` [linux-pm] " Rafael J. Wysocki
2008-10-23 1:37 ` Nigel Cunningham
2008-10-23 1:37 ` [linux-pm] " Nigel Cunningham
2008-10-23 5:47 ` [PATCH 2/4] ACPI hibernate: Add a mechanism to save/restore ACPI NVS memory (rev. 2) Rafael J. Wysocki
2008-10-23 5:47 ` Rafael J. Wysocki
2008-10-23 8:03 ` Nigel Cunningham
2008-10-23 8:03 ` Nigel Cunningham
2008-10-22 22:48 ` [PATCH 2/4] ACPI hibernate: Add a mechanism to save/restore ACPI NVS memory Nigel Cunningham
2008-10-26 12:08 ` [linux-pm] " Pavel Machek
2008-10-26 12:23 ` Rafael J. Wysocki
2008-10-26 12:23 ` [linux-pm] " Rafael J. Wysocki
2008-11-18 16:14 ` Pavel Machek
2008-11-18 16:14 ` Pavel Machek
2008-10-26 12:08 ` Pavel Machek
2008-10-22 20:53 ` [PATCH 3/4] x86 hibernate: Mark ACPI NVS memory region at startup Rafael J. Wysocki
2008-10-22 20:53 ` Rafael J. Wysocki
2008-10-26 12:14 ` Pavel Machek
2008-10-26 12:14 ` [linux-pm] " Pavel Machek
2008-10-26 12:29 ` Rafael J. Wysocki
2008-10-29 9:21 ` Zhang Rui
2008-10-29 9:21 ` [linux-pm] " Zhang Rui
2008-10-29 11:18 ` Pavel Machek
2008-10-29 11:18 ` [linux-pm] " Pavel Machek
2008-10-30 23:59 ` Rafael J. Wysocki
2008-10-30 23:59 ` [linux-pm] " Rafael J. Wysocki
2008-10-26 12:29 ` Rafael J. Wysocki
2008-10-22 20:54 ` Rafael J. Wysocki [this message]
2008-10-22 22:51 ` [linux-pm] [PATCH 4/4] ACPI hibernate: Introduce new kernel parameter acpi_sleep=s4_nonvs Nigel Cunningham
2008-10-22 23:10 ` Rafael J. Wysocki
2008-10-22 23:10 ` [linux-pm] " Rafael J. Wysocki
2008-10-22 23:19 ` [PATCH 4/4] ACPI hibernate: Introduce new kernel parameter acpi_sleep=s4_nonvs (rev. 2) Rafael J. Wysocki
2008-10-26 12:18 ` [linux-pm] " Pavel Machek
2008-10-26 12:18 ` Pavel Machek
2008-10-22 23:19 ` Rafael J. Wysocki
2008-10-22 22:51 ` [PATCH 4/4] ACPI hibernate: Introduce new kernel parameter acpi_sleep=s4_nonvs Nigel Cunningham
2008-10-22 20:54 ` Rafael J. Wysocki
-- strict thread matches above, loose matches on Subject: below --
2008-10-26 19:48 [PATCH 0/4] Hibernate: Handle ACPI NVS memory as required by the spec (rev. 2) Rafael J. Wysocki
2008-10-26 19:56 ` [PATCH 4/4] ACPI hibernate: Introduce new kernel parameter acpi_sleep=s4_nonvs Rafael J. Wysocki
2008-10-26 19:56 ` Rafael J. Wysocki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200810222254.48666.rjw@sisk.pl \
--to=rjw@sisk.pl \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-pm@lists.linux-foundation.org \
--cc=mingo@elte.hu \
--cc=rui.zhang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.