orbea |
01-12-2016 07:25 AM |
Unable to suspend or hibernate with a 4.4.0 kernel.
1 Attachment(s)
I compiled a 4.4.0 kernel using the oldconfig from the generic 4.1.5 kernel using largely default options and then removing some hardware specific stuff I don't need. However now I can't use pm-suspend or pm-hibernate, it tries to suspend/hibernate and then resumes when its not able to. Any pointers on how to debug this? I have attached my kernel config at a .txt file in case this is my own doing.
This was not present on the 4.3.3 kernel release.
syslog
Code:
Jan 12 05:01:36 Linux kernel: [ 646.351808] Freezing of tasks failed after 20.008
seconds (3 tasks refusing to freeze, wq_busy=0):
Jan 12 05:01:36 Linux kernel: [ 646.351837] ffff8800ce53be08 ffffffff819af4c0 ff
ff8800ca490c40 0000000000000000
Jan 12 05:01:36 Linux kernel: [ 646.351842] ffff8800ca490c40 ffff8800ce53c000 ff
ff8800ca490c40 ffffffff81350990
Jan 12 05:01:36 Linux kernel: [ 646.351847] ffff8802224d5c80 0000000000000000 ff
ff8800ce53be20 ffffffff8174752c
Jan 12 05:01:36 Linux kernel: [ 646.351852] Call Trace:
Jan 12 05:01:36 Linux kernel: [ 646.351863] [<ffffffff81350990>] ? xfs_trans_ail
_cursor_first+0x90/0x90
Jan 12 05:01:36 Linux kernel: [ 646.351869] [<ffffffff8174752c>] schedule+0x3c/0
x90
Jan 12 05:01:36 Linux kernel: [ 646.351873] [<ffffffff81350fe0>] xfsaild+0x650/0
x680
Jan 12 05:01:36 Linux kernel: [ 646.351878] [<ffffffff81746d17>] ? __schedule+0x
327/0xb00
Jan 12 05:01:36 Linux kernel: [ 646.351882] [<ffffffff81350990>] ? xfs_trans_ail
_cursor_first+0x90/0x90
Jan 12 05:01:36 Linux kernel: [ 646.351886] [<ffffffff81350990>] ? xfs_trans_ail
_cursor_first+0x90/0x90
Jan 12 05:01:36 Linux kernel: [ 646.351892] [<ffffffff810a3a39>] kthread+0xc9/0x
e0
Jan 12 05:01:36 Linux kernel: [ 646.351896] [<ffffffff810a3970>] ? kthread_worke
r_fn+0x170/0x170
Jan 12 05:01:36 Linux kernel: [ 646.351901] [<ffffffff8174b76f>] ret_from_fork+0x3f/0x70
Jan 12 05:01:36 Linux kernel: [ 646.351905] [<ffffffff810a3970>] ? kthread_worker_fn+0x170/0x170
Jan 12 05:01:36 Linux kernel: [ 646.351915] ffff8800c8c13e08 ffff8802259f9880 ffff8802241b3100 ffff8800cd988990
Jan 12 05:01:36 Linux kernel: [ 646.351920] 0000000000000000 ffff8800c8c14000 ffff8802241b3100 ffffffff81350990
Jan 12 05:01:36 Linux kernel: [ 646.351931] ffff8800cd988980 0000000000000000 ffff8800c8c13e20 ffffffff8174752c
Jan 12 05:01:36 Linux kernel: [ 646.351936] Call Trace:
Jan 12 05:01:36 Linux kernel: [ 646.351940] [<ffffffff81350990>] ? xfs_trans_ail_cursor_first+0x90/0x90
Jan 12 05:01:36 Linux kernel: [ 646.351944] [<ffffffff8174752c>] schedule+0x3c/0x90
Jan 12 05:01:36 Linux kernel: [ 646.351948] [<ffffffff81350fe0>] xfsaild+0x650/0x680
Jan 12 05:01:36 Linux kernel: [ 646.351952] [<ffffffff81746d17>] ? __schedule+0x327/0xb00
Jan 12 05:01:36 Linux kernel: [ 646.351956] [<ffffffff81350990>] ? xfs_trans_ail_cursor_first+0x90/0x90
Jan 12 05:01:36 Linux kernel: [ 646.351960] [<ffffffff81350990>] ? xfs_trans_ail_cursor_first+0x90/0x90
Jan 12 05:01:36 Linux kernel: [ 646.351964] [<ffffffff810a3a39>] kthread+0xc9/0xe0
Jan 12 05:01:36 Linux kernel: [ 646.351968] [<ffffffff810a3970>] ? kthread_worker_fn+0x170/0x170
Jan 12 05:01:36 Linux kernel: [ 646.351973] [<ffffffff8174b76f>] ret_from_fork+0x3f/0x70
Jan 12 05:01:36 Linux kernel: [ 646.351977] [<ffffffff810a3970>] ? kthread_worker_fn+0x170/0x170
Jan 12 05:01:36 Linux kernel: [ 646.351986] ffff8800c8c37e08 ffff8802259f8000 ffff8802241b4980 ffff8800c8c34000
Jan 12 05:01:36 Linux kernel: [ 646.351990] ffff8802241b4980 ffff8800c8c38000 ffff8802241b4980 0000000000000000
Jan 12 05:01:36 Linux kernel: [ 646.351995] ffff8802224d5880 ffff8800ca5d6800 ffff8800c8c37e20 ffffffff8174752c
Jan 12 05:01:36 Linux kernel: [ 646.351999] Call Trace:
Jan 12 05:01:36 Linux kernel: [ 646.352003] [<ffffffff8174752c>] schedule+0x3c/0x90
Jan 12 05:01:36 Linux kernel: [ 646.352007] [<ffffffff81350fe0>] xfsaild+0x650/0x680
Jan 12 05:01:36 Linux kernel: [ 646.352011] [<ffffffff81350990>] ? xfs_trans_ail_cursor_first+0x90/0x90
Jan 12 05:01:36 Linux kernel: [ 646.352015] [<ffffffff81350990>] ? xfs_trans_ail_cursor_first+0x90/0x90
Jan 12 05:01:36 Linux kernel: [ 646.352025] [<ffffffff810a3a39>] kthread+0xc9/0xe0
Jan 12 05:01:36 Linux kernel: [ 646.352027] [<ffffffff810a3970>] ? kthread_worker_fn+0x170/0x170
Jan 12 05:01:36 Linux kernel: [ 646.352028] [<ffffffff8174b76f>] ret_from_fork+0x3f/0x70
Jan 12 05:01:36 Linux kernel: [ 646.352030] [<ffffffff810a3970>] ? kthread_worker_fn+0x170/0x170
Jan 12 05:01:36 Linux kernel: [ 646.352041]
Code:
$ lspci
00:00.0 Host bridge: Advanced Micro Devices, Inc. [AMD/ATI] RD890 PCI to PCI bridge (external gfx0 port B) (rev 02)
00:02.0 PCI bridge: Advanced Micro Devices, Inc. [AMD/ATI] RD890 PCI to PCI bridge (PCI express gpp port B)
00:09.0 PCI bridge: Advanced Micro Devices, Inc. [AMD/ATI] RD890 PCI to PCI bridge (PCI express gpp port H)
00:0a.0 PCI bridge: Advanced Micro Devices, Inc. [AMD/ATI] RD890 PCI to PCI bridge (external gfx1 port A)
00:11.0 SATA controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode] (rev 40)
00:12.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:12.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:13.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:13.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:14.0 SMBus: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 SMBus Controller (rev 42)
00:14.2 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 Azalia (Intel HDA) (rev 40)
00:14.3 ISA bridge: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 LPC host controller (rev 40)
00:14.4 PCI bridge: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 PCI to PCI Bridge (rev 40)
00:14.5 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
00:15.0 PCI bridge: Advanced Micro Devices, Inc. [AMD/ATI] SB700/SB800/SB900 PCI to PCI bridge (PCIE port 0)
00:15.2 PCI bridge: Advanced Micro Devices, Inc. [AMD/ATI] SB900 PCI to PCI bridge (PCIE port 2)
00:16.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:16.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:18.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 15h Processor Function 0
00:18.1 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 15h Processor Function 1
00:18.2 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 15h Processor Function 2
00:18.3 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 15h Processor Function 3
00:18.4 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 15h Processor Function 4
00:18.5 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 15h Processor Function 5
01:00.0 VGA compatible controller: NVIDIA Corporation GK110B [GeForce GTX 780 Ti] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GK110 HDMI Audio (rev a1)
02:00.0 USB controller: VIA Technologies, Inc. VL805 USB 3.0 Host Controller (rev 01)
03:00.0 SATA controller: Marvell Technology Group Ltd. 88SE9172 SATA 6Gb/s Controller (rev 12)
05:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)
06:00.0 SATA controller: Marvell Technology Group Ltd. 88SE9172 SATA 6Gb/s Controller (rev 12)
Edit:
dmesg
Code:
[ 626.285757] PM: Syncing filesystems ... done.
[ 626.342811] Freezing user space processes ... (elapsed 0.001 seconds) done.
[ 626.344187] Freezing remaining freezable tasks ...
[ 646.351808] Freezing of tasks failed after 20.008 seconds (3 tasks refusing to freeze, wq_busy=0):
[ 646.351830] xfsaild/sda10 S ffff8800ce53be08 0 900 2 0x00000000
[ 646.351837] ffff8800ce53be08 ffffffff819af4c0 ffff8800ca490c40 0000000000000000
[ 646.351842] ffff8800ca490c40 ffff8800ce53c000 ffff8800ca490c40 ffffffff81350990
[ 646.351847] ffff8802224d5c80 0000000000000000 ffff8800ce53be20 ffffffff8174752c
[ 646.351852] Call Trace:
[ 646.351863] [<ffffffff81350990>] ? xfs_trans_ail_cursor_first+0x90/0x90
[ 646.351869] [<ffffffff8174752c>] schedule+0x3c/0x90
[ 646.351873] [<ffffffff81350fe0>] xfsaild+0x650/0x680
[ 646.351878] [<ffffffff81746d17>] ? __schedule+0x327/0xb00
[ 646.351882] [<ffffffff81350990>] ? xfs_trans_ail_cursor_first+0x90/0x90
[ 646.351886] [<ffffffff81350990>] ? xfs_trans_ail_cursor_first+0x90/0x90
[ 646.351892] [<ffffffff810a3a39>] kthread+0xc9/0xe0
[ 646.351896] [<ffffffff810a3970>] ? kthread_worker_fn+0x170/0x170
[ 646.351901] [<ffffffff8174b76f>] ret_from_fork+0x3f/0x70
[ 646.351905] [<ffffffff810a3970>] ? kthread_worker_fn+0x170/0x170
[ 646.351910] xfsaild/sda11 S ffff8800c8c13e08 0 908 2 0x00000000
[ 646.351915] ffff8800c8c13e08 ffff8802259f9880 ffff8802241b3100 ffff8800cd988990
[ 646.351920] 0000000000000000 ffff8800c8c14000 ffff8802241b3100 ffffffff81350990
[ 646.351931] ffff8800cd988980 0000000000000000 ffff8800c8c13e20 ffffffff8174752c
[ 646.351936] Call Trace:
[ 646.351940] [<ffffffff81350990>] ? xfs_trans_ail_cursor_first+0x90/0x90
[ 646.351944] [<ffffffff8174752c>] schedule+0x3c/0x90
[ 646.351948] [<ffffffff81350fe0>] xfsaild+0x650/0x680
[ 646.351952] [<ffffffff81746d17>] ? __schedule+0x327/0xb00
[ 646.351956] [<ffffffff81350990>] ? xfs_trans_ail_cursor_first+0x90/0x90
[ 646.351960] [<ffffffff81350990>] ? xfs_trans_ail_cursor_first+0x90/0x90
[ 646.351964] [<ffffffff810a3a39>] kthread+0xc9/0xe0
[ 646.351968] [<ffffffff810a3970>] ? kthread_worker_fn+0x170/0x170
[ 646.351973] [<ffffffff8174b76f>] ret_from_fork+0x3f/0x70
[ 646.351977] [<ffffffff810a3970>] ? kthread_worker_fn+0x170/0x170
[ 646.351981] xfsaild/sda14 S ffff8800c8c37e08 0 916 2 0x00000000
[ 646.351986] ffff8800c8c37e08 ffff8802259f8000 ffff8802241b4980 ffff8800c8c34000
[ 646.351990] ffff8802241b4980 ffff8800c8c38000 ffff8802241b4980 0000000000000000
[ 646.351995] ffff8802224d5880 ffff8800ca5d6800 ffff8800c8c37e20 ffffffff8174752c
[ 646.351999] Call Trace:
[ 646.352003] [<ffffffff8174752c>] schedule+0x3c/0x90
[ 646.352007] [<ffffffff81350fe0>] xfsaild+0x650/0x680
[ 646.352011] [<ffffffff81350990>] ? xfs_trans_ail_cursor_first+0x90/0x90
[ 646.352015] [<ffffffff81350990>] ? xfs_trans_ail_cursor_first+0x90/0x90
[ 646.352025] [<ffffffff810a3a39>] kthread+0xc9/0xe0
[ 646.352027] [<ffffffff810a3970>] ? kthread_worker_fn+0x170/0x170
[ 646.352028] [<ffffffff8174b76f>] ret_from_fork+0x3f/0x70
[ 646.352030] [<ffffffff810a3970>] ? kthread_worker_fn+0x170/0x170
[ 646.352042] Restarting kernel threads ... done.
[ 646.352271] Restarting tasks ... done.
pm-suspend.log
Code:
Initial commandline parameters:
Tue Jan 12 05:01:15 PST 2016: Running hooks for suspend.
Running hook /usr/lib64/pm-utils/sleep.d/00logging suspend suspend:
Linux Akita 4.4.0 #1 SMP PREEMPT Mon Jan 11 08:57:44 PST 2016 x86_64 AMD FX(tm)-6350 Six-Core Processor AuthenticAMD GNU/Linux
Module Size Used by
cfg80211 446974 0
rfkill 15562 1 cfg80211
fuse 80238 1
joydev 10151 0
nouveau 1401973 2
video 24840 1 nouveau
ttm 71260 1 nouveau
drm_kms_helper 96426 1 nouveau
drm 271956 5 ttm,drm_kms_helper,nouveau
agpgart 26356 3 drm,ttm,nouveau
kvm_amd 53779 0
mxm_wmi 1699 1 nouveau
i2c_dev 5819 0
evdev 13034 21
i2c_algo_bit 5456 1 nouveau
kvm 444180 1 kvm_amd
fb_sys_fops 1506 1 drm_kms_helper
snd_hda_codec_realtek 55526 1
snd_hda_codec_hdmi 38014 1
snd_hda_codec_generic 56790 1 snd_hda_codec_realtek
k10temp 3188 0
fam15h_power 3070 0
syscopyarea 3326 1 drm_kms_helper
sysfillrect 3818 1 drm_kms_helper
sysimgblt 2367 1 drm_kms_helper
snd_hda_intel 24429 0
snd_hda_codec 89273 4 snd_hda_codec_realtek,snd_hda_codec_hdmi,snd_hda_codec_generic,snd_hda_intel
snd_hda_core 39474 5 snd_hda_codec_realtek,snd_hda_codec_hdmi,snd_hda_codec_generic,snd_hda_codec,snd_hda_intel
irqbypass 2872 1 kvm
hwmon 3250 3 fam15h_power,k10temp,nouveau
snd_hwdep 6250 1 snd_hda_codec
snd_pcm 79560 4 snd_hda_codec_hdmi,snd_hda_codec,snd_hda_intel,snd_hda_core
crct10dif_pclmul 4580 0
xhci_pci 4458 0
psmouse 104073 0
serio_raw 4785 0
crc32_pclmul 3059 0
snd_timer 18977 1 snd_pcm
xhci_hcd 111580 1 xhci_pci
crc32c_intel 13318 0
ohci_pci 3336 0
wmi 7778 2 mxm_wmi,nouveau
r8168 475441 0
ehci_pci 3999 0
snd 58733 7 snd_hwdep,snd_timer,snd_hda_codec_hdmi,snd_pcm,snd_hda_codec_generic,snd_hda_codec,snd_hda_intel
8250_fintek 2957 0
shpchp 24466 0
ohci_hcd 28028 1 ohci_pci
i2c_piix4 8793 0
i2c_core 38903 6 drm,i2c_dev,i2c_piix4,drm_kms_helper,i2c_algo_bit,nouveau
soundcore 5475 1 snd
tpm_infineon 7782 0
ehci_hcd 42560 1 ehci_pci
button 4948 1 nouveau
acpi_cpufreq 7202 0
tpm_tis 10525 0
tpm 30897 2 tpm_tis,tpm_infineon
processor 24183 7 acpi_cpufreq
loop 19834 0
hid_generic 1385 0
usbhid 36651 0
hid 101351 2 hid_generic,usbhid
total used free shared buff/cache available
Mem: 8198208 664544 66316 4612 7467348 7463948
Swap: 8388604 121160 8267444
/usr/lib64/pm-utils/sleep.d/00logging suspend suspend: success.
Running hook /usr/lib64/pm-utils/sleep.d/00powersave suspend suspend:
/usr/lib64/pm-utils/sleep.d/00powersave suspend suspend: success.
Running hook /usr/lib64/pm-utils/sleep.d/01grub suspend suspend:
/usr/lib64/pm-utils/sleep.d/01grub suspend suspend: not applicable.
Running hook /usr/lib64/pm-utils/sleep.d/49bluetooth-generic suspend suspend:
/usr/lib64/pm-utils/sleep.d/49bluetooth-generic suspend suspend: success.
Running hook /usr/lib64/pm-utils/sleep.d/49bluetooth-ibm suspend suspend:
/usr/lib64/pm-utils/sleep.d/49bluetooth-ibm suspend suspend: not applicable.
Running hook /etc/pm/sleep.d/66screenlock suspend suspend:
/etc/pm/sleep.d/66screenlock suspend suspend: success.
Running hook /usr/lib64/pm-utils/sleep.d/75modules suspend suspend:
/usr/lib64/pm-utils/sleep.d/75modules suspend suspend: not applicable.
Running hook /usr/lib64/pm-utils/sleep.d/90clock suspend suspend:
/usr/lib64/pm-utils/sleep.d/90clock suspend suspend: not applicable.
Running hook /usr/lib64/pm-utils/sleep.d/94cpufreq suspend suspend:
/usr/lib64/pm-utils/sleep.d/94cpufreq suspend suspend: success.
Running hook /usr/lib64/pm-utils/sleep.d/95led suspend suspend:
/usr/lib64/pm-utils/sleep.d/95led suspend suspend: not applicable.
Running hook /usr/lib64/pm-utils/sleep.d/98video-quirk-db-handler suspend suspend:
xscreensaver-command: activating and locking.
Kernel modesetting video driver detected, not using quirks.
/usr/lib64/pm-utils/sleep.d/98video-quirk-db-handler suspend suspend: success.
Running hook /usr/lib64/pm-utils/sleep.d/99video suspend suspend:
kernel.acpi_video_flags = 0
/usr/lib64/pm-utils/sleep.d/99video suspend suspend: success.
Tue Jan 12 05:01:16 PST 2016: performing suspend
/usr/lib64/pm-utils/pm-functions: line 301: echo: write error: Device or resource busy
Tue Jan 12 05:01:36 PST 2016: Awake.
Tue Jan 12 05:01:36 PST 2016: Running hooks for resume
Running hook /usr/lib64/pm-utils/sleep.d/99video resume suspend:
/usr/lib64/pm-utils/sleep.d/99video resume suspend: success.
Running hook /usr/lib64/pm-utils/sleep.d/98video-quirk-db-handler resume suspend:
/usr/lib64/pm-utils/sleep.d/98video-quirk-db-handler resume suspend: success.
Running hook /usr/lib64/pm-utils/sleep.d/95led resume suspend:
/usr/lib64/pm-utils/sleep.d/95led resume suspend: not applicable.
Running hook /usr/lib64/pm-utils/sleep.d/94cpufreq resume suspend:
/usr/lib64/pm-utils/sleep.d/94cpufreq resume suspend: success.
Running hook /usr/lib64/pm-utils/sleep.d/90clock resume suspend:
/usr/lib64/pm-utils/sleep.d/90clock resume suspend: not applicable.
Running hook /usr/lib64/pm-utils/sleep.d/75modules resume suspend:
Reloaded unloaded modules.
/usr/lib64/pm-utils/sleep.d/75modules resume suspend: success.
Running hook /etc/pm/sleep.d/66screenlock resume suspend:
/etc/pm/sleep.d/66screenlock resume suspend: success.
Running hook /usr/lib64/pm-utils/sleep.d/49bluetooth-ibm resume suspend:
/usr/lib64/pm-utils/sleep.d/49bluetooth-ibm resume suspend: not applicable.
Running hook /usr/lib64/pm-utils/sleep.d/49bluetooth-generic resume suspend:
/usr/lib64/pm-utils/sleep.d/49bluetooth-generic resume suspend: success.
Running hook /usr/lib64/pm-utils/sleep.d/01grub resume suspend:
/usr/lib64/pm-utils/sleep.d/01grub resume suspend: not applicable.
Running hook /usr/lib64/pm-utils/sleep.d/00powersave resume suspend:
/usr/lib64/pm-utils/sleep.d/00powersave resume suspend: success.
Running hook /usr/lib64/pm-utils/sleep.d/00logging resume suspend:
/usr/lib64/pm-utils/sleep.d/00logging resume suspend: success.
Tue Jan 12 05:01:36 PST 2016: Finished.
/usr/lib64/pm-utils/pm-functions
Code:
check_suspend() { [ -n "$SUSPEND_MODULE" ]; }
check_hibernate() { [ -n "$HIBERNATE_MODULE" ]; }
check_suspend_hybrid() { [ -n "$SUSPEND_HYBRID_MODULE" ]; }
# allow autodetection of sleep methods
if [ "$SLEEP_MODULE" = "auto" ]; then
SLEEP_MODULE="tuxonice uswsusp"
fi
for mod in $SLEEP_MODULE; do
mod="${PM_UTILS_LIBDIR}/module.d/${mod}"
[ -f "$mod" ] || continue
. "$mod"
done
# always fall back to kernel methods if nothing else was declared
if [ -z "$SUSPEND_MODULE" ]; then
if grep -q mem /sys/power/state; then
SUSPEND_MODULE="kernel"
do_suspend() { echo -n "mem" >/sys/power/state; } ####### Line 301
elif [ -c /dev/pmu ] && pm-pmu --check; then
SUSPEND_MODULE="kernel"
do_suspend() { pm-pmu --suspend; }
elif grep -q standby /sys/power/state; then
SUSPEND_MODULE="kernel"
do_suspend() { echo -n "standby" >/sys/power/state; }
fi
fi
if [ -z "$HIBERNATE_MODULE" ] && \n [ -f /sys/power/disk ] && \n grep -q disk /sys/power/state; then
HIBERNATE_MODULE="kernel"
do_hibernate()
{
[ -n "${HIBERNATE_MODE}" ] && \n grep -qw "${HIBERNATE_MODE}" /sys/power/disk && \n HIBERNATE_MODE_SAVE=$(cat /sys/power/disk) && \n HIBERNATE_MODE_SAVE="${HIBERNATE_MODE_SAVE##*[}" && \n HIBERNATE_MODE_SAVE="${HIBERNATE_MODE_SAVE%%]*}" && \n echo -n "${HIBERNATE_MODE}" > /sys/power/disk
echo -n "disk" > /sys/power/state
RET=$?
echo -n "$HIBERNATE_MODE_SAVE" > /sys/power/disk
return "$RET"
}
fi
# for kernels that support suspend to both (i.e. hybrid suspend)
# since kernel 3.6
if [ -z "$SUSPEND_HYBRID_MODULE" ] && \n [ -f /sys/power/disk ] && \n grep -q disk /sys/power/state && \n grep -q suspend /sys/power/disk; then
SUSPEND_HYBRID_MODULE="kernel"
do_suspend_hybrid()
{
HIBERNATE_MODE="suspend"
do_hibernate
}
fi
# since the kernel does not directly support hybrid sleep, we do
# something else -- suspend and schedule an alarm to go into
# hibernate if we have slept long enough.
# Only do this if we do not need to do any special video hackery on resume
# from hibernate, though.
if [ -z "$SUSPEND_HYBRID_MODULE" -a -w "$PM_RTC/wakealarm" ] && \n check_suspend && check_hibernate && ! is_set $HIBERNATE_RESUME_POST_VIDEO; \n then
SUSPEND_HYBRID_MODULE="kernel"
do_suspend_hybrid() {
WAKETIME=$(( $(cat "$PM_RTC/since_epoch") + PM_HIBERNATE_DELAY))
echo >"$PM_RTC/wakealarm"
echo $WAKETIME > "$PM_RTC/wakealarm"
if do_suspend; then
NOW=$(cat "$PM_RTC/since_epoch")
if [ "$NOW" -ge "$WAKETIME" -a "$NOW" -lt $((WAKETIME + 30)) ]; then
log "Woken by RTC alarm, hibernating."
# if hibernate fails for any reason, go back to suspend.
do_hibernate || do_suspend
else
echo > "$PM_RTC/wakealarm"
fi
else
# if we cannot suspend, just try to hibernate.
do_hibernate
fi
}
fi
/sys/power/state
|