diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/tsg_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/tsg_gk20a.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c b/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c index 43ee79cd..fc36c0c7 100644 --- a/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c | |||
@@ -402,6 +402,7 @@ int gk20a_tsg_open(struct gk20a *g, struct file *filp) | |||
402 | { | 402 | { |
403 | struct tsg_gk20a *tsg; | 403 | struct tsg_gk20a *tsg; |
404 | struct device *dev; | 404 | struct device *dev; |
405 | int err; | ||
405 | 406 | ||
406 | dev = dev_from_gk20a(g); | 407 | dev = dev_from_gk20a(g); |
407 | 408 | ||
@@ -426,11 +427,24 @@ int gk20a_tsg_open(struct gk20a *g, struct file *filp) | |||
426 | 427 | ||
427 | filp->private_data = tsg; | 428 | filp->private_data = tsg; |
428 | 429 | ||
430 | if (g->ops.fifo.tsg_open) { | ||
431 | err = g->ops.fifo.tsg_open(tsg); | ||
432 | if (err) { | ||
433 | gk20a_err(dev, "tsg %d fifo open failed %d", | ||
434 | tsg->tsgid, err); | ||
435 | goto clean_up; | ||
436 | } | ||
437 | } | ||
438 | |||
429 | gk20a_dbg(gpu_dbg_fn, "tsg opened %d\n", tsg->tsgid); | 439 | gk20a_dbg(gpu_dbg_fn, "tsg opened %d\n", tsg->tsgid); |
430 | 440 | ||
431 | gk20a_sched_ctrl_tsg_added(g, tsg); | 441 | gk20a_sched_ctrl_tsg_added(g, tsg); |
432 | 442 | ||
433 | return 0; | 443 | return 0; |
444 | |||
445 | clean_up: | ||
446 | kref_put(&tsg->refcount, gk20a_tsg_release); | ||
447 | return err; | ||
434 | } | 448 | } |
435 | 449 | ||
436 | int gk20a_tsg_dev_open(struct inode *inode, struct file *filp) | 450 | int gk20a_tsg_dev_open(struct inode *inode, struct file *filp) |