lkml.org 
[lkml]   [2014]   [Feb]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.12 056/133] tty/serial: at91: fix race condition in atmel_serial_remove
    Date
    3.12-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Marek Roszko <mark.roszko@gmail.com>

    commit f50c995f9ebf064cea1368bf361c4e29679415b4 upstream.

    The _remove callback could be called when a tasklet is scheduled. tasklet_kill
    was called inside the function in order to free up any scheduled tasklets.
    However it was called after uart_remove_one_port which destroys tty references
    needed in the port for atmel_tasklet_func.
    Simply putting the tasklet_kill at the start of the function will prevent this
    conflict.

    Signed-off-by: Marek Roszko <mark.roszko@gmail.com>
    Acked-by: Leilei Zhao <leilei.zhao@atmel.com>
    Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/tty/serial/atmel_serial.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    --- a/drivers/tty/serial/atmel_serial.c
    +++ b/drivers/tty/serial/atmel_serial.c
    @@ -2430,11 +2430,12 @@ static int atmel_serial_remove(struct pl
    struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
    int ret = 0;

    + tasklet_kill(&atmel_port->tasklet);
    +
    device_init_wakeup(&pdev->dev, 0);

    ret = uart_remove_one_port(&atmel_uart, port);

    - tasklet_kill(&atmel_port->tasklet);
    kfree(atmel_port->rx_ring.buf);

    /* "port" is allocated statically, so we shouldn't free it */



    \
     
     \ /
      Last update: 2014-02-05 02:21    [W:8.634 / U:0.284 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site