On Friday, 18 of April 2008, Rafael J. Wysocki wrote: > On Friday, 18 of April 2008, Rafael J. Wysocki wrote: > > On Friday, 18 of April 2008, Alan Stern wrote: > > > On Thu, 17 Apr 2008, Andrew Morton wrote: > > > > > > > But this: > > > > > > > > <cold boot> > > > > <suspend-to-ram> > > > > <resume-from-ram> > > > > <suspend-to-disk> > > > > <resume-from-disk> > > > > > > > > hangs at the end of resume-from-disk. > > > > > > > > > > > > During the suspend-to-disk I saw: > > > > > > > > ipw2200: Radio Frequency Kill Switch is On: > > > > Kill switch must be turned off for wireless networking to work. > > > > PM: Device usb1 failed to (unknown PM event): error -113 > > > > PM: Device usb2 failed to (unknown PM event): error -113 > > > > PM: Device usb3 failed to (unknown PM event): error -113 > > > > PM: Device usb4 failed to (unknown PM event): error -113 > > > > > > These -113 errors can be ignored. They are fallout from the recent > > > conversion of the driver core's suspend/resume API. Matching changes > > > have not yet been added to the USB core. > > > > > > The "(unknown PM event)" strings look like a bug, though. > > > > Yes, it does. > > > > I'm trying to figure this out. > > This particular problem should be fixed by the appended patch. The following patch is also necessary to make hibernation work as documented in pm.h. Thanks, Rafael --- From: Rafael J. Wysocki <rjw@xxxxxxx> Make hibernation work as documented in include/linux/pm.h . In pm.h it is documented that device_power_up() and device_resume() will be called with PMSG_RECOVER if the creation of a hibernation image fails or the restoration of memory contents from a hibernation image fails. Otherwise, it should be called either with PMSG_THAW or with PMSG_RESTORE, depending on the context. Make that happen. Signed-off-by: Rafael J. Wysocki <rjw@xxxxxxx> --- kernel/power/disk.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) Index: linux-2.6/kernel/power/disk.c =================================================================== --- linux-2.6.orig/kernel/power/disk.c +++ linux-2.6/kernel/power/disk.c @@ -225,7 +225,8 @@ static int create_image(int platform_mod /* NOTE: device_power_up() is just a resume() for devices * that suspended with irqs off ... no overall powerup. */ - device_power_up(in_suspend ? PMSG_RECOVER : PMSG_RESTORE); + device_power_up(in_suspend ? + (error ? PMSG_RECOVER : PMSG_THAW) : PMSG_RESTORE); Enable_irqs: local_irq_enable(); device_pm_unlock(); @@ -282,7 +283,8 @@ int hibernation_snapshot(int platform_mo Finish: platform_finish(platform_mode); Resume_devices: - device_resume(in_suspend ? PMSG_RECOVER : PMSG_RESTORE); + device_resume(in_suspend ? + (error ? PMSG_RECOVER : PMSG_THAW) : PMSG_RESTORE); Resume_console: resume_console(); Close: @@ -332,7 +334,7 @@ static int resume_target_kernel(void) swsusp_free(); restore_processor_state(); touch_softlockup_watchdog(); - device_power_up(PMSG_THAW); + device_power_up(PMSG_RECOVER); Enable_irqs: local_irq_enable(); device_pm_unlock(); _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm