summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorAlex Waterman <alexw@nvidia.com>2017-01-31 18:49:40 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2017-02-07 17:54:02 -0500
commitc6594c744d8fca738a1a8f5177c84a05899695dc (patch)
treee7b0129ccd5e62774923c96fc1470035185fff43 /drivers
parent7e403974d3584ab8880e42d422ee3afb7f49d6f3 (diff)
gpu: nvgpu: Remove ref count from as_share
Remove the broke ref counting from as_share. The ref-count is incremented for every bind channel but never decremented. This results in VMs never being freed. Bug 1846718 Change-Id: I6253b3eab7c7471d3ed6feddb3705c49a8704bed Signed-off-by: Alex Waterman <alexw@nvidia.com> Reviewed-on: http://git-master/r/1296900 Reviewed-by: Richard Zhao <rizhao@nvidia.com> Reviewed-by: svccoveritychecker <svccoveritychecker@nvidia.com> Reviewed-by: Konsta Holtta <kholtta@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/nvgpu/gk20a/as_gk20a.c10
-rw-r--r--drivers/gpu/nvgpu/gk20a/as_gk20a.h1
2 files changed, 1 insertions, 10 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/as_gk20a.c b/drivers/gpu/nvgpu/gk20a/as_gk20a.c
index c8b3b02f..e4bd8b73 100644
--- a/drivers/gpu/nvgpu/gk20a/as_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/as_gk20a.c
@@ -54,7 +54,6 @@ int gk20a_as_alloc_share(struct gk20a_as *as,
54 54
55 as_share->as = as; 55 as_share->as = as;
56 as_share->id = generate_as_share_id(as_share->as); 56 as_share->id = generate_as_share_id(as_share->as);
57 as_share->ref_cnt.counter = 1;
58 57
59 /* this will set as_share->vm. */ 58 /* this will set as_share->vm. */
60 err = gk20a_busy(g->dev); 59 err = gk20a_busy(g->dev);
@@ -85,9 +84,6 @@ int gk20a_as_release_share(struct gk20a_as_share *as_share)
85 84
86 gk20a_dbg_fn(""); 85 gk20a_dbg_fn("");
87 86
88 if (atomic_dec_return(&as_share->ref_cnt) > 0)
89 return 0;
90
91 err = gk20a_busy(g->dev); 87 err = gk20a_busy(g->dev);
92 if (err) 88 if (err)
93 return err; 89 return err;
@@ -114,14 +110,10 @@ static int gk20a_as_ioctl_bind_channel(
114 if (!ch || gk20a_channel_as_bound(ch)) 110 if (!ch || gk20a_channel_as_bound(ch))
115 return -EINVAL; 111 return -EINVAL;
116 112
117 atomic_inc(&as_share->ref_cnt);
118
119 /* this will set channel_gk20a->vm */ 113 /* this will set channel_gk20a->vm */
120 err = ch->g->ops.mm.vm_bind_channel(as_share, ch); 114 err = ch->g->ops.mm.vm_bind_channel(as_share, ch);
121 if (err) { 115 if (err)
122 atomic_dec(&as_share->ref_cnt);
123 return err; 116 return err;
124 }
125 117
126 return err; 118 return err;
127} 119}
diff --git a/drivers/gpu/nvgpu/gk20a/as_gk20a.h b/drivers/gpu/nvgpu/gk20a/as_gk20a.h
index d347479e..9b0c6e14 100644
--- a/drivers/gpu/nvgpu/gk20a/as_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/as_gk20a.h
@@ -25,7 +25,6 @@ struct vm_gk20a;
25 25
26struct gk20a_as_share { 26struct gk20a_as_share {
27 struct gk20a_as *as; 27 struct gk20a_as *as;
28 atomic_t ref_cnt;
29 int id; 28 int id;
30 struct vm_gk20a *vm; 29 struct vm_gk20a *vm;
31}; 30};