gpu: nvgpu: Remove ref count from as_share
Alex Waterman [Tue, 31 Jan 2017 23:49:40 +0000 (15:49 -0800)]
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
Bug 200288656
Bug 1887273

Change-Id: I6253b3eab7c7471d3ed6feddb3705c49a8704bed
Signed-off-by: Gagan Grover <ggrover@nvidia.com>
Reviewed-on: http://git-master/r/1296900
(cherry picked from commit c6594c744d8fca738a1a8f5177c84a05899695dc)
Reviewed-on: http://git-master/r/1306725
(cherry picked from commit f4e861ec2acea948bd160dc044f1d49e2e45fd98)
Reviewed-on: http://git-master/r/1320259
(cherry picked from commit df37ea58960aaa4974c4d5a5b5cb800086b80ed8)
Reviewed-on: http://git-master/r/1458143
Reviewed-by: Manish Tuteja <mtuteja@nvidia.com>
Tested-by: Manish Tuteja <mtuteja@nvidia.com>

drivers/gpu/nvgpu/gk20a/as_gk20a.c
drivers/gpu/nvgpu/gk20a/as_gk20a.h

index b6b3854..2147788 100644 (file)
@@ -54,7 +54,6 @@ int gk20a_as_alloc_share(struct gk20a_as *as,
 
        as_share->as = as;
        as_share->id = generate_as_share_id(as_share->as);
-       as_share->ref_cnt.counter = 1;
 
        /* this will set as_share->vm. */
        err = gk20a_busy(g->dev);
@@ -85,9 +84,6 @@ int gk20a_as_release_share(struct gk20a_as_share *as_share)
 
        gk20a_dbg_fn("");
 
-       if (atomic_dec_return(&as_share->ref_cnt) > 0)
-               return 0;
-
        err = gk20a_busy(g->dev);
        if (err)
                return err;
@@ -114,14 +110,10 @@ static int gk20a_as_ioctl_bind_channel(
        if (!ch || gk20a_channel_as_bound(ch))
                return -EINVAL;
 
-       atomic_inc(&as_share->ref_cnt);
-
        /* this will set channel_gk20a->vm */
        err = ch->g->ops.mm.vm_bind_channel(as_share, ch);
-       if (err) {
-               atomic_dec(&as_share->ref_cnt);
+       if (err)
                return err;
-       }
 
        return err;
 }
index d347479..9b0c6e1 100644 (file)
@@ -25,7 +25,6 @@ struct vm_gk20a;
 
 struct gk20a_as_share {
        struct gk20a_as *as;
-       atomic_t ref_cnt;
        int id;
        struct vm_gk20a *vm;
 };