drivers/tty/serial: extern function which for release resource, need check pointer, before free it
for extern function uart_remove_one_port: need check pointer whether be NULL, before the main work. just like what the other extern function uart_add_one_port has done. uart_add_one_port and uart_remove_one_port are pair information: for the callers (such as drivers/tty/serial/jsm: jsm_tty.c, jsm_driver.c) they realy assume that: they still can call uart_remove_one_port, after uart_add_one_port failed we (as an extern function), have to understand it (just like kfree). Signed-off-by: Chen Gang <gang.chen@asianux.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
074d35cebe
Коммит
b342dd512f
|
@ -2643,6 +2643,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;
|
||||
int ret = 0;
|
||||
|
||||
BUG_ON(in_interrupt());
|
||||
|
||||
|
@ -2657,6 +2658,11 @@ int uart_remove_one_port(struct uart_driver *drv, struct uart_port *uport)
|
|||
* succeeding while we shut down the port.
|
||||
*/
|
||||
mutex_lock(&port->mutex);
|
||||
if (!state->uart_port) {
|
||||
mutex_unlock(&port->mutex);
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
uport->flags |= UPF_DEAD;
|
||||
mutex_unlock(&port->mutex);
|
||||
|
||||
|
@ -2680,9 +2686,10 @@ int uart_remove_one_port(struct uart_driver *drv, struct uart_port *uport)
|
|||
uport->type = PORT_UNKNOWN;
|
||||
|
||||
state->uart_port = NULL;
|
||||
out:
|
||||
mutex_unlock(&port_mutex);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Загрузка…
Ссылка в новой задаче