You are not logged in.

#1 2014-04-23 03:14:34

semidog
Member
Registered: 2014-04-21
Posts: 3

[SOLVED] Kernel 3.14.X suspend/hibernate broken

Hi,

Suspend and hibernate are broken on my H/W since I upgraded to kernel 3.14. Suspend worked fine on all 3.X kernels up to 3.13. The error I get is this:

[ 3228.926444] PM: Syncing filesystems ... done.
[ 3228.975076] PM: Preparing system for mem sleep
[ 3229.654850] Freezing user space processes ... (elapsed 0.002 seconds) done.
[ 3229.657505] Freezing remaining freezable tasks ... (elapsed 5.171 seconds) done.
[ 3234.832849] PM: Entering mem sleep
[ 3234.832913] Suspending console(s) (use no_console_suspend to debug)
[ 3234.833762] sd 4:0:0:0: [sdc] Synchronizing SCSI cache
[ 3234.833841] serial 00:09: disable failed
[ 3234.833853] dpm_run_callback(): pnp_bus_suspend+0x0/0x20 returns -5
[ 3234.833857] PM: Device 00:09 failed to suspend: error -5
[ 3234.833865] sd 3:0:0:0: [sdb] Synchronizing SCSI cache
[ 3234.834061] sd 3:0:0:0: [sdb] Stopping disk
[ 3234.834986] sd 4:0:0:0: [sdc] Stopping disk
[ 3235.417070] PM: Some devices failed to suspend, or early wake event detected
[ 3235.417673] sd 3:0:0:0: [sdb] Starting disk
[ 3235.417694] sd 4:0:0:0: [sdc] Starting disk

Device 00:09 is a SATA controller:

<snip>
00:08.0 PCI bridge: NVIDIA Corporation MCP78S [GeForce 8200] PCI Bridge (rev a1)
00:09.0 SATA controller: NVIDIA Corporation MCP78S [GeForce 8200] AHCI Controller (rev a2)
00:0a.0 Ethernet controller: NVIDIA Corporation MCP77 Ethernet (rev a2)
<snip>

I tried all the work-arounds advised on this page:

https://bugzilla.kernel.org/show_bug.cgi?id=48951

It's not the same controller, but from the same stable. But either way, the work-arounds didn't help.

My next step involves building a custom kernel after rolling back this specific kernel commit :

http://lkml.iu.edu//hypermail/linux/ker … 05119.html

Please let me know if I'm on the right track, or am I missing something basic...

Thanks.
S

Last edited by semidog (2014-05-07 17:59:09)

Offline

#2 2014-04-23 14:40:27

teckk
Member
Registered: 2013-02-21
Posts: 519

Re: [SOLVED] Kernel 3.14.X suspend/hibernate broken

I have a nvidia C61 [GeForce 7025 / nForce 630a] machine that kernel 3.14 broke suspend on. I haven't spent a lot of time trying to solve it yet so I rolled back to 3.13.7 for now. That will give you more time to keep looking.

That would be something like:

pacman -U /var/cache/pacman/pkg/linux-3.13.7-1-x86_64.pkg.tar.xz

Maybe someone else knows more.

Offline

#3 2014-04-24 23:17:59

cupantae
Member
Registered: 2010-03-15
Posts: 18

Re: [SOLVED] Kernel 3.14.X suspend/hibernate broken

Confirmed for

00:04.0 PCI bridge: NVIDIA Corporation MCP61 PCI bridge (rev a1)

It's a motherboard with NVIDIA chipset, as I'm sure yours is. I haven't rolled back yet (other dependencies mean I haven't been bothered), but I've been quite sure it's as of 3.14 too.


By the way, I didn't read any of the posts above me.

Offline

#4 2014-05-04 19:02:53

Zephyr2084
Member
Registered: 2014-05-04
Posts: 2

Re: [SOLVED] Kernel 3.14.X suspend/hibernate broken

Hello,
I have the same exact problem; I think as well that the problem presented itself since I upgraded to 3.14 but I'm not 100% sure. In my case the device is 00:07, how can I find out exactly what it is?
I tried grepping '00:07' on the boot journal and this is what came up:

 [zephyr@BEN ~]$ journalctl --since=today | grep 00:07
mag 04 10:48:10 BEN kernel: pci 0000:00:07.0: [10de:0774] type 00 class 0x040300
mag 04 10:48:10 BEN kernel: pci 0000:00:07.0: reg 0x10: [mem 0xfbd78000-0xfbd7bfff]
mag 04 10:48:10 BEN kernel: pci 0000:00:07.0: PME# supported from D3hot D3cold
mag 04 10:48:10 BEN kernel: pci 0000:00:07.0: System wakeup disabled by ACPI
mag 04 10:48:10 BEN kernel: pnp 00:07: [dma 0 disabled]
mag 04 10:48:10 BEN kernel: pnp 00:07: Plug and Play ACPI device, IDs PNP0501 (active)
mag 04 10:48:10 BEN kernel: 00:07: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
mag 04 10:48:14 BEN kernel: input: HDA NVidia Front Headphone as /devices/pci0000:00/0000:00:07.0/sound/card0/input12
mag 04 10:48:14 BEN kernel: input: HDA NVidia Line Out as /devices/pci0000:00/0000:00:07.0/sound/card0/input11
mag 04 10:48:14 BEN kernel: input: HDA NVidia Line as /devices/pci0000:00/0000:00:07.0/sound/card0/input10
mag 04 10:48:14 BEN kernel: input: HDA NVidia Rear Mic as /devices/pci0000:00/0000:00:07.0/sound/card0/input9
mag 04 10:48:14 BEN kernel: input: HDA NVidia Front Mic as /devices/pci0000:00/0000:00:07.0/sound/card0/input8

