linux-uconsole/drivers/media/cec
Hans Verkuil d8961949a2 media: cec: check 'transmit_in_progress', not 'transmitting'
commit ac479b51f3 upstream.

Currently wait_event_interruptible_timeout is called in cec_thread_func()
when adap->transmitting is set. But if the adapter is unconfigured
while transmitting, then adap->transmitting is set to NULL. But the
hardware is still actually transmitting the message, and that's
indicated by adap->transmit_in_progress and we should wait until that
is finished or times out before transmitting new messages.

As the original commit says: adap->transmitting is the userspace view,
adap->transmit_in_progress reflects the hardware state.

However, if adap->transmitting is NULL and adap->transmit_in_progress
is true, then wait_event_interruptible is called (no timeout), which
can get stuck indefinitely if the CEC driver is flaky and never marks
the transmit-in-progress as 'done'.

So test against transmit_in_progress when deciding whether to use
the timeout variant or not, instead of testing against adap->transmitting.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Fixes: 32804fcb61 ("media: cec: keep track of outstanding transmits")
Cc: <stable@vger.kernel.org>      # for v4.19 and up
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-01-09 10:19:00 +01:00
..
cec-adap.c media: cec: check 'transmit_in_progress', not 'transmitting' 2020-01-09 10:19:00 +01:00
cec-api.c media: cec: integrate cec_validate_phys_addr() in cec-api.c 2018-11-13 11:08:52 -08:00
cec-core.c media: rc: per-protocol repeat period and minimum keyup timer 2018-04-20 09:16:55 -04:00
cec-notifier.c media: cec-notifier: clear cec_adap in cec_notifier_unregister 2019-10-05 13:09:49 +02:00
cec-pin-error-inj.c media: cec-pin-error-inj: avoid a false-positive Spectre detection 2018-05-28 16:11:17 -04:00
cec-pin-priv.h media: cec: improve CEC pin event handling 2018-03-22 08:16:52 -04:00
cec-pin.c media: cec-gpio: select correct Signal Free Time 2019-11-24 08:20:25 +01:00
cec-priv.h media: cec: add SPDX license info 2018-02-14 13:16:03 -05:00
Kconfig media: cec-pin-error-inj: parse/show error injection 2018-03-22 08:00:59 -04:00
Makefile media: cec: remove cec-edid.c 2019-09-16 08:21:46 +02:00