ACPI sleep: check error values and disable it on SMP

Pavel Machek
2003-06-08T20:38:23Z

Hi!

Wakeup is hard to do on SMP, and freezer_processes is just not ready
to work on SMP machine. As I have no SMP (hint hint ;-), it is better
to disable it.

ACPI should really really check if freezing processes worked, and
handle failure. Please apply,
Pavel

--- linux-cvs.clean/drivers/acpi/sleep/main.c 2003-02-28 10:23:47.000000000 -0800
+++ linux-cvs/drivers/acpi/sleep/main.c 2003-06-08 14:39:03.000000000 -0700
@@ -214,6 +214,11 @@
{
acpi_status status;

+#ifdef CONFIG_SMP
+ /* Suspend is hard to get right on SMP. */
+ return AE_ERROR;
+#endif
+
/* get out if state is invalid */
if (state < ACPI_STATE_S1 || state > ACPI_STATE_S5)
return AE_ERROR;
@@ -226,7 +231,10 @@
* TBD: S1 can be done without device_suspend. Make a CONFIG_XX
* to handle however when S1 failed without device_suspend.
*/
- freeze_processes(); /* device_suspend needs processes to be stopped */
+ if (freeze_processes()) {
+ thaw_processes();
+ return AE_ERROR; /* device_suspend needs processes to be stopped */
+ }

/* do we have a wakeup address for S2 and S3? */
/* Here, we support only S4BIOS, those we set the wakeup address */