aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/tty/vt/vt.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
index ea600f482eeb..5077fe87324d 100644
--- a/drivers/tty/vt/vt.c
+++ b/drivers/tty/vt/vt.c
@@ -3573,17 +3573,20 @@ err:
3573 */ 3573 */
3574int do_unregister_con_driver(const struct consw *csw) 3574int do_unregister_con_driver(const struct consw *csw)
3575{ 3575{
3576 int i, retval = -ENODEV; 3576 int i;
3577 3577
3578 /* cannot unregister a bound driver */ 3578 /* cannot unregister a bound driver */
3579 if (con_is_bound(csw)) 3579 if (con_is_bound(csw))
3580 goto err; 3580 return -EBUSY;
3581
3582 if (csw == conswitchp)
3583 return -EINVAL;
3581 3584
3582 for (i = 0; i < MAX_NR_CON_DRIVER; i++) { 3585 for (i = 0; i < MAX_NR_CON_DRIVER; i++) {
3583 struct con_driver *con_driver = &registered_con_driver[i]; 3586 struct con_driver *con_driver = &registered_con_driver[i];
3584 3587
3585 if (con_driver->con == csw && 3588 if (con_driver->con == csw &&
3586 con_driver->flag & CON_DRIVER_FLAG_MODULE) { 3589 con_driver->flag & CON_DRIVER_FLAG_INIT) {
3587 vtconsole_deinit_device(con_driver); 3590 vtconsole_deinit_device(con_driver);
3588 device_destroy(vtconsole_class, 3591 device_destroy(vtconsole_class,
3589 MKDEV(0, con_driver->node)); 3592 MKDEV(0, con_driver->node));
@@ -3594,12 +3597,11 @@ int do_unregister_con_driver(const struct consw *csw)
3594 con_driver->flag = 0; 3597 con_driver->flag = 0;
3595 con_driver->first = 0; 3598 con_driver->first = 0;
3596 con_driver->last = 0; 3599 con_driver->last = 0;
3597 retval = 0; 3600 return 0;
3598 break;
3599 } 3601 }
3600 } 3602 }
3601err: 3603
3602 return retval; 3604 return -ENODEV;
3603} 3605}
3604EXPORT_SYMBOL_GPL(do_unregister_con_driver); 3606EXPORT_SYMBOL_GPL(do_unregister_con_driver);
3605 3607