diff --git a/drivers/gpu/nvgpu/common/mm/vm_remap.c b/drivers/gpu/nvgpu/common/mm/vm_remap.c index f729d688b..e08cfbf4c 100644 --- a/drivers/gpu/nvgpu/common/mm/vm_remap.c +++ b/drivers/gpu/nvgpu/common/mm/vm_remap.c @@ -778,6 +778,8 @@ void nvgpu_vm_remap_vpool_destroy(struct vm_gk20a *vm, u32 num_ops = 1; int err; + op.flags = nvgpu_vm_remap_page_size_flag( + vm->gmmu_page_sizes[vm_area->pgsz_idx]); op.virt_offset_in_pages = vpool->base_offset_in_pages; op.num_pages = vpool->num_pages; diff --git a/drivers/gpu/nvgpu/include/nvgpu/vm_remap.h b/drivers/gpu/nvgpu/include/nvgpu/vm_remap.h index 767ce41b1..e2d7a6950 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/vm_remap.h +++ b/drivers/gpu/nvgpu/include/nvgpu/vm_remap.h @@ -155,18 +155,35 @@ static inline u64 nvgpu_vm_remap_page_size(struct nvgpu_vm_remap_op *op) { u64 pagesize = 0; - /* validate_map/unmap_op ensures a single pagesize flag */ - if (op->flags & NVGPU_VM_REMAP_OP_FLAGS_PAGESIZE_4K) + /* validate map/unmap_op ensures a single pagesize flag */ + if (op->flags & NVGPU_VM_REMAP_OP_FLAGS_PAGESIZE_4K) { pagesize = SZ_4K; - if (op->flags & NVGPU_VM_REMAP_OP_FLAGS_PAGESIZE_64K) + } else if (op->flags & NVGPU_VM_REMAP_OP_FLAGS_PAGESIZE_64K) { pagesize = SZ_64K; - if (op->flags & NVGPU_VM_REMAP_OP_FLAGS_PAGESIZE_128K) + } else if (op->flags & NVGPU_VM_REMAP_OP_FLAGS_PAGESIZE_128K) { pagesize = SZ_128K; + } nvgpu_assert(pagesize); return pagesize; } +static inline u32 nvgpu_vm_remap_page_size_flag(u64 pagesize) +{ + u32 flag = 0; + + if (pagesize == SZ_4K) { + flag = NVGPU_VM_REMAP_OP_FLAGS_PAGESIZE_4K; + } else if (pagesize == SZ_64K) { + flag = NVGPU_VM_REMAP_OP_FLAGS_PAGESIZE_64K; + } else if (pagesize == SZ_128K) { + flag = NVGPU_VM_REMAP_OP_FLAGS_PAGESIZE_128K; + } + + nvgpu_assert(flag); + return flag; +} + /** * This structure describes a virtual memory pool. * There is one virtual memory pool for each sparse VM area allocation.