diff options
author | Alex Waterman <alexw@nvidia.com> | 2017-01-31 18:49:40 -0500 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-02-07 17:54:02 -0500 |
commit | c6594c744d8fca738a1a8f5177c84a05899695dc (patch) | |
tree | e7b0129ccd5e62774923c96fc1470035185fff43 | |
parent | 7e403974d3584ab8880e42d422ee3afb7f49d6f3 (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>
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/as_gk20a.c | 10 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/as_gk20a.h | 1 |
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 | ||
26 | struct gk20a_as_share { | 26 | struct 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 | }; |