From f0e92d4918fd97a602f10acc2b431045afb4200b Mon Sep 17 00:00:00 2001 From: Matt Wagner Date: Thu, 23 Aug 2012 11:32:31 -0700 Subject: Revert "video: tegra: hdcp: Fix Locking Issue" This reverts commit 51f746421b73f8f378bd7908b35fd6c79687e239. Bug 1030468 Bug 1030415 Signed-off-by: Matt Wagner Change-Id: If9b5febd812e84848913431dcaf0bdefc518e5d1 Reviewed-on: http://git-master/r/126948 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Jon Mayo --- drivers/video/tegra/dc/nvhdcp.c | 28 +++++++--------------------- 1 file changed, 7 insertions(+), 21 deletions(-) (limited to 'drivers/video/tegra/dc') diff --git a/drivers/video/tegra/dc/nvhdcp.c b/drivers/video/tegra/dc/nvhdcp.c index b509a6c78499..3566e2bd33b5 100644 --- a/drivers/video/tegra/dc/nvhdcp.c +++ b/drivers/video/tegra/dc/nvhdcp.c @@ -78,7 +78,6 @@ struct tegra_nvhdcp { struct tegra_dc_hdmi_data *hdmi; struct workqueue_struct *downstream_wq; struct mutex lock; - struct mutex state_lock; struct miscdevice miscdev; char name[12]; unsigned id; @@ -981,9 +980,7 @@ static void nvhdcp_downstream_worker(struct work_struct *work) nvhdcp_vdbg("CRYPT enabled\n"); - mutex_lock(&nvhdcp->state_lock); nvhdcp->state = STATE_LINK_VERIFY; - mutex_unlock(&nvhdcp->state_lock); nvhdcp_info("link verified!\n"); while (1) { @@ -1010,39 +1007,30 @@ failure: if(nvhdcp->fail_count > 5) { nvhdcp_err("nvhdcp failure - too many failures, giving up!\n"); } else { - if (!nvhdcp_is_plugged(nvhdcp)) { - nvhdcp_err("nvhdcp failure\n"); - goto lost_hdmi; - } nvhdcp_err("nvhdcp failure - renegotiating in 1 second\n"); + if (!nvhdcp_is_plugged(nvhdcp)) + goto lost_hdmi; queue_delayed_work(nvhdcp->downstream_wq, &nvhdcp->work, msecs_to_jiffies(1000)); } lost_hdmi: - mutex_lock(&nvhdcp->state_lock); nvhdcp->state = STATE_UNAUTHENTICATED; - mutex_unlock(&nvhdcp->state_lock); hdcp_ctrl_run(hdmi, 0); err: mutex_unlock(&nvhdcp->lock); return; disable: - mutex_lock(&nvhdcp->state_lock); nvhdcp->state = STATE_OFF; nvhdcp_set_plugged(nvhdcp, false); - mutex_unlock(&nvhdcp->state_lock); mutex_unlock(&nvhdcp->lock); return; } static int tegra_nvhdcp_on(struct tegra_nvhdcp *nvhdcp) { - mutex_lock(&nvhdcp->state_lock); - nvhdcp_set_plugged(nvhdcp, true); nvhdcp->state = STATE_UNAUTHENTICATED; - mutex_unlock(&nvhdcp->state_lock); if (nvhdcp_is_plugged(nvhdcp)) { nvhdcp->fail_count = 0; queue_delayed_work(nvhdcp->downstream_wq, &nvhdcp->work, @@ -1053,10 +1041,10 @@ static int tegra_nvhdcp_on(struct tegra_nvhdcp *nvhdcp) static int tegra_nvhdcp_off(struct tegra_nvhdcp *nvhdcp) { - mutex_lock(&nvhdcp->state_lock); + mutex_lock(&nvhdcp->lock); nvhdcp->state = STATE_OFF; nvhdcp_set_plugged(nvhdcp, false); - mutex_unlock(&nvhdcp->state_lock); + mutex_unlock(&nvhdcp->lock); wake_up_interruptible(&wq_worker); flush_workqueue(nvhdcp->downstream_wq); return 0; @@ -1067,6 +1055,7 @@ void tegra_nvhdcp_set_plug(struct tegra_nvhdcp *nvhdcp, bool hpd) nvhdcp_debug("hdmi hotplug detected (hpd = %d)\n", hpd); if (hpd) { + nvhdcp_set_plugged(nvhdcp, true); tegra_nvhdcp_on(nvhdcp); } else { tegra_nvhdcp_off(nvhdcp); @@ -1091,9 +1080,9 @@ int tegra_nvhdcp_set_policy(struct tegra_nvhdcp *nvhdcp, int pol) static int tegra_nvhdcp_renegotiate(struct tegra_nvhdcp *nvhdcp) { - mutex_lock(&nvhdcp->state_lock); + mutex_lock(&nvhdcp->lock); nvhdcp->state = STATE_RENEGOTIATE; - mutex_unlock(&nvhdcp->state_lock); + mutex_unlock(&nvhdcp->lock); tegra_nvhdcp_on(nvhdcp); return 0; } @@ -1212,7 +1201,6 @@ struct tegra_nvhdcp *tegra_nvhdcp_create(struct tegra_dc_hdmi_data *hdmi, snprintf(nvhdcp->name, sizeof(nvhdcp->name), "nvhdcp%u", id); nvhdcp->hdmi = hdmi; mutex_init(&nvhdcp->lock); - mutex_init(&nvhdcp->state_lock); strlcpy(nvhdcp->info.type, nvhdcp->name, sizeof(nvhdcp->info.type)); nvhdcp->bus = bus; @@ -1236,9 +1224,7 @@ struct tegra_nvhdcp *tegra_nvhdcp_create(struct tegra_dc_hdmi_data *hdmi, goto free_nvhdcp; } - mutex_lock(&nvhdcp->state_lock); nvhdcp->state = STATE_UNAUTHENTICATED; - mutex_unlock(&nvhdcp->state_lock); nvhdcp->downstream_wq = create_singlethread_workqueue(nvhdcp->name); INIT_DELAYED_WORK(&nvhdcp->work, nvhdcp_downstream_worker); -- cgit v1.2.3