aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/vt.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/char/vt.c')
-rw-r--r--drivers/char/vt.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/drivers/char/vt.c b/drivers/char/vt.c
index c3f8e383933b..0fefe2a28055 100644
--- a/drivers/char/vt.c
+++ b/drivers/char/vt.c
@@ -2185,10 +2185,28 @@ static void console_callback(struct work_struct *ignored)
2185 release_console_sem(); 2185 release_console_sem();
2186} 2186}
2187 2187
2188void set_console(int nr) 2188int set_console(int nr)
2189{ 2189{
2190 struct vc_data *vc = vc_cons[fg_console].d;
2191
2192 if (!vc_cons_allocated(nr) || vt_dont_switch ||
2193 (vc->vt_mode.mode == VT_AUTO && vc->vc_mode == KD_GRAPHICS)) {
2194
2195 /*
2196 * Console switch will fail in console_callback() or
2197 * change_console() so there is no point scheduling
2198 * the callback
2199 *
2200 * Existing set_console() users don't check the return
2201 * value so this shouldn't break anything
2202 */
2203 return -EINVAL;
2204 }
2205
2190 want_console = nr; 2206 want_console = nr;
2191 schedule_console_callback(); 2207 schedule_console_callback();
2208
2209 return 0;
2192} 2210}
2193 2211
2194struct tty_driver *console_driver; 2212struct tty_driver *console_driver;