mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Adrian Bunk <bunk@stusta.de>
Cc: Andrew Morton <akpm@osdl.org>, Pavel Machek <pavel@suse.cz>,
	linux-kernel@vger.kernel.org
Subject: Re: -mm: PM=y, VT=n doesn't compile
Date: Sat, 18 Mar 2006 17:04:44 +0100	[thread overview]
Message-ID: <200603181704.44873.rjw@sisk.pl> (raw)
In-Reply-To: <20060317171814.GO3914@stusta.de>

Hi,

On Friday 17 March 2006 18:18, Adrian Bunk wrote:
> swsusp-pm-refuse-to-suspend-devices-if-wrong-console-is-active.patch
> causes the following compile error with CONFIG_PM=y, CONFIG_VT=n:
> 
> <--  snip  -->
> 
> ...
>   LD      .tmp_vmlinux1
> drivers/built-in.o: In function `device_suspend': undefined reference to `fg_console'
> drivers/built-in.o: In function `device_suspend': undefined reference to `vc_cons'
> make: *** [.tmp_vmlinux1] Error 1
> 
> <--  snip  -->

Sorry, I overlooked your message yesterday.  [Actually Andrew turned my
attention to it by dropping the patch from -mm. ;-)]

Fixed version of the patch is appended.

Greetings,
Rafael

---
From: "Rafael J. Wysocki" <rjw@sisk.pl>

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>
---
 drivers/base/power/suspend.c |   17 +++++++++++++++++
 kernel/power/user.c          |    3 ---
 2 files changed, 17 insertions(+), 3 deletions(-)

Index: linux-2.6.16-rc6-mm2/drivers/base/power/suspend.c
===================================================================
--- linux-2.6.16-rc6-mm2.orig/drivers/base/power/suspend.c
+++ linux-2.6.16-rc6-mm2/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 <linux/kallsyms.h>
 #include <linux/pm.h>
@@ -65,6 +68,17 @@ int suspend_device(struct device * dev, 
 	return error;
 }
 
+#ifdef CONFIG_VT
+static inline int is_suspend_console_safe(void)
+{
+	/* It is unsafe to suspend devices while X has control of the
+	 * hardware. Make sure we are running on a kernel-controlled console.
+	 */
+	return vc_cons[fg_console].d->vc_mode == KD_TEXT;
+}
+#else
+#define is_suspend_console_safe()	1
+#endif
 
 /**
  *	device_suspend - Save state and stop all devices in system.
@@ -85,6 +99,9 @@ int device_suspend(pm_message_t state)
 {
 	int error = 0;
 
+	if (!is_suspend_console_safe())
+		return -EINVAL;
+
 	down(&dpm_sem);
 	down(&dpm_list_sem);
 	while (!list_empty(&dpm_active) && error == 0) {
Index: linux-2.6.16-rc6-mm2/kernel/power/user.c
===================================================================
--- linux-2.6.16-rc6-mm2.orig/kernel/power/user.c
+++ linux-2.6.16-rc6-mm2/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;

  parent reply	other threads:[~2006-03-18 16:05 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-03-17 17:18 Adrian Bunk
2006-03-18  1:50 ` Andrew Morton
2006-03-18 19:34   ` Rafael J. Wysocki
2006-03-18 16:04 ` Rafael J. Wysocki [this message]
2006-03-18 19:48   ` Andrew Morton
2006-03-18 19:58     ` Rafael J. Wysocki
2006-03-18 20:28       ` Rafael J. Wysocki
2006-03-19 18:47         ` Pavel Machek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200603181704.44873.rjw@sisk.pl \
    --to=rjw@sisk.pl \
    --cc=akpm@osdl.org \
    --cc=bunk@stusta.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pavel@suse.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®