diff options
author | Sang-Hun Lee <sanlee@nvidia.com> | 2014-06-03 13:28:45 -0700 |
---|---|---|
committer | Riham Haidar <rhaidar@nvidia.com> | 2014-06-13 11:54:49 -0700 |
commit | 855e9f43a7ea58540859998a01c9c2d0a38a3f63 (patch) | |
tree | ca3ebc46c07d3ee556c15ac6e3cebcc5ad11b103 /drivers/gpu | |
parent | 6708ac77f5f81ab3eca61c568e8d5a3ad73392f9 (diff) |
gpu: nvgpu: flush write before unlocking
- gk20a_enable is reading the clock after unlocking the spinlock
to flush any previous write
- This could lead to a race if any write afterwards assume
the write has been completed already
- Read the clock before unlocking to ensure all previous writes
have been completed before letting any other thread use gk20a
Bug 200007520
Change-Id: I737fbbe825c68b25ca256c4a8ee2b99aa8baf0f5
Signed-off-by: Sang-Hun Lee <sanlee@nvidia.com>
Reviewed-on: http://git-master/r/418485
(cherry picked from commit 2aed542a719caa69620766bf2dceefe50626c189)
Reviewed-on: http://git-master/r/422773
Reviewed-by: Riham Haidar <rhaidar@nvidia.com>
Tested-by: Riham Haidar <rhaidar@nvidia.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.c b/drivers/gpu/nvgpu/gk20a/gk20a.c index ad6f9b63a04c..a44eac4bb50b 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a.c @@ -1590,8 +1590,8 @@ void gk20a_enable(struct gk20a *g, u32 units) pmc = gk20a_readl(g, mc_enable_r()); pmc |= units; gk20a_writel(g, mc_enable_r(), pmc); - spin_unlock(&g->mc_enable_lock); gk20a_readl(g, mc_enable_r()); + spin_unlock(&g->mc_enable_lock); udelay(20); } |