From: Stefan Seyfried <[EMAIL PROTECTED]>

Fix the Oops occuring when SNAPSHOT_PMOPS or SNAPSHOT_S2RAM ioctl is called on
a system without pm_ops defined (eg. a non-ACPI kernel on x86 PC).

Signed-off-by: Stefan Seyfried <[EMAIL PROTECTED]>
Signed-off-by: Rafael J. Wysocki <[EMAIL PROTECTED]>
Acked-by: Pavel Machek <[EMAIL PROTECTED]>
Signed-off-by: Greg Kroah-Hartman <[EMAIL PROTECTED]>


---
 kernel/power/user.c |   19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

--- linux-2.6.20.1.orig/kernel/power/user.c
+++ linux-2.6.20.1/kernel/power/user.c
@@ -292,7 +292,7 @@ static int snapshot_ioctl(struct inode *
                        break;
                }
 
-               if (pm_ops->prepare) {
+               if (pm_ops && pm_ops->prepare) {
                        error = pm_ops->prepare(PM_SUSPEND_MEM);
                        if (error)
                                goto OutS3;
@@ -311,7 +311,7 @@ static int snapshot_ioctl(struct inode *
                        device_resume();
                }
                resume_console();
-               if (pm_ops->finish)
+               if (pm_ops && pm_ops->finish)
                        pm_ops->finish(PM_SUSPEND_MEM);
 
  OutS3:
@@ -322,20 +322,25 @@ static int snapshot_ioctl(struct inode *
                switch (arg) {
 
                case PMOPS_PREPARE:
-                       if (pm_ops->prepare) {
+                       if (pm_ops && pm_ops->prepare)
                                error = pm_ops->prepare(PM_SUSPEND_DISK);
-                       }
+                       else
+                               error = -ENOSYS;
                        break;
 
                case PMOPS_ENTER:
                        kernel_shutdown_prepare(SYSTEM_SUSPEND_DISK);
-                       error = pm_ops->enter(PM_SUSPEND_DISK);
+                       if (pm_ops && pm_ops->enter)
+                               error = pm_ops->enter(PM_SUSPEND_DISK);
+                       else
+                               error = -ENOSYS;
                        break;
 
                case PMOPS_FINISH:
-                       if (pm_ops && pm_ops->finish) {
+                       if (pm_ops && pm_ops->finish)
                                pm_ops->finish(PM_SUSPEND_DISK);
-                       }
+                       else
+                               error = -ENOSYS;
                        break;
 
                default:

--
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to