Merge to Fedora kernel-2.6.18-1.2224_FC5 patched with stable patch-2.6.18.1-vs2.0...
[linux-2.6.git] / kernel / power / console.c
index 6e039ca..623786d 100644 (file)
@@ -9,20 +9,42 @@
 #include <linux/console.h>
 #include "power.h"
 
-extern int console_suspended;
+#if defined(CONFIG_VT) && defined(CONFIG_VT_CONSOLE)
+#define SUSPEND_CONSOLE        (MAX_NR_CONSOLES-1)
+
+static int orig_fgconsole, orig_kmsg;
 
 int pm_prepare_console(void)
 {
        acquire_console_sem();
-       console_suspended = 1;
-       system_state = SYSTEM_BOOTING;
+
+       orig_fgconsole = fg_console;
+
+       if (vc_allocate(SUSPEND_CONSOLE)) {
+         /* we can't have a free VC for now. Too bad,
+          * we don't want to mess the screen for now. */
+               release_console_sem();
+               return 1;
+       }
+
+       set_console(SUSPEND_CONSOLE);
+       release_console_sem();
+
+       if (vt_waitactive(SUSPEND_CONSOLE)) {
+               pr_debug("Suspend: Can't switch VCs.");
+               return 1;
+       }
+       orig_kmsg = kmsg_redirect;
+       kmsg_redirect = SUSPEND_CONSOLE;
        return 0;
 }
 
 void pm_restore_console(void)
 {
-       console_suspended = 0;
-       system_state = SYSTEM_RUNNING;
+       acquire_console_sem();
+       set_console(orig_fgconsole);
        release_console_sem();
+       kmsg_redirect = orig_kmsg;
        return;
 }
+#endif