]> git.baikalelectronics.ru Git - kernel.git/commit
media: cec-adap.c: fix is_configuring state
authorHans Verkuil <hverkuil-cisco@xs4all.nl>
Fri, 6 May 2022 07:43:25 +0000 (09:43 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 Jun 2022 08:22:38 +0000 (10:22 +0200)
commit0bf86993ab26276c92f10a7386ed1acbe25cd969
tree3071025985b9fbe329fa5d74ea212caeedcc4198
parent707b60b85c5da452994258a0aaa330b96fc649d2
media: cec-adap.c: fix is_configuring state

[ Upstream commit 12f412de191511501dcd80a8b7764d105b12ee14 ]

If an adapter is trying to claim a free logical address then it is
in the 'is_configuring' state. If during that process the cable is
disconnected (HPD goes low, which in turn invalidates the physical
address), then cec_adap_unconfigure() is called, and that set the
is_configuring boolean to false, even though the thread that's
trying to claim an LA is still running.

Don't touch the is_configuring bool in cec_adap_unconfigure(), it
will eventually be cleared by the thread. By making that change
the cec_config_log_addr() function also had to change: it was
aborting if is_configuring became false (since that is what
cec_adap_unconfigure() did), but that no longer works. Instead
check if the physical address is invalid. That is a much
more appropriate check anyway.

This fixes a bug where the the adapter could be disabled even
though the device was still configuring. This could cause POLL
transmits to time out.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/media/cec/core/cec-adap.c