summaryrefslogtreecommitdiffstats
path: root/drivers
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
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')
-rw-r--r--drivers/gpu/nvgpu/gk20a/channel_gk20a.h1
-rw-r--r--drivers/gpu/nvgpu/gk20a/fifo_gk20a.c20
-rw-r--r--drivers/gpu/nvgpu/vgpu/fifo_vgpu.c10
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;