You are not logged in.

#1 2020-08-07 05:57:20

jeremija
Member
Registered: 2016-10-09
Posts: 9

kernel / nvidia driver upgrade broke suspend on ThinkPad X1 Extreme G1

Running Arch on ThinkPad X1 Extreme Gen1. Only the discrete GPU is enabled in BIOS. After a recent upgrade suspend completely stopped working for me.

I noticed that a recent "pacman -Syu" upgraded the kernel and the nvidia driver:

upgraded linux (5.7.10.arch1-1 -> 5.7.12.arch1-1)
upgraded nvidia (450.57-4 -> 450.57-6)

I first tried to downgrade the kernel to 5.7.10.arch1-1, however then the Xserver wouldn't start up.

Then I downgraded the nvidia driver to 450.57-4 as well, and the suspend started working like before.

Symptoms:

When I run `systemctl suspend` from i3wm, the screen turns off and back on almost instantly afterwards and I see this in `journalctl`:

Aug 06 23:35:23 kernel: PM: suspend entry (deep)
Aug 06 23:35:23 kernel: Filesystems sync: 0.011 seconds
Aug 06 23:35:26 kernel: Freezing user space processes ... (elapsed 0.001 seconds) done.
Aug 06 23:35:26 kernel: OOM killer disabled.
Aug 06 23:35:26 kernel: Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
Aug 06 23:35:26 kernel: printk: Suspending console(s) (use no_console_suspend to debug)
Aug 06 23:35:26 kernel: i801_smbus 0000:00:1f.4: Timeout waiting for interrupt!
Aug 06 23:35:26 kernel: i801_smbus 0000:00:1f.4: Transaction timeout
Aug 06 23:35:26 kernel: rmi4_f03 rmi4-00.fn03: rmi_f03_pt_write: Failed to write to F03 TX register (-110).
Aug 06 23:35:26 kernel: psmouse serio2: Failed to disable mouse on rmi4-00.fn03/serio0
Aug 06 23:35:26 kernel: i801_smbus 0000:00:1f.4: Timeout waiting for interrupt!
Aug 06 23:35:26 kernel: i801_smbus 0000:00:1f.4: Transaction timeout
Aug 06 23:35:26 kernel: rmi4_f03 rmi4-00.fn03: rmi_f03_pt_write: Failed to write to F03 TX register (-110).
Aug 06 23:35:26 kernel: i801_smbus 0000:00:1f.4: Timeout waiting for interrupt!
Aug 06 23:35:26 kernel: i801_smbus 0000:00:1f.4: Transaction timeout
Aug 06 23:35:26 kernel: rmi4_f03 rmi4-00.fn03: rmi_f03_pt_write: Failed to write to F03 TX register (-110).
Aug 06 23:35:26 kernel: i801_smbus 0000:00:1f.4: Timeout waiting for interrupt!
Aug 06 23:35:26 kernel: i801_smbus 0000:00:1f.4: Transaction timeout
Aug 06 23:35:26 kernel: rmi4_f01 rmi4-00.fn01: Failed to write sleep mode: -110.
Aug 06 23:35:26 kernel: rmi4_f01 rmi4-00.fn01: Suspend failed with code -110.
Aug 06 23:35:26 kernel: rmi4_physical rmi4-00: Failed to suspend functions: -110
Aug 06 23:35:26 kernel: rmi4_smbus 0-002c: Failed to suspend device: -110
Aug 06 23:35:26 kernel: PM: dpm_run_callback(): rmi_smb_suspend+0x0/0x30 [rmi_smbus] returns -110
Aug 06 23:35:26 kernel: PM: Device 0-002c failed to suspend: error -110
Aug 06 23:35:26 kernel: PM: Some devices failed to suspend, or early wake event detected
Aug 06 23:35:26 kernel: acpi LNXPOWER:09: Turning OFF
Aug 06 23:35:26 kernel: acpi LNXPOWER:04: Turning OFF
Aug 06 23:35:26 kernel: OOM killer enabled.
Aug 06 23:35:26 kernel: Restarting tasks ... done.
Aug 06 23:35:26 kernel: PM: suspend exit
Aug 06 23:35:26 kernel: PM: suspend entry (s2idle)
Aug 06 23:35:26 kernel: Filesystems sync: 0.014 seconds
Aug 06 23:35:26 kernel: i801_smbus 0000:00:1f.4: Timeout waiting for interrupt!
Aug 06 23:35:26 kernel: i801_smbus 0000:00:1f.4: Transaction timeout
Aug 06 23:35:26 kernel: rmi4_f03 rmi4-00.fn03: rmi_f03_pt_write: Failed to write to F03 TX register (-110).
Aug 06 23:35:26 kernel: i801_smbus 0000:00:1f.4: Timeout waiting for interrupt!
Aug 06 23:35:26 kernel: i801_smbus 0000:00:1f.4: Transaction timeout
Aug 06 23:35:26 kernel: rmi4_physical rmi4-00: rmi_driver_clear_irq_bits: Failed to change enabled interrupts!
Aug 06 23:35:27 kernel: i801_smbus 0000:00:1f.4: Timeout waiting for interrupt!
Aug 06 23:35:27 kernel: i801_smbus 0000:00:1f.4: Transaction timeout
Aug 06 23:35:27 kernel: i801_smbus 0000:00:1f.4: Timeout waiting for interrupt!
Aug 06 23:35:27 kernel: i801_smbus 0000:00:1f.4: Transaction timeout
Aug 06 23:35:27 kernel: rmi4_physical rmi4-00: rmi_driver_set_irq_bits: Failed to change enabled interrupts!
Aug 06 23:35:27 kernel: psmouse: probe of serio2 failed with error -1
Aug 06 23:35:30 kernel: Freezing user space processes ... (elapsed 0.001 seconds) done.
Aug 06 23:35:30 kernel: OOM killer disabled.
Aug 06 23:35:30 kernel: Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
Aug 06 23:35:30 kernel: printk: Suspending console(s) (use no_console_suspend to debug)
Aug 06 23:35:30 kernel: i801_smbus 0000:00:1f.4: Timeout waiting for interrupt!
Aug 06 23:35:30 kernel: i801_smbus 0000:00:1f.4: Transaction timeout
Aug 06 23:35:30 kernel: rmi4_f01 rmi4-00.fn01: Failed to write sleep mode: -110.
Aug 06 23:35:30 kernel: rmi4_f01 rmi4-00.fn01: Suspend failed with code -110.
Aug 06 23:35:30 kernel: rmi4_physical rmi4-00: Failed to suspend functions: -110
Aug 06 23:35:30 kernel: rmi4_smbus 0-002c: Failed to suspend device: -110
Aug 06 23:35:30 kernel: PM: dpm_run_callback(): rmi_smb_suspend+0x0/0x30 [rmi_smbus] returns -110
Aug 06 23:35:30 kernel: PM: Device 0-002c failed to suspend: error -110
Aug 06 23:35:30 kernel: PM: Some devices failed to suspend, or early wake event detected
Aug 06 23:35:30 kernel: OOM killer enabled.
Aug 06 23:35:30 kernel: Restarting tasks ... done.
Aug 06 23:35:30 systemd-sleep[2444]: Failed to suspend system. System resumed again: Connection timed out
Aug 06 23:35:30 kernel: PM: suspend exit
Aug 06 23:35:30 kernel: i801_smbus 0000:00:1f.4: Timeout waiting for interrupt!
Aug 06 23:35:30 kernel: i801_smbus 0000:00:1f.4: Transaction timeout
Aug 06 23:35:30 systemd[1]: systemd-suspend.service: Main process exited, code=exited, status=1/FAILURE
Aug 06 23:35:30 systemd[1]: systemd-suspend.service: Failed with result 'exit-code'.
Aug 06 23:35:30 systemd[1]: Failed to start Suspend.
Aug 06 23:35:30 systemd[1]: Dependency failed for Suspend.
Aug 06 23:35:30 systemd[1]: suspend.target: Job suspend.target/start failed with result 'dependency'.
Aug 06 23:35:30 audit[1]: SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=systemd-suspend comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=failed'
Aug 06 23:35:30 systemd-logind[998]: Operation 'sleep' finished.
Aug 06 23:35:30 systemd[1]: Stopped target Sleep.

