• Marek Roszko's avatar
    tty/serial: at91: disable uart timer at start of shutdown · 8bc661bf
    Marek Roszko authored
    The uart timer will schedule a tasklet when it fires. It is possible that it
    can fire inside _shutdown before it is killed in the dma and pdc cleanup
    routines. This causes a tasklet that exists after the port is shutdown, so when
    the kernel finally executes it, it panics as the tty port is NULL.
    
    This is a somewhat rare condition but its possible if a program keeps on
    opening/closing the port. It has been observed in particular with systemd
    boot messages that were causing a kernel panic because of this behavior.
    
    Moving the timer deletion to the beginning of the function stops a tasklet from
    being scheduled unexpectedly.
    Signed-off-by: default avatarMarek Roszko <mark.roszko@gmail.com>
    Cc: stable <stable@vger.kernel.org> # v3.12
    [nicolas.ferre@atmel.com: modify commit message, call setup_timer() in any case]
    Signed-off-by: default avatarNicolas Ferre <nicolas.ferre@atmel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    8bc661bf
atmel_serial.c 62.6 KB