lkml.org 
[lkml]   [2022]   [Apr]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 416/475] serial: samsung_tty: do not unlock port->lock for uart_write_wakeup()
    Date
    From: Jiri Slaby <jslaby@suse.cz>

    [ Upstream commit 988c7c00691008ea1daaa1235680a0da49dab4e8 ]

    The commit c15c3747ee32 (serial: samsung: fix potential soft lockup
    during uart write) added an unlock of port->lock before
    uart_write_wakeup() and a lock after it. It was always problematic to
    write data from tty_ldisc_ops::write_wakeup and it was even documented
    that way. We fixed the line disciplines to conform to this recently.
    So if there is still a missed one, we should fix them instead of this
    workaround.

    On the top of that, s3c24xx_serial_tx_dma_complete() in this driver
    still holds the port->lock while calling uart_write_wakeup().

    So revert the wrap added by the commit above.

    Cc: Thomas Abraham <thomas.abraham@linaro.org>
    Cc: Kyungmin Park <kyungmin.park@samsung.com>
    Cc: Hyeonkook Kim <hk619.kim@samsung.com>
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    Link: https://lore.kernel.org/r/20220308115153.4225-1-jslaby@suse.cz
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/tty/serial/samsung.c | 5 +----
    1 file changed, 1 insertion(+), 4 deletions(-)

    diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c
    index c7683beb3412..6040d5a6139a 100644
    --- a/drivers/tty/serial/samsung.c
    +++ b/drivers/tty/serial/samsung.c
    @@ -761,11 +761,8 @@ static irqreturn_t s3c24xx_serial_tx_chars(int irq, void *id)
    goto out;
    }

    - if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) {
    - spin_unlock(&port->lock);
    + if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
    uart_write_wakeup(port);
    - spin_lock(&port->lock);
    - }

    if (uart_circ_empty(xmit))
    s3c24xx_serial_stop_tx(port);
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-04-14 17:18    [W:4.107 / U:0.288 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site