lkml.org 
[lkml]   [2006]   [Feb]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH -mm] swsusp/pm: refuse to suspend devices if wrong console is active
Date
1) Remove the console-switching code from the suspend part of the swsusp
userland interface and let the userland tools switch the console.

2) It is unsafe to suspend devices if the hardware is controlled by X. Add
an extra check to prevent this from happening.


Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Pavel Machek <pavel@suse.cz>
---
drivers/base/power/suspend.c | 9 +++++++++
kernel/power/user.c | 3 ---
2 files changed, 9 insertions(+), 3 deletions(-)

Index: linux-2.6.16-rc3-mm1/kernel/power/user.c
===================================================================
--- linux-2.6.16-rc3-mm1.orig/kernel/power/user.c
+++ linux-2.6.16-rc3-mm1/kernel/power/user.c
@@ -138,12 +138,10 @@ static int snapshot_ioctl(struct inode *
if (data->frozen)
break;
down(&pm_sem);
- pm_prepare_console();
disable_nonboot_cpus();
if (freeze_processes()) {
thaw_processes();
enable_nonboot_cpus();
- pm_restore_console();
error = -EBUSY;
}
up(&pm_sem);
@@ -157,7 +155,6 @@ static int snapshot_ioctl(struct inode *
down(&pm_sem);
thaw_processes();
enable_nonboot_cpus();
- pm_restore_console();
up(&pm_sem);
data->frozen = 0;
break;
Index: linux-2.6.16-rc3-mm1/drivers/base/power/suspend.c
===================================================================
--- linux-2.6.16-rc3-mm1.orig/drivers/base/power/suspend.c
+++ linux-2.6.16-rc3-mm1/drivers/base/power/suspend.c
@@ -8,6 +8,9 @@
*
*/

+#include <linux/vt_kern.h>
+#include <linux/kbd_kern.h>
+#include <linux/console.h>
#include <linux/device.h>
#include "../base.h"
#include "power.h"
@@ -82,6 +85,12 @@ int device_suspend(pm_message_t state)
{
int error = 0;

+ /* It is unsafe to suspend devices while X has control of the
+ * hardware. Make sure we are running on a kernel-controlled console.
+ */
+ if (vc_cons[fg_console].d->vc_mode != KD_TEXT)
+ return -EINVAL;
+
down(&dpm_sem);
down(&dpm_list_sem);
while (!list_empty(&dpm_active) && error == 0) {
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
\
 
 \ /
  Last update: 2006-02-19 23:29    [W:0.040 / U:1.184 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site