Laptop appears to sleep but not suspend

I have Fedora 35 installed on my HP Spectre x360 13t-aw200. I suspected that it wasn’t suspending correctly because the battery would often drain 25%-30% overnight. After snooping around a bit, I found this, which was somewhat suspicous (removed some unrelated log entries, after closing my laptop hood at 8:35am and opening it at 9:06am:

% sudo systemctl status sleep.target suspend.target
○ sleep.target - Sleep
     Loaded: loaded (/usr/lib/systemd/system/sleep.target; static)
     Active: inactive (dead)
       Docs: man:systemd.special(7)

...
Feb 21 08:35:02 mies systemd[1]: Reached target Sleep.
Feb 21 09:06:29 mies systemd[1]: Stopped target Sleep.
...

○ suspend.target - Suspend
     Loaded: loaded (/usr/lib/systemd/system/suspend.target; static)
     Active: inactive (dead)
       Docs: man:systemd.special(7)

...
Feb 21 09:06:29 mies systemd[1]: Reached target Suspend.
Feb 21 09:06:29 mies systemd[1]: Stopped target Suspend.
...

It looks like systemd threw it into sleep state where it remained until I opened the laptop, when it quickly entered and exited suspend state. I then tried to enter “Suspend” from the Gnome menu item in the upper right and it demonstrated the same behavior.

I’m guessing this means it’s not reaching suspend.

Just in case, the only non-standard aspect of my installation is that both my root and swap partitions are LUKS encrypted.

Thanks in advance for any insight you might be able to share!

Would you like to share the result of journalctl -b 0 and post it on pastebin.com or gist.github.com or any other services (there limited character can be shares here) then share the link here when it wake up after failed to sleep? May be it will give us a start to find out what’s happen.

1 Like

Thanks so much! Here is the gisthub:

From your journal, when you close your lid, it go to s2idle instead of deep sleep. You could search from your journalctl above with search key s2idle.

You could also check it with cat /sys/power/mem_sleep. If your default is s2idle it should give the result [s2idle] deep.

You could try change it to deep sleep by adding kernel parameter mem_sleep_default=deep.

If you’re using Fedora Workstation or any regulars spins (KDE, etc.), add it with:

sudo grubby --args="mem_sleep_default=deep" --update-kernel=ALL

If it not work, you could remove with:

sudo grubby --remove-args="mem_sleep_default=deep" --update-kernel=ALL

If you’re using Silverblue or Kinoite:

rpm-ostree kargs --append="mem_sleep_default=deep"

To remove it:

rpm-ostree kargs --delete="mem_sleep_default=deep"

For different between s2idle and deep sleep, you could read here.

2 Likes

I updated my boot options via grubby and although it booted with the “mem_sleep_default=deep” option (confirmed in dmesg), the problem persists. /sys/power/mem_sleep still contains [s2idle] and not [s2idle] deep.

Here is a gisthub of the most recent journalctl -b 0 after closing/opening cover.

Thanks again in advance for your help!

I just discovered this in dmesg:

[ 0.266710] ACPI: PM: (supports S0 S4 S5)

IIUC, this means that “deep”, a.k.a. S3, isn’t supported on my platform, but S4 is.

So I THINK the solution is to try and enable “suspend to disk.” I’m searching but if anyone has a pointer (or of course, if I’m barking up the wrong tree), please share.

Thanks again!

After you add above kernel parameter, would you like to add also (please by aware with some quotes chars bellow):

sudo grubby --args="acpi_osi=! acpi_osi=\"Windows 2009\"" --update-kernel=ALL

Above will fool BIOS and thinking it currently booting to Windows. But for trade off, may be there some hardware will not work (For example Fn or touchpad).

To remove it, use:

sudo grubby --remove-args="acpi_osi=! acpi_osi=\"Windows 2009\"" --update-kernel=ALL

The other things, may be you want to check your bios if there any option in power management to enable the deep sleep.

About suspend to disk (hibernate), there should be lot of tutorial available on the internet but I’m afraid it will bring another problem since it not enabled by default (and I believe most distros also disable it).

My suggestion, stick with current config and adapt the your workflow. Also try to upgrade regularly. May be in the future there an upgrade related to your system ACPI.

I’d like to revisit this. First, I was able to get hibernate working reliably which works for some but not all of my needs. I’d also really like to get this s2idle working as well as possible.

I do believe that something is wrong. For comparison, I booted into Windows 10 to see how the battery degrades when it sleeps. I kept opening/closing the laptop so it didn’t get into hibernate. By comparison, the battery emptied VERY slowly compared to what happens with linux, two to five times more slowly.

So where I am now is wondering if there is any way to debug what is actually happening to the processor and processes while in s2idle. For instance, is it possible that it’s waking up or perhaps falsely going into s2idle even if the logs say it is?

Any pointers would be appreciated.

Hello,
Thanks for posting the above.

I have the same issue but I’m on F36. My machine (HP Spectre x360 Convertible 14-ea1xxx) has optane (sucks, I know) and my BIOS does not have the option to switch to AHCI from RAID (doubly sucks, I know).

I also am not able to enable s2idle deep even after adding it as a kernel param.

Can you share how you enabled hibernate?

Babby, to enable hibernate, I simply followed the instructions found on this page.

To anyone out there, we both can really use help with this. Hopefully someone is listening. One thing I’m hoping: I read this article about the 5.19 kernel and updates to ACPI and I’m hoping that MAYBE something was fixed inadvertently. I guess that tells you how desparate I am for help :slight_smile:

2 Likes