From f2ef74fbfff11cad91cd08b3f1be69840f0aadda Mon Sep 17 00:00:00 2001 From: Arto Merilainen Date: Tue, 8 Apr 2014 14:29:38 +0300 Subject: gpu: nvgpu: Fix return value in pmu mutex release Bug 1495617 Change-Id: I689ed4303bb3959bb24bf79d52891de28431fc67 Signed-off-by: Arto Merilainen Reviewed-on: http://git-master/r/394904 (cherry-picked from commit a04c51430b186d23953960965ce3ab229968d1f7) Reviewed-on: http://git-master/r/399565 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Terje Bergstrom --- drivers/gpu/nvgpu/gk20a/pmu_gk20a.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'drivers/gpu/nvgpu/gk20a/pmu_gk20a.c') diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c index 0f1af8ab..234255ce 100644 --- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c @@ -1244,18 +1244,19 @@ int pmu_mutex_release(struct pmu_gk20a *pmu, u32 id, u32 *token) return -EINVAL; } - if (--mutex->ref_cnt == 0) { - gk20a_writel(g, pwr_pmu_mutex_r(mutex->index), - pwr_pmu_mutex_value_initial_lock_f()); + if (--mutex->ref_cnt > 0) + return -EBUSY; - data = gk20a_readl(g, pwr_pmu_mutex_id_release_r()); - data = set_field(data, pwr_pmu_mutex_id_release_value_m(), - pwr_pmu_mutex_id_release_value_f(owner)); - gk20a_writel(g, pwr_pmu_mutex_id_release_r(), data); + gk20a_writel(g, pwr_pmu_mutex_r(mutex->index), + pwr_pmu_mutex_value_initial_lock_f()); - gk20a_dbg_pmu("mutex released: id=%d, token=0x%x", - mutex->index, *token); - } + data = gk20a_readl(g, pwr_pmu_mutex_id_release_r()); + data = set_field(data, pwr_pmu_mutex_id_release_value_m(), + pwr_pmu_mutex_id_release_value_f(owner)); + gk20a_writel(g, pwr_pmu_mutex_id_release_r(), data); + + gk20a_dbg_pmu("mutex released: id=%d, token=0x%x", + mutex->index, *token); return 0; } -- cgit v1.2.2