OSDN Git Service

tty: serial: qcom_geni_serial: Fix softlock
authorRyan Case <ryandcase@chromium.org>
Fri, 30 Nov 2018 02:18:40 +0000 (18:18 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 13 Dec 2019 07:52:27 +0000 (08:52 +0100)
commit6854d02bcb67d0b768b25b2e54482e3e4cc046a1
tree8e8cd613351b090ca8b428d9fa37dcadbdffd0b4
parent5146add60adf31ae4d02cfac0150eb8f8d3aa9b7
tty: serial: qcom_geni_serial: Fix softlock

[ Upstream commit a1fee899e5bed457afc20a6a2ff3915a95cc5942 ]

Transfers were being divided into device FIFO sized (64 byte max)
operations which would poll for completion within a spin_lock_irqsave /
spin_unlock_irqrestore block. This both made things slow by waiting for
the FIFO to completely drain before adding further data and would also
result in softlocks on large transmissions.

This patch allows larger transfers with continuous FIFO additions as
space becomes available and removes polling from the interrupt handler.

Signed-off-by: Ryan Case <ryandcase@chromium.org>
Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/tty/serial/qcom_geni_serial.c