]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
gpu: nvgpu: Fix return value in pmu mutex release
authorArto Merilainen <amerilainen@nvidia.com>
Tue, 8 Apr 2014 11:29:38 +0000 (14:29 +0300)
committerMrutyunjay Sawant <msawant@nvidia.com>
Mon, 14 Apr 2014 13:44:02 +0000 (06:44 -0700)
Bug 1495617

Change-Id: I0d9c7d19bc3ef223cfb40f0ed6c3711b328e4958
Signed-off-by: Arto Merilainen <amerilainen@nvidia.com>
Reviewed-on: http://git-master/r/394904
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Reviewed-by: David Dastous St Hilaire <ddastoussthi@nvidia.com>
Tested-by: Sang-Hun Lee <sanlee@nvidia.com>
Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>
drivers/gpu/nvgpu/gk20a/pmu_gk20a.c

index d3c1a5aad8988930d2e77daebd4d1e11288b4cbb..796eb840fea190aaa44408605deff3706f07dc91 100644 (file)
@@ -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;
 }