diff options
author | Deepak Nibade <dnibade@nvidia.com> | 2018-01-03 09:28:47 -0500 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2018-01-04 11:46:10 -0500 |
commit | e0aca109b1d98ca4ddb42ac42a60b0f267f1ecf5 (patch) | |
tree | bfe3eacf10ae30fb9e06af9848e771ab5f161ce3 | |
parent | c7b7dbe39a598aa228e4aaea4aec3ce958a27187 (diff) |
gpu: nvgpu: fix erroneous gk20a_put() call
With a recent rework we moved gk20a_get() call to nvgpu_ioctl_tsg_open(),
but corresponding gk20a_put() call remained in gk20a_tsg_release()
So if a TSG is opened and released from within kernel with APIs
gk20a_tsg_open()/gk20a_tsg_release() we mistakenly drop extra refcount
through gk20a_put()
Fix this by moving gk20a_put() call to nvgpu_ioctl_tsg_release() which
balances gk20a_get() call in nvgpu_ioctl_tsg_open()
Bug 200374011
Change-Id: Id0cec0426e6231309dc530ab5c934dacaba9f8da
Signed-off-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1630969
Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
-rw-r--r-- | drivers/gpu/nvgpu/common/linux/ioctl_tsg.c | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/tsg_gk20a.c | 1 |
2 files changed, 1 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/common/linux/ioctl_tsg.c b/drivers/gpu/nvgpu/common/linux/ioctl_tsg.c index 445199c2..931a3264 100644 --- a/drivers/gpu/nvgpu/common/linux/ioctl_tsg.c +++ b/drivers/gpu/nvgpu/common/linux/ioctl_tsg.c | |||
@@ -359,6 +359,7 @@ void nvgpu_ioctl_tsg_release(struct nvgpu_ref *ref) | |||
359 | gk20a_sched_ctrl_tsg_removed(g, tsg); | 359 | gk20a_sched_ctrl_tsg_removed(g, tsg); |
360 | 360 | ||
361 | gk20a_tsg_release(ref); | 361 | gk20a_tsg_release(ref); |
362 | gk20a_put(g); | ||
362 | } | 363 | } |
363 | 364 | ||
364 | int nvgpu_ioctl_tsg_dev_release(struct inode *inode, struct file *filp) | 365 | int nvgpu_ioctl_tsg_dev_release(struct inode *inode, struct file *filp) |
diff --git a/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c b/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c index ff700372..d9ddc011 100644 --- a/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c | |||
@@ -347,7 +347,6 @@ void gk20a_tsg_release(struct nvgpu_ref *ref) | |||
347 | tsg->runlist_id = ~0; | 347 | tsg->runlist_id = ~0; |
348 | 348 | ||
349 | gk20a_dbg(gpu_dbg_fn, "tsg released %d\n", tsg->tsgid); | 349 | gk20a_dbg(gpu_dbg_fn, "tsg released %d\n", tsg->tsgid); |
350 | gk20a_put(g); | ||
351 | } | 350 | } |
352 | 351 | ||
353 | struct tsg_gk20a *tsg_gk20a_from_ch(struct channel_gk20a *ch) | 352 | struct tsg_gk20a *tsg_gk20a_from_ch(struct channel_gk20a *ch) |