Suspend/resume fails after kernel version 4.19
This is a regression that first occurred on a machine here after updating from Ubuntu 18.04 to Ubuntu 20.04 last year (Kernel 4.15 -> 5.4).
Basically with any kernel ]4.19, 5.15] that I have tried to far, the machine will fail to resume after a small (< 10) number of suspensions.
The symptoms when trying to wake the machine are usually these (there are variations, but this the is most common scenario):
- hardware comes alive (fans, LEDs)
- screen remains black
- keyboard is dead (e.g. Numlock LED does not react to key)
- machine (sometimes) still pingable, but cannot SSH into it
- nothing in journalctl after the suspension
My original bug report against Ubuntu is here (https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2025124).
I have since tried to bisect the kernel changes in that interval, and it came down to this change: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=170d13ca3a2fdaaa0283399247631b76b441cca2
My understanding is that with this change, memcpy_{to|from}io
actually have dedicated implementations, whereas before, they simply
deferred to the kernel's generic memcpy.
In Ubuntu's 5.15.0-117 kernel (based of 5.15.149), I have reverted all
uses of memcpy_{to|from}io
in nouveau to the old behaviour (using
generic kernel memcpy), and this indeed seems to have fixed my issue.