From 1bc3b3436f25a8a1de3dd336984dfaa014737a16 Mon Sep 17 00:00:00 2001 From: Terje Bergstrom Date: Thu, 4 Sep 2014 16:08:29 +0300 Subject: gpu: nvgpu: Use pgsz_idx instead of page_size Alloc space writes the page size to a field that requires pgsz_idx. That can cause corruption in internal kernel structures. Clear_sparse treated a parameter as page size instead of index. Bug 1549451 Change-Id: I73ce17b99aae6865056facce72d2ab9ca8b3f81d Signed-off-by: Terje Bergstrom Reviewed-on: http://git-master/r/495692 --- drivers/gpu/nvgpu/gm20b/mm_gm20b.c | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) (limited to 'drivers/gpu/nvgpu/gm20b/mm_gm20b.c') diff --git a/drivers/gpu/nvgpu/gm20b/mm_gm20b.c b/drivers/gpu/nvgpu/gm20b/mm_gm20b.c index 0f9749f7..afb04cae 100644 --- a/drivers/gpu/nvgpu/gm20b/mm_gm20b.c +++ b/drivers/gpu/nvgpu/gm20b/mm_gm20b.c @@ -272,19 +272,11 @@ fail: } void gm20b_vm_clear_sparse(struct vm_gk20a *vm, u64 vaddr, - u64 size, u32 pgsz) { - int pgsz_idx; + u64 size, u32 pgsz_idx) { u64 vaddr_hi; u32 pde_lo, pde_hi, pde_i; gk20a_dbg_fn(""); - /* determine pagesz idx */ - for (pgsz_idx = gmmu_page_size_small; - pgsz_idx < gmmu_nr_page_sizes; - pgsz_idx++) { - if (gmmu_page_sizes[pgsz_idx] == pgsz) - break; - } vaddr_hi = vaddr + size - 1; pde_range_from_vaddr_range(vm, vaddr, @@ -292,8 +284,8 @@ void gm20b_vm_clear_sparse(struct vm_gk20a *vm, u64 vaddr, &pde_lo, &pde_hi); gk20a_dbg_info("vaddr: 0x%llx, vaddr_hi: 0x%llx, pde_lo: 0x%x, " - "pde_hi: 0x%x, pgsz: %d, pde_stride_shift: %d", - vaddr, vaddr_hi, pde_lo, pde_hi, pgsz, + "pde_hi: 0x%x, pgsz_idx: %d, pde_stride_shift: %d", + vaddr, vaddr_hi, pde_lo, pde_hi, pgsz_idx, vm->mm->pde_stride_shift); for (pde_i = pde_lo; pde_i <= pde_hi; pde_i++) { -- cgit v1.2.2