diff --git a/drivers/gpu/nvgpu/os/linux/ioctl_prof.c b/drivers/gpu/nvgpu/os/linux/ioctl_prof.c index a2d16654f..64615f71f 100644 --- a/drivers/gpu/nvgpu/os/linux/ioctl_prof.c +++ b/drivers/gpu/nvgpu/os/linux/ioctl_prof.c @@ -789,11 +789,18 @@ static int nvgpu_prof_ioctl_vab_reserve(struct nvgpu_profiler_object *prof, return -EINVAL; } + err = gk20a_busy(g); + if (err != 0) { + nvgpu_err(g, "failed to poweron"); + return -EINVAL; + } + ckr = nvgpu_kzalloc(g, sizeof(struct nvgpu_vab_range_checker) * arg->num_range_checkers); if (copy_from_user(ckr, user_ckr, sizeof(struct nvgpu_vab_range_checker) * arg->num_range_checkers)) { + gk20a_idle(g); return -EFAULT; } @@ -801,6 +808,8 @@ static int nvgpu_prof_ioctl_vab_reserve(struct nvgpu_profiler_object *prof, nvgpu_kfree(g, ckr); + gk20a_idle(g); + return err; } @@ -811,6 +820,12 @@ static int nvgpu_prof_ioctl_vab_flush(struct nvgpu_profiler_object *prof, struct gk20a *g = prof->g; u64 *user_data = nvgpu_kzalloc(g, arg->buffer_size); + err = gk20a_busy(g); + if (err != 0) { + nvgpu_err(g, "failed to poweron"); + return -EINVAL; + } + err = g->ops.fb.vab.dump_and_clear(g, user_data, arg->buffer_size); if (err < 0) { goto fail; @@ -824,6 +839,7 @@ static int nvgpu_prof_ioctl_vab_flush(struct nvgpu_profiler_object *prof, fail: nvgpu_kfree(g, user_data); + gk20a_idle(g); return err; } #endif