summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/common/linux/ioctl_tsg.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/common/linux/ioctl_tsg.c')
-rw-r--r--drivers/gpu/nvgpu/common/linux/ioctl_tsg.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/drivers/gpu/nvgpu/common/linux/ioctl_tsg.c b/drivers/gpu/nvgpu/common/linux/ioctl_tsg.c
index 6d0439f3..ce7fa6af 100644
--- a/drivers/gpu/nvgpu/common/linux/ioctl_tsg.c
+++ b/drivers/gpu/nvgpu/common/linux/ioctl_tsg.c
@@ -237,6 +237,8 @@ int nvgpu_ioctl_tsg_open(struct gk20a *g, struct file *filp)
237 priv->tsg = tsg; 237 priv->tsg = tsg;
238 filp->private_data = priv; 238 filp->private_data = priv;
239 239
240 gk20a_sched_ctrl_tsg_added(g, tsg);
241
240 return 0; 242 return 0;
241 243
242free_ref: 244free_ref:
@@ -257,12 +259,22 @@ int nvgpu_ioctl_tsg_dev_open(struct inode *inode, struct file *filp)
257 return ret; 259 return ret;
258} 260}
259 261
262void nvgpu_ioctl_tsg_release(struct nvgpu_ref *ref)
263{
264 struct tsg_gk20a *tsg = container_of(ref, struct tsg_gk20a, refcount);
265 struct gk20a *g = tsg->g;
266
267 gk20a_sched_ctrl_tsg_removed(g, tsg);
268
269 gk20a_tsg_release(ref);
270}
271
260int nvgpu_ioctl_tsg_dev_release(struct inode *inode, struct file *filp) 272int nvgpu_ioctl_tsg_dev_release(struct inode *inode, struct file *filp)
261{ 273{
262 struct tsg_private *priv = filp->private_data; 274 struct tsg_private *priv = filp->private_data;
263 struct tsg_gk20a *tsg = priv->tsg; 275 struct tsg_gk20a *tsg = priv->tsg;
264 276
265 nvgpu_ref_put(&tsg->refcount, gk20a_tsg_release); 277 nvgpu_ref_put(&tsg->refcount, nvgpu_ioctl_tsg_release);
266 nvgpu_kfree(tsg->g, priv); 278 nvgpu_kfree(tsg->g, priv);
267 return 0; 279 return 0;
268} 280}
@@ -270,7 +282,8 @@ int nvgpu_ioctl_tsg_dev_release(struct inode *inode, struct file *filp)
270static int gk20a_tsg_ioctl_set_priority(struct gk20a *g, 282static int gk20a_tsg_ioctl_set_priority(struct gk20a *g,
271 struct tsg_gk20a *tsg, struct nvgpu_set_priority_args *arg) 283 struct tsg_gk20a *tsg, struct nvgpu_set_priority_args *arg)
272{ 284{
273 struct gk20a_sched_ctrl *sched = &g->sched_ctrl; 285 struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g);
286 struct gk20a_sched_ctrl *sched = &l->sched_ctrl;
274 int err; 287 int err;
275 288
276 nvgpu_mutex_acquire(&sched->control_lock); 289 nvgpu_mutex_acquire(&sched->control_lock);
@@ -296,7 +309,8 @@ done:
296static int gk20a_tsg_ioctl_set_runlist_interleave(struct gk20a *g, 309static int gk20a_tsg_ioctl_set_runlist_interleave(struct gk20a *g,
297 struct tsg_gk20a *tsg, struct nvgpu_runlist_interleave_args *arg) 310 struct tsg_gk20a *tsg, struct nvgpu_runlist_interleave_args *arg)
298{ 311{
299 struct gk20a_sched_ctrl *sched = &g->sched_ctrl; 312 struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g);
313 struct gk20a_sched_ctrl *sched = &l->sched_ctrl;
300 int err; 314 int err;
301 315
302 gk20a_dbg(gpu_dbg_fn | gpu_dbg_sched, "tsgid=%u", tsg->tsgid); 316 gk20a_dbg(gpu_dbg_fn | gpu_dbg_sched, "tsgid=%u", tsg->tsgid);
@@ -323,7 +337,8 @@ done:
323static int gk20a_tsg_ioctl_set_timeslice(struct gk20a *g, 337static int gk20a_tsg_ioctl_set_timeslice(struct gk20a *g,
324 struct tsg_gk20a *tsg, struct nvgpu_timeslice_args *arg) 338 struct tsg_gk20a *tsg, struct nvgpu_timeslice_args *arg)
325{ 339{
326 struct gk20a_sched_ctrl *sched = &g->sched_ctrl; 340 struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g);
341 struct gk20a_sched_ctrl *sched = &l->sched_ctrl;
327 int err; 342 int err;
328 343
329 gk20a_dbg(gpu_dbg_fn | gpu_dbg_sched, "tsgid=%u", tsg->tsgid); 344 gk20a_dbg(gpu_dbg_fn | gpu_dbg_sched, "tsgid=%u", tsg->tsgid);