Hi, in the light of https://bugzilla.novell.com/show_bug.cgi?id=230470 we found out that the SNAPSHOT_PMOPS syscall does not handle non-ACPI systems gracefully.
Pavel did the first oops-preventing patch, i hacked it up a bit. Any comments before i send it to lkml? Better return values? diff -rup linux-2.6.20-rc6.orig/kernel/power/main.c linux-2.6.20-rc6/kernel/power/main.c --- linux-2.6.20-rc6.orig/kernel/power/main.c 2007-02-01 01:07:38.000000000 +0100 +++ linux-2.6.20-rc6/kernel/power/main.c 2007-02-01 22:24:41.000000000 +0100 @@ -116,7 +116,10 @@ int suspend_enter(suspend_state_t state) printk(KERN_ERR "Some devices failed to power down\n"); goto Done; } - error = pm_ops->enter(state); + if (pm_ops && pm_ops->enter) + error = pm_ops->enter(state); + else + error = -ENODEV; device_power_up(); Done: local_irq_restore(flags); Only in linux-2.6.20-rc6/kernel/power: main.c.orig diff -rup linux-2.6.20-rc6.orig/kernel/power/user.c linux-2.6.20-rc6/kernel/power/user.c --- linux-2.6.20-rc6.orig/kernel/power/user.c 2007-02-01 01:07:38.000000000 +0100 +++ linux-2.6.20-rc6/kernel/power/user.c 2007-02-01 22:25:48.000000000 +0100 @@ -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 = -ENODEV; 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 = -ENODEV; break; case PMOPS_FINISH: - if (pm_ops && pm_ops->finish) { + if (pm_ops && pm_ops->finish) pm_ops->finish(PM_SUSPEND_DISK); - } + else + error = -ENODEV; break; default: -- Stefan Seyfried QA / R&D Team Mobile Devices | "Any ideas, John?" SUSE LINUX Products GmbH, Nürnberg | "Well, surrounding them's out." ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier. Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ Suspend-devel mailing list Suspend-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/suspend-devel