summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/ctxsw_trace_gk20a.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/ctxsw_trace_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/ctxsw_trace_gk20a.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/ctxsw_trace_gk20a.c b/drivers/gpu/nvgpu/gk20a/ctxsw_trace_gk20a.c
index e33477f6..4ad2abd6 100644
--- a/drivers/gpu/nvgpu/gk20a/ctxsw_trace_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/ctxsw_trace_gk20a.c
@@ -276,14 +276,20 @@ int gk20a_ctxsw_dev_open(struct inode *inode, struct file *filp)
276 const int vmid = 0; 276 const int vmid = 0;
277 277
278 g = container_of(inode->i_cdev, struct gk20a, ctxsw.cdev); 278 g = container_of(inode->i_cdev, struct gk20a, ctxsw.cdev);
279 g = gk20a_get(g);
280 if (!g)
281 return -ENODEV;
282
279 gk20a_dbg(gpu_dbg_fn|gpu_dbg_ctxsw, "g=%p", g); 283 gk20a_dbg(gpu_dbg_fn|gpu_dbg_ctxsw, "g=%p", g);
280 284
281 if (!capable(CAP_SYS_ADMIN)) 285 if (!capable(CAP_SYS_ADMIN)) {
282 return -EPERM; 286 err = -EPERM;
287 goto free_ref;
288 }
283 289
284 err = gk20a_busy(g->dev); 290 err = gk20a_busy(g->dev);
285 if (err) 291 if (err)
286 return err; 292 goto free_ref;
287 293
288 trace = g->ctxsw_trace; 294 trace = g->ctxsw_trace;
289 if (!trace) { 295 if (!trace) {
@@ -325,7 +331,9 @@ done:
325 331
326idle: 332idle:
327 gk20a_idle(g->dev); 333 gk20a_idle(g->dev);
328 334free_ref:
335 if (err)
336 gk20a_put(g);
329 return err; 337 return err;
330} 338}
331 339
@@ -346,7 +354,7 @@ int gk20a_ctxsw_dev_release(struct inode *inode, struct file *filp)
346 dev->g->ops.fecs_trace.free_user_buffer(dev->g); 354 dev->g->ops.fecs_trace.free_user_buffer(dev->g);
347 dev->hdr = NULL; 355 dev->hdr = NULL;
348 } 356 }
349 357 gk20a_put(g);
350 return 0; 358 return 0;
351} 359}
352 360