|
@@ -2645,6 +2645,7 @@ int uart_remove_one_port(struct uart_driver *drv, struct uart_port *uport)
|
|
|
{
|
|
|
struct uart_state *state = drv->state + uport->line;
|
|
|
struct tty_port *port = &state->port;
|
|
|
+ struct tty_struct *tty;
|
|
|
int ret = 0;
|
|
|
|
|
|
BUG_ON(in_interrupt());
|
|
@@ -2673,8 +2674,11 @@ int uart_remove_one_port(struct uart_driver *drv, struct uart_port *uport)
|
|
|
*/
|
|
|
tty_unregister_device(drv->tty_driver, uport->line);
|
|
|
|
|
|
- if (port->tty)
|
|
|
+ tty = tty_port_tty_get(port);
|
|
|
+ if (tty) {
|
|
|
tty_vhangup(port->tty);
|
|
|
+ tty_kref_put(tty);
|
|
|
+ }
|
|
|
|
|
|
/*
|
|
|
* If the port is used as a console, unregister it
|