summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2016-04-18 15:35:57 -0400
committerTerje Bergstrom <tbergstrom@nvidia.com>2016-04-28 15:47:04 -0400
commit556643179f1223555e352b48be31df3eda9390b6 (patch)
tree4359a0ff2de7f549b9e0b83ffc24347b6466f1bd /drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
parent610a523b7d9c62e5b4d6444f738acc62d779713b (diff)
gpu: nvgpu: Allocate channel table with vmalloc
Channel table can be bigger than one page, so allocate it with vmalloc. Also add a free for tsg table, which did not exist before, and remove per-channel remove_channel callback which was never used. JIRA DNVGPU-50 Change-Id: I3ee84b65d94881df52bf0618bf4c5f2e85758223 Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/1129244 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Ken Adams <kadams@nvidia.com> GVS: Gerrit_Virtual_Submit
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/fifo_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/fifo_gk20a.c20
1 files changed, 7 insertions, 13 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
index d8c07c89..e69fb288 100644
--- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
@@ -167,14 +167,8 @@ static void gk20a_remove_fifo_support(struct fifo_gk20a *f)
167 167
168 gk20a_dbg_fn(""); 168 gk20a_dbg_fn("");
169 169
170 if (f->channel) { 170 vfree(f->channel);
171 int c; 171 vfree(f->tsg);
172 for (c = 0; c < f->num_channels; c++) {
173 if (f->channel[c].remove_support)
174 f->channel[c].remove_support(f->channel+c);
175 }
176 kfree(f->channel);
177 }
178 gk20a_gmmu_unmap_free(&g->mm.bar1.vm, &f->userd); 172 gk20a_gmmu_unmap_free(&g->mm.bar1.vm, &f->userd);
179 173
180 engine_info = f->engine_info + ENGINE_GR_GK20A; 174 engine_info = f->engine_info + ENGINE_GR_GK20A;
@@ -502,10 +496,8 @@ static int gk20a_init_fifo_setup_sw(struct gk20a *g)
502 496
503 gk20a_dbg(gpu_dbg_map, "userd bar1 va = 0x%llx", f->userd.gpu_va); 497 gk20a_dbg(gpu_dbg_map, "userd bar1 va = 0x%llx", f->userd.gpu_va);
504 498
505 f->channel = kzalloc(f->num_channels * sizeof(*f->channel), 499 f->channel = vzalloc(f->num_channels * sizeof(*f->channel));
506 GFP_KERNEL); 500 f->tsg = vzalloc(f->num_channels * sizeof(*f->tsg));
507 f->tsg = kzalloc(f->num_channels * sizeof(*f->tsg),
508 GFP_KERNEL);
509 f->pbdma_map = kzalloc(f->num_pbdma * sizeof(*f->pbdma_map), 501 f->pbdma_map = kzalloc(f->num_pbdma * sizeof(*f->pbdma_map),
510 GFP_KERNEL); 502 GFP_KERNEL);
511 f->engine_info = kzalloc(f->max_engines * sizeof(*f->engine_info), 503 f->engine_info = kzalloc(f->max_engines * sizeof(*f->engine_info),
@@ -555,8 +547,10 @@ clean_up:
555 gk20a_dbg_fn("fail"); 547 gk20a_dbg_fn("fail");
556 gk20a_gmmu_unmap_free(&g->mm.bar1.vm, &f->userd); 548 gk20a_gmmu_unmap_free(&g->mm.bar1.vm, &f->userd);
557 549
558 kfree(f->channel); 550 vfree(f->channel);
559 f->channel = NULL; 551 f->channel = NULL;
552 vfree(f->tsg);
553 f->tsg = NULL;
560 kfree(f->pbdma_map); 554 kfree(f->pbdma_map);
561 f->pbdma_map = NULL; 555 f->pbdma_map = NULL;
562 kfree(f->engine_info); 556 kfree(f->engine_info);