mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-23 01:50:07 +03:00
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>
This commit is contained in:
committed by
mobile promotions
parent
7e403974d3
commit
c6594c744d
@@ -54,7 +54,6 @@ int gk20a_as_alloc_share(struct gk20a_as *as,
|
|||||||
|
|
||||||
as_share->as = as;
|
as_share->as = as;
|
||||||
as_share->id = generate_as_share_id(as_share->as);
|
as_share->id = generate_as_share_id(as_share->as);
|
||||||
as_share->ref_cnt.counter = 1;
|
|
||||||
|
|
||||||
/* this will set as_share->vm. */
|
/* this will set as_share->vm. */
|
||||||
err = gk20a_busy(g->dev);
|
err = gk20a_busy(g->dev);
|
||||||
@@ -85,9 +84,6 @@ int gk20a_as_release_share(struct gk20a_as_share *as_share)
|
|||||||
|
|
||||||
gk20a_dbg_fn("");
|
gk20a_dbg_fn("");
|
||||||
|
|
||||||
if (atomic_dec_return(&as_share->ref_cnt) > 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
err = gk20a_busy(g->dev);
|
err = gk20a_busy(g->dev);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
@@ -114,14 +110,10 @@ static int gk20a_as_ioctl_bind_channel(
|
|||||||
if (!ch || gk20a_channel_as_bound(ch))
|
if (!ch || gk20a_channel_as_bound(ch))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
atomic_inc(&as_share->ref_cnt);
|
|
||||||
|
|
||||||
/* this will set channel_gk20a->vm */
|
/* this will set channel_gk20a->vm */
|
||||||
err = ch->g->ops.mm.vm_bind_channel(as_share, ch);
|
err = ch->g->ops.mm.vm_bind_channel(as_share, ch);
|
||||||
if (err) {
|
if (err)
|
||||||
atomic_dec(&as_share->ref_cnt);
|
|
||||||
return err;
|
return err;
|
||||||
}
|
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ struct vm_gk20a;
|
|||||||
|
|
||||||
struct gk20a_as_share {
|
struct gk20a_as_share {
|
||||||
struct gk20a_as *as;
|
struct gk20a_as *as;
|
||||||
atomic_t ref_cnt;
|
|
||||||
int id;
|
int id;
|
||||||
struct vm_gk20a *vm;
|
struct vm_gk20a *vm;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user