I've tried following the instructions from https://wiki.archlinux.org/index.php/Po … om_suspend up to no avail, but this seems like a different issue.

Last edited by jeremija (2020-08-07 06:00:28)

Offline

#2 2020-08-07 07:42:05

rojaro
Member
Registered: 2013-03-09
Posts: 1

Re: kernel / nvidia driver upgrade broke suspend on ThinkPad X1 Extreme G1

The latest drivers introduced new a few new systemd service files which you need to be enabled on Nvidia machines:

systemctl enable nvidia-hibernate.service
systemctl enable nvidia-persistenced.service
systemctl enable nvidia-resume.service
systemctl enable nvidia-suspend.service

After a reboot your suspend/resume/hibernation issues should be gone.

Last edited by rojaro (2020-08-07 07:43:03)

Offline

#3 2020-08-07 09:03:29

V1del
Forum Moderator
Registered: 2012-10-16
Posts: 21,645

Re: kernel / nvidia driver upgrade broke suspend on ThinkPad X1 Extreme G1

It doesn't look like a nvidia driver/device failure though. And the fact that they can just downgrade the kernel (... the nvidia package version change is just a kernel compat rebuild, nothing of relevance changed here) rather points to a kernel regression.

@jeremija I'd say the easiest thing for plain testing purposes here is opting for the 5.8 kernel and corresponding nvidia package from testing to check whether the issue might've already been fixed. Otherwise you will need to bisect the kernel to identify the offending commit. There were a lot of input/i2c bus changes in the 5.7.11 kernel and the errors you are getting match with issues in that department, so I'm suspecting something there biting itself with your suspension attempt.

