From 886c5952950ffed0e8ca3eb9efdc2728bfc144d3 Mon Sep 17 00:00:00 2001 From: "Rafael J. Wysocki" Date: Fri, 16 Mar 2007 13:38:06 -0800 Subject: [PATCH] swsusp: Fix resume error path in platform mode If swsusp is using the platform mode during the resume and the image cannot be read, the platform mode should be switched off before software_resume() returns. Make it happen. Signed-off-by: Rafael J. Wysocki Acked-by: Pavel Machek Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- kernel/power/disk.c | 1 + 1 file changed, 1 insertion(+) (limited to 'kernel/power/disk.c') diff --git a/kernel/power/disk.c b/kernel/power/disk.c index 406b20adb27a..a200c5fc42ee 100644 --- a/kernel/power/disk.c +++ b/kernel/power/disk.c @@ -251,6 +251,7 @@ static int software_resume(void) error = swsusp_read(); if (error) { swsusp_free(); + platform_finish(); goto Thaw; } -- cgit v1.2.2 From 94985134b7b46848267ed6b734320db01c974e72 Mon Sep 17 00:00:00 2001 From: "Rafael J. Wysocki" Date: Fri, 16 Mar 2007 13:38:06 -0800 Subject: [PATCH] swsusp: disable nonboot CPUs before entering platform suspend Prevent the WARN_ON() in arch/x86_64/kernel/acpi/sleep.c:init_low_mapping() from triggering by disabling nonboot CPUs before we finally enter the platform suspend. Signed-off-by: Rafael J. Wysocki Acked-by: Pavel Machek Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- kernel/power/disk.c | 1 + 1 file changed, 1 insertion(+) (limited to 'kernel/power/disk.c') diff --git a/kernel/power/disk.c b/kernel/power/disk.c index a200c5fc42ee..873cdf8ea5a4 100644 --- a/kernel/power/disk.c +++ b/kernel/power/disk.c @@ -58,6 +58,7 @@ static inline int platform_prepare(void) static void power_down(suspend_disk_method_t mode) { + disable_nonboot_cpus(); switch(mode) { case PM_DISK_PLATFORM: if (pm_ops && pm_ops->enter) { -- cgit v1.2.2 From 058560fbd70190ea6b50b5df4d814bc30911d06b Mon Sep 17 00:00:00 2001 From: Pavel Machek Date: Thu, 22 Mar 2007 00:11:25 -0800 Subject: [PATCH] fix extra BIOS invocation during resume It causes extra moon icons blinking on x60, and breaks at least two other systems. During resume, we do not know that "reboot"/"shutdown" method was used, so we assume "plaform" and call BIOS, anyway... This is 2.6.21 material, and should fix 2 or 3 regressions from 2.6.20. Signed-off-by: Pavel Machek Acked-by: "Rafael J. Wysocki" Cc: Adrian Bunk Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- kernel/power/disk.c | 8 -------- 1 file changed, 8 deletions(-) (limited to 'kernel/power/disk.c') diff --git a/kernel/power/disk.c b/kernel/power/disk.c index 873cdf8ea5a4..dee0ff40befd 100644 --- a/kernel/power/disk.c +++ b/kernel/power/disk.c @@ -241,18 +241,11 @@ static int software_resume(void) goto Done; } - error = platform_prepare(); - if (error) { - swsusp_free(); - goto Thaw; - } - pr_debug("PM: Reading swsusp image.\n"); error = swsusp_read(); if (error) { swsusp_free(); - platform_finish(); goto Thaw; } @@ -270,7 +263,6 @@ static int software_resume(void) enable_nonboot_cpus(); Free: swsusp_free(); - platform_finish(); device_resume(); resume_console(); Thaw: -- cgit v1.2.2 From 436ce71638eceb0f9dd7608157807c37b29c3db7 Mon Sep 17 00:00:00 2001 From: "Rafael J. Wysocki" Date: Tue, 27 Mar 2007 12:09:13 +0200 Subject: [PATCH] Revert "swsusp: disable nonboot CPUs before entering platform suspend" This reverts commit 94985134b7b46848267ed6b734320db01c974e72 and insteads removes the WARN_ON() that caused that commit in the first place. The problem is that we call disable_nonboot_cpus() in swsusp before powering down the system in order to avoid triggering the WARN_ON() in arch/x86_64/kernel/acpi/sleep.c:init_low_mapping() and this doesn't work well on Thomas' system. So instead, remove the WARN_ON() in arch/x86_64/kernel/acpi/sleep.c: init_low_mapping(), which triggers every time during the suspend to disk in the platform mode, as the potential problem it is related to doesn't seem to occur in practice. [ I think we might want to disallow the case of multiple users of that mm, or something. Normally, playing with the current process page tables on the current CPU should be fine as long as we don't have other threads using those tables at the same time.. Anyway, not pretty, but better than the warning or the lockup - Linus ] Signed-off-by: Rafael J. Wysocki Signed-off-by: Linus Torvalds --- kernel/power/disk.c | 1 - 1 file changed, 1 deletion(-) (limited to 'kernel/power/disk.c') diff --git a/kernel/power/disk.c b/kernel/power/disk.c index dee0ff40befd..aec19b063e3f 100644 --- a/kernel/power/disk.c +++ b/kernel/power/disk.c @@ -58,7 +58,6 @@ static inline int platform_prepare(void) static void power_down(suspend_disk_method_t mode) { - disable_nonboot_cpus(); switch(mode) { case PM_DISK_PLATFORM: if (pm_ops && pm_ops->enter) { -- cgit v1.2.2