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 | |
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
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/channel_gk20a.h | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/fifo_gk20a.c | 20 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/vgpu/fifo_vgpu.c | 10 |
3 files changed, 11 insertions, 20 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h index fbf1ad9e..1e9341ae 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h | |||
@@ -156,7 +156,6 @@ struct channel_gk20a { | |||
156 | struct mutex fence_lock; | 156 | struct mutex fence_lock; |
157 | } last_submit; | 157 | } last_submit; |
158 | 158 | ||
159 | void (*remove_support)(struct channel_gk20a *); | ||
160 | #if defined(CONFIG_GK20A_CYCLE_STATS) | 159 | #if defined(CONFIG_GK20A_CYCLE_STATS) |
161 | struct { | 160 | struct { |
162 | void *cyclestate_buffer; | 161 | void *cyclestate_buffer; |
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); |
diff --git a/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c b/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c index 294581b9..dc82d57b 100644 --- a/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c +++ b/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c | |||
@@ -267,10 +267,8 @@ static int vgpu_init_fifo_setup_sw(struct gk20a *g) | |||
267 | 267 | ||
268 | gk20a_dbg(gpu_dbg_map, "userd bar1 va = 0x%llx", f->userd.gpu_va); | 268 | gk20a_dbg(gpu_dbg_map, "userd bar1 va = 0x%llx", f->userd.gpu_va); |
269 | 269 | ||
270 | f->channel = kzalloc(f->num_channels * sizeof(*f->channel), | 270 | f->channel = vzalloc(f->num_channels * sizeof(*f->channel)); |
271 | GFP_KERNEL); | 271 | f->tsg = vzalloc(f->num_channels * sizeof(*f->tsg)); |
272 | f->tsg = kzalloc(f->num_channels * sizeof(*f->tsg), | ||
273 | GFP_KERNEL); | ||
274 | f->engine_info = kzalloc(f->max_engines * sizeof(*f->engine_info), | 272 | f->engine_info = kzalloc(f->max_engines * sizeof(*f->engine_info), |
275 | GFP_KERNEL); | 273 | GFP_KERNEL); |
276 | 274 | ||
@@ -315,9 +313,9 @@ clean_up: | |||
315 | 313 | ||
316 | memset(&f->userd, 0, sizeof(f->userd)); | 314 | memset(&f->userd, 0, sizeof(f->userd)); |
317 | 315 | ||
318 | kfree(f->channel); | 316 | vfree(f->channel); |
319 | f->channel = NULL; | 317 | f->channel = NULL; |
320 | kfree(f->tsg); | 318 | vfree(f->tsg); |
321 | f->tsg = NULL; | 319 | f->tsg = NULL; |
322 | kfree(f->engine_info); | 320 | kfree(f->engine_info); |
323 | f->engine_info = NULL; | 321 | f->engine_info = NULL; |