X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=kernel%2Fpower%2Fconsole.c;h=623786d4415950b08c8fb6f3461bfb8c86c152b2;hb=16c70f8c1b54b61c3b951b6fb220df250fe09b32;hp=6e039ca13fd3cca71c28cfac8cf4fd1e4941a751;hpb=43bc926fffd92024b46cafaf7350d669ba9ca884;p=linux-2.6.git diff --git a/kernel/power/console.c b/kernel/power/console.c index 6e039ca13..623786d44 100644 --- a/kernel/power/console.c +++ b/kernel/power/console.c @@ -9,20 +9,42 @@ #include #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