mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-10 07:00:48 +00:00
vt: Don't ignore unbind errors in vt_unbind
Otherwise the loop will never stop since we don't make any forward progress. Noticed while breaking this accidentally in a painful attempt to make vga_con unregistering work. With this patch we'll bail out on the first attempt, which at least leaves a useful enough system behind for debugging. Livelocks on console_lock just aren't fun. Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Jiri Slaby <jslaby@suse.cz> Reviewed-by: David Herrmann <dh.herrmann@gmail.com> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
d9c660e750
commit
f418f2ec44
@ -3260,6 +3260,7 @@ static int vt_unbind(struct con_driver *con)
|
||||
{
|
||||
const struct consw *csw = NULL;
|
||||
int i, more = 1, first = -1, last = -1, deflt = 0;
|
||||
int ret;
|
||||
|
||||
if (!con->con || !(con->flag & CON_DRIVER_FLAG_MODULE) ||
|
||||
con_is_graphics(con->con, con->first, con->last))
|
||||
@ -3285,8 +3286,10 @@ static int vt_unbind(struct con_driver *con)
|
||||
|
||||
if (first != -1) {
|
||||
console_lock();
|
||||
do_unbind_con_driver(csw, first, last, deflt);
|
||||
ret = do_unbind_con_driver(csw, first, last, deflt);
|
||||
console_unlock();
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
}
|
||||
|
||||
first = -1;
|
||||
|
Loading…
x
Reference in New Issue
Block a user