For some guidance on how to properly set up bisecting the kernel loqs often has some good instructions you can relevantly adapt for the kernel versions you're looking at.

Offline

#4 2020-08-19 06:46:33

jeremija
Member
Registered: 2016-10-09
Posts: 9

Re: kernel / nvidia driver upgrade broke suspend on ThinkPad X1 Extreme G1

Thanks for your replies!

@V1del, I didn't have the time to do the kernel bisect as this is a business machine, unfortunately. I see that the 5.8 kernel was released, just tested it but the issue persists.

I also tried the linux-lts (and the nvidia-lts) package and I'm still experiencing this issue.

@rojaro, enabling these services and rebooting did not help.

Last edited by jeremija (2020-08-19 06:50:18)

Offline

#5 2020-08-19 06:51:30

jeremija
Member
Registered: 2016-10-09
Posts: 9

Re: kernel / nvidia driver upgrade broke suspend on ThinkPad X1 Extreme G1

@V1del - if I do bisect the kernel, I assume I'd need to recompile the nvidia driver as well?

Offline

#6 2020-08-19 07:16:21

jeremija
Member
Registered: 2016-10-09
Posts: 9

Re: kernel / nvidia driver upgrade broke suspend on ThinkPad X1 Extreme G1

I am able to suspend when I do the following before suspending:

sudo rmmod rmi_bus

# not sure if this line is needed
sudo rmod rmi_core

This disables my touchpad and trackpoint, but I'm able to suspend. Perhaps I can write a script to do this automatically before a suspend.

After resuming, I had to do the following to get the touchpad/trackpoint functionality to work:

sudo modprobe rmi_bus

# and the following to re-enable the touchpad/trackpoint
sudo modprobe -r psmouse
sudo modprobe psmouse

Last edited by jeremija (2020-08-19 07:35:00)

Offline

#7 2020-08-19 07:31:37

jeremija
Member
Registered: 2016-10-09
Posts: 9

Re: kernel / nvidia driver upgrade broke suspend on ThinkPad X1 Extreme G1

Here's my script that fixes the suspend issue:

#!/bin/sh

if [ "${1}" == "pre" ]; then
  modprobe -r rmi_bus
  modprobe -r psmouse
elif [ "${1}" == "post" ]; then
  modprobe rmi_bus
  modprobe psmouse
fi

I saved it as /usr/lib/systemd/system-sleep/suspend-fix.sh

Last edited by jeremija (2020-08-19 07:31:58)

Offline

Board footer

Powered by FluxBB