Messages in this thread Patch in this message | | | From | "P. Christeas" <> | Subject | [PATCH] 2.6.0-test4: Trivial /sys/power/state patch, sleep status report | Date | Tue, 26 Aug 2003 01:25:30 +0300 |
| |
Just found out that by 'echo sth_wrong > /sys/power/state' the kernel would oops in a fatal way (no clean exit from there). The oops suggested that the code would enter an invalid fn.
You may apply the included patch to solve the bug. IMHO doing a clean exit is much preferrable than having BUG() there.
In the patch I also added some double checking of the fn. You may disable that (although sleeping is a one time fn which won't be slowed dow by that).
Status report: (HP Omnibook XE3GC) S1 ('standby') works S3, S4bios will suspend, but NOT resume. that's the same as previous kernels I've tested so far.
I still have the ALSA-artsd deadlock I reported w. -test1 (in short, artsd resumes from S1 in a 'disk I/O' process state, which deadlocks maestro3) see: http://marc.theaimsgroup.com/?l=linux-kernel&m=105836807605512&w=2
diff -Bbur /diskb/users/panos/linux-off/kernel/power/main.c /usr/src/linux/kernel/power/main.c --- /diskb/users/panos/linux-off/kernel/power/main.c 2003-08-23 12:13:17.000000000 +0300 +++ /usr/src/linux/kernel/power/main.c 2003-08-26 00:59:34.000000000 +0300 @@ -304,6 +304,20 @@ goto Unlock; } +# if 1 /* disable once we're sure we got it right */ + /* double - check code */ + if (!s ) { + printk (KERN_ERR "Invalid suspend state %d\n",state); + error = -EINVAL; + goto Unlock ; + } + if (! s->fn) { + printk(KERN_ERR "Invalid fn for suspend state %d\n", state ); + error = -EINVAL ; + goto Unlock; + } +# endif + pr_debug("PM: Preparing system for suspend.\n"); if ((error = suspend_prepare(state))) goto Unlock; @@ -500,7 +514,7 @@ if (s->name && !strcmp(buf,s->name)) break; } - if (s) + if ( (s) && (state < PM_SUSPEND_MAX) ) error = enter_state(state); else error = -EINVAL; | |