mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
media: cec: core: avoid recursive cec_claim_log_addrs
[ Upstream commit47c82aac10
] Keep track if cec_claim_log_addrs() is running, and return -EBUSY if it is when calling CEC_ADAP_S_LOG_ADDRS. This prevents a case where cec_claim_log_addrs() could be called while it was still in progress. Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Reported-by: Yang, Chenyuan <cy54@illinois.edu> Closes: https://lore.kernel.org/linux-media/PH7PR11MB57688E64ADE4FE82E658D86DA09EA@PH7PR11MB5768.namprd11.prod.outlook.com/ Fixes:ca684386e6
("[media] cec: add HDMI CEC framework (api)") Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
6d6ddabcec
commit
302077d270
@ -1544,9 +1544,12 @@ unconfigure:
|
||||
*/
|
||||
static void cec_claim_log_addrs(struct cec_adapter *adap, bool block)
|
||||
{
|
||||
if (WARN_ON(adap->is_configuring || adap->is_configured))
|
||||
if (WARN_ON(adap->is_claiming_log_addrs ||
|
||||
adap->is_configuring || adap->is_configured))
|
||||
return;
|
||||
|
||||
adap->is_claiming_log_addrs = true;
|
||||
|
||||
init_completion(&adap->config_completion);
|
||||
|
||||
/* Ready to kick off the thread */
|
||||
@ -1561,6 +1564,7 @@ static void cec_claim_log_addrs(struct cec_adapter *adap, bool block)
|
||||
wait_for_completion(&adap->config_completion);
|
||||
mutex_lock(&adap->lock);
|
||||
}
|
||||
adap->is_claiming_log_addrs = false;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -178,7 +178,7 @@ static long cec_adap_s_log_addrs(struct cec_adapter *adap, struct cec_fh *fh,
|
||||
CEC_LOG_ADDRS_FL_ALLOW_RC_PASSTHRU |
|
||||
CEC_LOG_ADDRS_FL_CDC_ONLY;
|
||||
mutex_lock(&adap->lock);
|
||||
if (!adap->is_configuring &&
|
||||
if (!adap->is_claiming_log_addrs && !adap->is_configuring &&
|
||||
(!log_addrs.num_log_addrs || !adap->is_configured) &&
|
||||
!cec_is_busy(adap, fh)) {
|
||||
err = __cec_s_log_addrs(adap, &log_addrs, block);
|
||||
|
@ -247,6 +247,7 @@ struct cec_adapter {
|
||||
u16 phys_addr;
|
||||
bool needs_hpd;
|
||||
bool is_enabled;
|
||||
bool is_claiming_log_addrs;
|
||||
bool is_configuring;
|
||||
bool must_reconfigure;
|
||||
bool is_configured;
|
||||
|
Loading…
Reference in New Issue
Block a user