mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-20 18:54:09 +08:00
Merge branch 'for-5.7-console-exit' of git://git.kernel.org/pub/scm/linux/kernel/git/pmladek/printk into tty-next
We need the console patches in here as well for futher work from Andy. * 'for-5.7-console-exit' of git://git.kernel.org/pub/scm/linux/kernel/git/pmladek/printk: console: Introduce ->exit() callback console: Don't notify user space when unregister non-listed console console: Avoid positive return code from unregister_console() console: Drop misleading comment console: Use for_each_console() helper in unregister_console() console: Drop double check for console_drivers being non-NULL console: Don't perform test for CON_BRL flag Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
commit
5f3a481324
@ -347,8 +347,6 @@ int braille_register_console(struct console *console, int index,
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!(console->flags & CON_BRL))
|
||||
return 0;
|
||||
if (!console_options)
|
||||
/* Only support VisioBraille for now */
|
||||
console_options = "57600o8";
|
||||
@ -371,8 +369,6 @@ int braille_unregister_console(struct console *console)
|
||||
{
|
||||
if (braille_co != console)
|
||||
return -EINVAL;
|
||||
if (!(console->flags & CON_BRL))
|
||||
return 0;
|
||||
unregister_keyboard_notifier(&keyboard_notifier_block);
|
||||
unregister_vt_notifier(&vt_notifier_block);
|
||||
braille_co = NULL;
|
||||
|
@ -148,6 +148,7 @@ struct console {
|
||||
struct tty_driver *(*device)(struct console *, int *);
|
||||
void (*unblank)(void);
|
||||
int (*setup)(struct console *, char *);
|
||||
int (*exit)(struct console *);
|
||||
int (*match)(struct console *, char *name, int idx, char *options);
|
||||
short flags;
|
||||
short index;
|
||||
|
@ -1772,9 +1772,6 @@ static void call_console_drivers(const char *ext_text, size_t ext_len,
|
||||
|
||||
trace_console_rcuidle(text, len);
|
||||
|
||||
if (!console_drivers)
|
||||
return;
|
||||
|
||||
for_each_console(con) {
|
||||
if (exclusive_console && con != exclusive_console)
|
||||
continue;
|
||||
@ -2653,19 +2650,17 @@ void register_console(struct console *newcon)
|
||||
struct console_cmdline *c;
|
||||
static bool has_preferred;
|
||||
|
||||
if (console_drivers)
|
||||
for_each_console(bcon)
|
||||
if (WARN(bcon == newcon,
|
||||
"console '%s%d' already registered\n",
|
||||
bcon->name, bcon->index))
|
||||
return;
|
||||
for_each_console(bcon) {
|
||||
if (WARN(bcon == newcon, "console '%s%d' already registered\n",
|
||||
bcon->name, bcon->index))
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* before we register a new CON_BOOT console, make sure we don't
|
||||
* already have a valid console
|
||||
*/
|
||||
if (console_drivers && newcon->flags & CON_BOOT) {
|
||||
/* find the last or real console */
|
||||
if (newcon->flags & CON_BOOT) {
|
||||
for_each_console(bcon) {
|
||||
if (!(bcon->flags & CON_BOOT)) {
|
||||
pr_info("Too late to register bootconsole %s%d\n",
|
||||
@ -2813,7 +2808,7 @@ EXPORT_SYMBOL(register_console);
|
||||
|
||||
int unregister_console(struct console *console)
|
||||
{
|
||||
struct console *a, *b;
|
||||
struct console *con;
|
||||
int res;
|
||||
|
||||
pr_info("%sconsole [%s%d] disabled\n",
|
||||
@ -2821,26 +2816,30 @@ int unregister_console(struct console *console)
|
||||
console->name, console->index);
|
||||
|
||||
res = _braille_unregister_console(console);
|
||||
if (res)
|
||||
if (res < 0)
|
||||
return res;
|
||||
if (res > 0)
|
||||
return 0;
|
||||
|
||||
res = 1;
|
||||
res = -ENODEV;
|
||||
console_lock();
|
||||
if (console_drivers == console) {
|
||||
console_drivers=console->next;
|
||||
res = 0;
|
||||
} else if (console_drivers) {
|
||||
for (a=console_drivers->next, b=console_drivers ;
|
||||
a; b=a, a=b->next) {
|
||||
if (a == console) {
|
||||
b->next = a->next;
|
||||
} else {
|
||||
for_each_console(con) {
|
||||
if (con->next == console) {
|
||||
con->next = console->next;
|
||||
res = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!res && (console->flags & CON_EXTENDED))
|
||||
if (res)
|
||||
goto out_disable_unlock;
|
||||
|
||||
if (console->flags & CON_EXTENDED)
|
||||
nr_ext_console_drivers--;
|
||||
|
||||
/*
|
||||
@ -2853,6 +2852,16 @@ int unregister_console(struct console *console)
|
||||
console->flags &= ~CON_ENABLED;
|
||||
console_unlock();
|
||||
console_sysfs_notify();
|
||||
|
||||
if (console->exit)
|
||||
res = console->exit(console);
|
||||
|
||||
return res;
|
||||
|
||||
out_disable_unlock:
|
||||
console->flags &= ~CON_ENABLED;
|
||||
console_unlock();
|
||||
|
||||
return res;
|
||||
}
|
||||
EXPORT_SYMBOL(unregister_console);
|
||||
|
Loading…
Reference in New Issue
Block a user