diff options
Diffstat (limited to 'drivers/char/vt.c')
-rw-r--r-- | drivers/char/vt.c | 20 |
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 | ||
2188 | void set_console(int nr) | 2188 | int 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 | ||
2194 | struct tty_driver *console_driver; | 2212 | struct tty_driver *console_driver; |