From what I can tell it's a sound card problem.. What do you folks think?

Offline

#5 2014-05-05 02:00:16

semidog
Member
Registered: 2014-04-21
Posts: 3

Re: [SOLVED] Kernel 3.14.X suspend/hibernate broken

Ok, I've got a work-around of sorts.

First, the device which gave trouble was "00:09" in my case, and 00:07 in Zephyr's case is not PCI device 00:0X, but PNP device 00:0X. I was looking at the wrong bus.

This device is the UART 16550A serial port. How do I know this? Poke around /sys/bus/pnp/devices/00:0X.

I haven't yet looked into the kernel serial driver itself to figure out what's changed between 3.13 and 3.14.

The first step was to work around this device. Hardly anybody uses the 16550A anymore. Only two possible uses: Either some legacy hardware, or need serial console for kernel debugging. Neither directly apply to me, so I was more than happy to forgo the device entirely.

I tried to get udev to ignore this device by adding this rule:

KERNEL=="00:09", ACTION=="add", OPTIONS+="ignore_device"

This didn't work, because all this does is prevent udev from creating a ttySX for the device. The kernel driver for the device is still loaded.

Next, I tried to do an "echo disabled > /sys/bus/pnp/devices/00:09", but this gave me an "operation not permitted" because the device was apparently busy (really? The 90's called, they want their peripheral interface back). The driver "unbind" also gave me similar errors.

I booted into BIOS, and there was a setting to configure the the base address and IRQ for the serial device. This list also had a "Disabled" option. I selected that and on the next boot, the device 00:09 didn't even show up.

And suspend and resume worked like a charm!

I'll look into the kernel code and see what's changed recently in the serial driver, so we can have a more permanent fix for this.

Offline

#6 2014-05-06 01:35:30

cupantae
Member
Registered: 2010-03-15
Posts: 18

Re: [SOLVED] Kernel 3.14.X suspend/hibernate broken

Great work. Disabling the serial device in the BIOS worked for me too.

not PCI device 00:0X, but PNP device 00:0X

I had suspected something like this, since it never specifically said it was a pci device.

Might as well spell kernel correctly in the name of the thread if you're marking it as solved... wink


By the way, I didn't read any of the posts above me.

Offline

#7 2014-05-06 17:37:11

teckk
Member
Registered: 2013-02-21
Posts: 519

Re: [SOLVED] Kernel 3.14.X suspend/hibernate broken

Disabling serial port in BIOS fixes suspend here. Thanks.

uname -r
3.14.2-1-ARCH
lshw | grep -A3 serial
     *-serial             
          description: SMBus
          product: MCP61 SMBus
          vendor: NVIDIA Corporation

Offline

#8 2014-05-07 17:58:28

semidog
Member
Registered: 2014-04-21
Posts: 3

Re: [SOLVED] Kernel 3.14.X suspend/hibernate broken

It's great that the same problem plagues all of us smile

Anyway, a minor update to the workaround. The disabling in BIOS is a cumbersome solution. If you suddenly dig up your dial-up modem and want to hear the screeching for nostalgia's sake, you should not need to reboot your box to have to do that.

As an alternate, you could do this: create a file /etc/tmpfiles.d/disable-serial.conf with the following contents:

# Action  Path                               Mode UID GID Age Arg
  w       /sys/bus/pnp/drivers/serial/unbind -    -   -   -   00:09

Replace 00:09 with the value specific to your system.

This will unload the serial driver after boot. If you wish to enable the device again, use this:

echo 00:09 >  /sys/bus/pnp/drivers/serial/bind

I'm marking this thread as Solved (and fixing the typo in the subject. Funny, never noticed it until it was pointed out smile

Offline

#9 2014-06-01 08:58:49

nebojsa
Member
Registered: 2014-06-01
Posts: 1

Re: [SOLVED] Kernel 3.14.X suspend/hibernate broken

If you do use serial ports on regular basis, you can try with a file 80serial.
Put it in /usr/lib/systemd/system-sleep/ if you use systemd/gnome, or in /etc/pm/sleep.d, if you use pm-utils

#!/bin/sh
# on 3.14. and newer during suspend kernel tries to disable serial ports
# at least with NVIDIA Corporation MCP78S chip this fails, and thus suspend fails
# unbind serial driver before suspend

# adjust address for your system
adr=00:0a

suspend_serial()
{
  printf "Unbinding serial ..."
  if echo $adr > /sys/bus/pnp/drivers/serial/unbind ; then
    echo "OK"
  else
    echo "Failed"
  fi
}

resume_serial()
{
  printf "Binding serial..."
  if echo $adr > /sys/bus/pnp/drivers/serial/bind ; then
    echo "OK"
  else
    echo "Failed"
  fi
}

case "$1" in
  pre|hibernate|suspend) suspend_serial ;;
  post|thaw|resume) resume_serial ;;
  *) exit $NA ;;
esac

Offline

Board footer

Powered by FluxBB