summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorRichard Zhao <rizhao@nvidia.com>2016-11-29 20:43:12 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2016-12-08 04:40:12 -0500
commit9bc735ac6a0776f76604f91b6c2659450aef3028 (patch)
tree0ef9e6c61600603712d8817b57a60e3b2f626cf1 /drivers
parentb6411b02908b4f8ccf0ee754ea250c01ecb3f400 (diff)
gpu: nvgpu: vgpu: fix va leak when call gk20a_vm_free_va
page size index needs to be set explicitly when call gk20a_vm_free_va. Bug 200255799 JIRA VFND-3033 Change-Id: I376c63e724b8f59aee389c54ca1589683536f043 Signed-off-by: Richard Zhao <rizhao@nvidia.com> Reviewed-on: http://git-master/r/1262586 (cherry picked from commit 82c05633f17fa094d8e08c8a0fa4bad2d3275268) Reviewed-on: http://git-master/r/1263403 Reviewed-by: Aingara Paramakuru <aparamakuru@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Vladislav Buzov <vbuzov@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/nvgpu/vgpu/gr_vgpu.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/drivers/gpu/nvgpu/vgpu/gr_vgpu.c b/drivers/gpu/nvgpu/vgpu/gr_vgpu.c
index 65e3589b..f1b498ca 100644
--- a/drivers/gpu/nvgpu/vgpu/gr_vgpu.c
+++ b/drivers/gpu/nvgpu/vgpu/gr_vgpu.c
@@ -208,7 +208,7 @@ static int vgpu_gr_map_global_ctx_buffers(struct gk20a *g,
208 for (i = 0; i < NR_GLOBAL_CTX_BUF_VA; i++) { 208 for (i = 0; i < NR_GLOBAL_CTX_BUF_VA; i++) {
209 if (g_bfr_va[i]) { 209 if (g_bfr_va[i]) {
210 gk20a_vm_free_va(ch_vm, g_bfr_va[i], 210 gk20a_vm_free_va(ch_vm, g_bfr_va[i],
211 g_bfr_size[i], 0); 211 g_bfr_size[i], gmmu_page_size_kernel);
212 g_bfr_va[i] = 0; 212 g_bfr_va[i] = 0;
213 } 213 }
214 } 214 }
@@ -238,7 +238,8 @@ static void vgpu_gr_unmap_global_ctx_buffers(struct channel_gk20a *c)
238 238
239 for (i = 0; i < NR_GLOBAL_CTX_BUF_VA; i++) { 239 for (i = 0; i < NR_GLOBAL_CTX_BUF_VA; i++) {
240 if (g_bfr_va[i]) { 240 if (g_bfr_va[i]) {
241 gk20a_vm_free_va(ch_vm, g_bfr_va[i], g_bfr_size[i], 0); 241 gk20a_vm_free_va(ch_vm, g_bfr_va[i], g_bfr_size[i],
242 gmmu_page_size_kernel);
242 g_bfr_va[i] = 0; 243 g_bfr_va[i] = 0;
243 g_bfr_size[i] = 0; 244 g_bfr_size[i] = 0;
244 } 245 }
@@ -292,7 +293,7 @@ int vgpu_gr_alloc_gr_ctx(struct gk20a *g,
292 if (unlikely(err)) { 293 if (unlikely(err)) {
293 gk20a_err(dev_from_gk20a(g), "fail to alloc gr_ctx"); 294 gk20a_err(dev_from_gk20a(g), "fail to alloc gr_ctx");
294 gk20a_vm_free_va(vm, gr_ctx->mem.gpu_va, 295 gk20a_vm_free_va(vm, gr_ctx->mem.gpu_va,
295 gr_ctx->mem.size, 0); 296 gr_ctx->mem.size, gmmu_page_size_kernel);
296 kfree(gr_ctx); 297 kfree(gr_ctx);
297 } else { 298 } else {
298 gr_ctx->virt_ctx = p->gr_ctx_handle; 299 gr_ctx->virt_ctx = p->gr_ctx_handle;
@@ -318,7 +319,8 @@ void vgpu_gr_free_gr_ctx(struct gk20a *g, struct vm_gk20a *vm,
318 err = vgpu_comm_sendrecv(&msg, sizeof(msg), sizeof(msg)); 319 err = vgpu_comm_sendrecv(&msg, sizeof(msg), sizeof(msg));
319 WARN_ON(err || msg.ret); 320 WARN_ON(err || msg.ret);
320 321
321 gk20a_vm_free_va(vm, gr_ctx->mem.gpu_va, gr_ctx->mem.size, 0); 322 gk20a_vm_free_va(vm, gr_ctx->mem.gpu_va, gr_ctx->mem.size,
323 gmmu_page_size_kernel);
322 kfree(gr_ctx); 324 kfree(gr_ctx);
323 } 325 }
324} 326}
@@ -356,7 +358,7 @@ static int vgpu_gr_alloc_channel_patch_ctx(struct gk20a *g,
356 err = vgpu_comm_sendrecv(&msg, sizeof(msg), sizeof(msg)); 358 err = vgpu_comm_sendrecv(&msg, sizeof(msg), sizeof(msg));
357 if (err || msg.ret) { 359 if (err || msg.ret) {
358 gk20a_vm_free_va(ch_vm, patch_ctx->mem.gpu_va, 360 gk20a_vm_free_va(ch_vm, patch_ctx->mem.gpu_va,
359 patch_ctx->mem.size, 0); 361 patch_ctx->mem.size, gmmu_page_size_kernel);
360 err = -ENOMEM; 362 err = -ENOMEM;
361 } 363 }
362 364
@@ -382,7 +384,7 @@ static void vgpu_gr_free_channel_patch_ctx(struct channel_gk20a *c)
382 WARN_ON(err || msg.ret); 384 WARN_ON(err || msg.ret);
383 385
384 gk20a_vm_free_va(ch_vm, patch_ctx->mem.gpu_va, 386 gk20a_vm_free_va(ch_vm, patch_ctx->mem.gpu_va,
385 patch_ctx->mem.size, 0); 387 patch_ctx->mem.size, gmmu_page_size_kernel);
386 patch_ctx->mem.gpu_va = 0; 388 patch_ctx->mem.gpu_va = 0;
387 } 389 }
388} 390}
@@ -407,7 +409,8 @@ static void vgpu_gr_free_channel_pm_ctx(struct channel_gk20a *c)
407 err = vgpu_comm_sendrecv(&msg, sizeof(msg), sizeof(msg)); 409 err = vgpu_comm_sendrecv(&msg, sizeof(msg), sizeof(msg));
408 WARN_ON(err || msg.ret); 410 WARN_ON(err || msg.ret);
409 411
410 gk20a_vm_free_va(c->vm, pm_ctx->mem.gpu_va, pm_ctx->mem.size, 0); 412 gk20a_vm_free_va(c->vm, pm_ctx->mem.gpu_va, pm_ctx->mem.size,
413 gmmu_page_size_kernel);
411 pm_ctx->mem.gpu_va = 0; 414 pm_ctx->mem.gpu_va = 0;
412} 415}
413 416