Thread (7 messages) 7 messages, 4 authors, 2021-02-10

RE: How can a userspace program tell if the system supports the ACPI S4 state (Suspend-to-Disk)?

From: Dexuan Cui <decui@microsoft.com>
Date: 2021-02-05 19:40:56
Also in: linux-acpi, lkml

From: Rafael J. Wysocki <rafael@kernel.org>
Sent: Friday, February 5, 2021 5:06 AM
To: Dexuan Cui <decui@microsoft.com>
Cc: linux-acpi@vger.kernel.org; linux-kernel@vger.kernel.org;
linux-hyperv@vger.kernel.org; Michael Kelley [off-list ref]
Subject: Re: How can a userspace program tell if the system supports the ACPI
S4 state (Suspend-to-Disk)?

On Sat, Dec 12, 2020 at 2:22 AM Dexuan Cui [off-list ref] wrote:
quoted
Hi all,
It looks like Linux can hibernate even if the system does not support the ACPI
S4 state, as long as the system can shut down, so "cat /sys/power/state"
always contains "disk", unless we specify the kernel parameter "nohibernate"
or we use LOCKDOWN_HIBERNATION.

In some scenarios IMO it can still be useful if the userspace is able to detect
if the ACPI S4 state is supported or not, e.g. when a Linux guest runs on
Hyper-V, Hyper-V uses the virtual ACPI S4 state as an indicator of the proper
support of the tool stack on the host, i.e. the guest is discouraged from
trying hibernation if the state is not supported.

I know we can check the S4 state by 'dmesg':

# dmesg |grep ACPI: | grep support
[    3.034134] ACPI: (supports S0 S4 S5)

But this method is unreliable because the kernel msg buffer can be filled
and overwritten. Is there any better method? If not, do you think if the
below patch is appropriate? Thanks!
Sorry for the delay.

If ACPI S4 is supported, /sys/power/disk will list "platform" as one
of the options (and it will be the default one then).  Otherwise,
"platform" is not present in /sys/power/disk, because ACPI is the only
user of hibernation_ops.

HTH
This works on x86. Thanks a lot!

BTW, does this also work on ARM64?

Thanks,
-- Dexuan
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help