I use IntelPro/100 as second lan card in my fairly old machine.
Since kernel 2.6.29 I'm having problem suspending and resuming (using native kernel hibernation) if the card is enabled.
If the interface is brought down and module removed, hibernation is successful.
At first, the hibernation suspending takes forever, however it seems that there are indeed some timeouts that run out, and it seems
to be able to move to next stage. E.g. at some point sysrq doesn't work, but after few minutes it does. However suspending never finishes and never powers down.
Sometimes the hibernation code manages to write image to the swap, so at restart kernel tries to resume the session, and hangs forever.
To this report I attach the log from boot and single suspend using "pm_test=devices" debug mechanism.
This test passes successfully, however new attempt to do "pm_test=devices" hangs the system. The system also hangs if I do
rmmod e100 after one "pm_test=devices".
I have loaded the e100 module with the option debug=10, so I hope it have all needed debug info.
While checking the logs I noticed that firmware loading is failing. It seems that udev is called and it tries to run firmware.sh script that is supposed to feed the firmware images. I have changed the script to display more info, in case script is given wrong data:
err /sys$DEVPATH/loading $FIRMWARE
ls -R /sys/devices/pci0000:00/0000:00:09.0/firmware/
After a number of tries I got to the conclusion that the the resuming module tries to load the firmware, however the userland process hangs at it (probably because all userland is still frozen). The module timeouts and fails at firmware loading. Then later when the userland is enabled the firmware.sh script is run but the directory/file it have to work are already removed.
I attach log file with /sys/class/firmware/timeout set to 300, this produces hang check verbose backtraces.
While there are indeed serious firmware design flaws, this doesn't explain the hang at suspending(!!), or the fact
that e100 always report success on resume even when the e100_open() function fails due to not-found firmware.