diff options
author | Terje Bergstrom <tbergstrom@nvidia.com> | 2016-04-18 15:35:57 -0400 |
---|---|---|
committer | Terje Bergstrom <tbergstrom@nvidia.com> | 2016-04-28 15:47:04 -0400 |
commit | 556643179f1223555e352b48be31df3eda9390b6 (patch) | |
tree | 4359a0ff2de7f549b9e0b83ffc24347b6466f1bd /drivers/gpu/nvgpu/gk20a/fifo_gk20a.c | |
parent | 610a523b7d9c62e5b4d6444f738acc62d779713b (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.c | 20 |
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); |