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
[email protected]
https://lists.sourceforge.net/lists/listinfo/suspend-devel