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:
parent
074d35cebe
commit
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 uart_state *state = drv->state + uport->line;
|
||||||
struct tty_port *port = &state->port;
|
struct tty_port *port = &state->port;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
BUG_ON(in_interrupt());
|
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.
|
* succeeding while we shut down the port.
|
||||||
*/
|
*/
|
||||||
mutex_lock(&port->mutex);
|
mutex_lock(&port->mutex);
|
||||||
|
if (!state->uart_port) {
|
||||||
|
mutex_unlock(&port->mutex);
|
||||||
|
ret = -EINVAL;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
uport->flags |= UPF_DEAD;
|
uport->flags |= UPF_DEAD;
|
||||||
mutex_unlock(&port->mutex);
|
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;
|
uport->type = PORT_UNKNOWN;
|
||||||
|
|
||||||
state->uart_port = NULL;
|
state->uart_port = NULL;
|
||||||
|
out:
|
||||||
mutex_unlock(&port_mutex);
|
mutex_unlock(&port_mutex);
|
||||||
|
|
||||||
return 0;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue