diff options
-rw-r--r-- | drivers/gpu/nvgpu/vgpu/fifo_vgpu.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c b/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c index a2ecd864..664f8c5b 100644 --- a/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c +++ b/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c | |||
@@ -271,10 +271,12 @@ static int vgpu_init_fifo_setup_sw(struct gk20a *g) | |||
271 | 271 | ||
272 | f->channel = kzalloc(f->num_channels * sizeof(*f->channel), | 272 | f->channel = kzalloc(f->num_channels * sizeof(*f->channel), |
273 | GFP_KERNEL); | 273 | GFP_KERNEL); |
274 | f->tsg = kzalloc(f->num_channels * sizeof(*f->tsg), | ||
275 | GFP_KERNEL); | ||
274 | f->engine_info = kzalloc(f->max_engines * sizeof(*f->engine_info), | 276 | f->engine_info = kzalloc(f->max_engines * sizeof(*f->engine_info), |
275 | GFP_KERNEL); | 277 | GFP_KERNEL); |
276 | 278 | ||
277 | if (!(f->channel && f->engine_info)) { | 279 | if (!(f->channel && f->tsg && f->engine_info)) { |
278 | err = -ENOMEM; | 280 | err = -ENOMEM; |
279 | goto clean_up; | 281 | goto clean_up; |
280 | } | 282 | } |
@@ -296,7 +298,9 @@ static int vgpu_init_fifo_setup_sw(struct gk20a *g) | |||
296 | f->userd.gpu_va + chid * f->userd_entry_size; | 298 | f->userd.gpu_va + chid * f->userd_entry_size; |
297 | 299 | ||
298 | gk20a_init_channel_support(g, chid); | 300 | gk20a_init_channel_support(g, chid); |
301 | gk20a_init_tsg_support(g, chid); | ||
299 | } | 302 | } |
303 | mutex_init(&f->tsg_inuse_mutex); | ||
300 | 304 | ||
301 | f->deferred_reset_pending = false; | 305 | f->deferred_reset_pending = false; |
302 | mutex_init(&f->deferred_reset_mutex); | 306 | mutex_init(&f->deferred_reset_mutex); |
@@ -315,6 +319,8 @@ clean_up: | |||
315 | 319 | ||
316 | kfree(f->channel); | 320 | kfree(f->channel); |
317 | f->channel = NULL; | 321 | f->channel = NULL; |
322 | kfree(f->tsg); | ||
323 | f->tsg = NULL; | ||
318 | kfree(f->engine_info); | 324 | kfree(f->engine_info); |
319 | f->engine_info = NULL; | 325 | f->engine_info = NULL; |
320 | 326 | ||