From: Stefan Seyfried Date: Thu, 7 Dec 2006 04:34:21 +0000 (-0800) Subject: [PATCH] swsusp: fix platform mode X-Git-Tag: v2.6.20-rc1~145^2^2~281 X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=8a05aac2631aa0e6494d9dc990f8c68ed8b8fde7;p=~emulex%2Finfiniband.git [PATCH] swsusp: fix platform mode At some point after 2.6.13, in-kernel software suspend got "incomplete" for the so-called "platform" mode. pm_ops->prepare() is never called. A visible sign of this is the "moon" light on thinkpads not flashing during suspend. Fix by readding the pm_ops->prepare call during suspend. Signed-off-by: Stefan Seyfried Acked-by: "Rafael J. Wysocki" Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/kernel/power/disk.c b/kernel/power/disk.c index d79feeb4545..f5079231383 100644 --- a/kernel/power/disk.c +++ b/kernel/power/disk.c @@ -29,6 +29,22 @@ char resume_file[256] = CONFIG_PM_STD_PARTITION; dev_t swsusp_resume_device; sector_t swsusp_resume_block; +/** + * platform_prepare - prepare the machine for hibernation using the + * platform driver if so configured and return an error code if it fails + */ + +static inline int platform_prepare(void) +{ + int error = 0; + + if (pm_disk_mode == PM_DISK_PLATFORM) { + if (pm_ops && pm_ops->prepare) + error = pm_ops->prepare(PM_SUSPEND_DISK); + } + return error; +} + /** * power_down - Shut machine down for hibernate. * @mode: Suspend-to-disk mode @@ -91,9 +107,15 @@ static int prepare_processes(void) goto thaw; } + error = platform_prepare(); + if (error) + goto thaw; + /* Free memory before shutting down devices. */ if (!(error = swsusp_shrink_memory())) return 0; + + platform_finish(); thaw: thaw_processes(); enable_cpus: