--- x/drivers/media/cec/core/cec-adap.c +++ y/drivers/media/cec/core/cec-adap.c @@ -1575,7 +1575,6 @@ unconfigure: cec_adap_unconfigure(adap); adap->is_configuring = false; adap->must_reconfigure = false; - adap->kthread_config = NULL; complete(&adap->config_completion); mutex_unlock(&adap->lock); return 0; @@ -1592,6 +1591,8 @@ static void cec_claim_log_addrs(struct c if (WARN_ON(adap->is_configuring || adap->is_configured)) return; + if (adap->kthread_config) + return; init_completion(&adap->config_completion); /* Ready to kick off the thread */ @@ -1605,6 +1606,7 @@ static void cec_claim_log_addrs(struct c mutex_unlock(&adap->lock); wait_for_completion(&adap->config_completion); mutex_lock(&adap->lock); + adap->kthread_config = NULL; } }