diff options
Diffstat (limited to 'drivers/gpu/nvgpu/common/linux/ioctl_tsg.c')
-rw-r--r-- | drivers/gpu/nvgpu/common/linux/ioctl_tsg.c | 23 |
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 | ||
242 | free_ref: | 244 | free_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 | ||
262 | void 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 | |||
260 | int nvgpu_ioctl_tsg_dev_release(struct inode *inode, struct file *filp) | 272 | int 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) | |||
270 | static int gk20a_tsg_ioctl_set_priority(struct gk20a *g, | 282 | static 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: | |||
296 | static int gk20a_tsg_ioctl_set_runlist_interleave(struct gk20a *g, | 309 | static 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: | |||
323 | static int gk20a_tsg_ioctl_set_timeslice(struct gk20a *g, | 337 | static 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); |