X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=drivers%2Fchar%2Fvt.c;h=0fefe2a28055e7844f043eef2dc00f5273e4c906;hb=b257bc051f06607beb3004d9a1c297085e728bec;hp=c3f8e383933bbb957ffd2f50982558eb5cf08b81;hpb=1174cf730179d8f029b9e93cb9a4d5bfb08d1202;p=powerpc.git diff --git a/drivers/char/vt.c b/drivers/char/vt.c index c3f8e38393..0fefe2a280 100644 --- a/drivers/char/vt.c +++ b/drivers/char/vt.c @@ -2185,10 +2185,28 @@ static void console_callback(struct work_struct *ignored) release_console_sem(); } -void set_console(int nr) +int set_console(int nr) { + struct vc_data *vc = vc_cons[fg_console].d; + + if (!vc_cons_allocated(nr) || vt_dont_switch || + (vc->vt_mode.mode == VT_AUTO && vc->vc_mode == KD_GRAPHICS)) { + + /* + * Console switch will fail in console_callback() or + * change_console() so there is no point scheduling + * the callback + * + * Existing set_console() users don't check the return + * value so this shouldn't break anything + */ + return -EINVAL; + } + want_console = nr; schedule_console_callback(); + + return 0; } struct tty_driver *console_driver;