mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-22 17:36:20 +03:00
gpu: nvgpu: fix remap page size flag handling
When destroying a virtual memory pool the associated page size must
be set in the nvgpu_vm_remap_op structure.
This patch adds a new nvgpu_vm_remap_page_size_flag() routine that
converts the page size derived from the vm/vm_area structs to the
corresponding NVGPU_VM_REMAP_OP_FLAGS_PAGESIZE bit.
Bug 3669908
Change-Id: Idca77cc36d353777b399c872f68a1f5231ddb8dd
Signed-off-by: Scott Long <scottl@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2734822
Tested-by: Sagar Kamble <skamble@nvidia.com>
Reviewed-by: Sagar Kamble <skamble@nvidia.com>
Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com>
GVS: Gerrit_Virtual_Submit
(cherry picked from commit 868b723b16)
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2740035
Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com>
Reviewed-by: svc-mobile-cert <svc-mobile-cert@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
ff3823eeb4
commit
ac4d8b9bff
@@ -778,6 +778,8 @@ void nvgpu_vm_remap_vpool_destroy(struct vm_gk20a *vm,
|
|||||||
u32 num_ops = 1;
|
u32 num_ops = 1;
|
||||||
int err;
|
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.virt_offset_in_pages = vpool->base_offset_in_pages;
|
||||||
op.num_pages = vpool->num_pages;
|
op.num_pages = vpool->num_pages;
|
||||||
|
|
||||||
|
|||||||
@@ -155,18 +155,35 @@ static inline u64 nvgpu_vm_remap_page_size(struct nvgpu_vm_remap_op *op)
|
|||||||
{
|
{
|
||||||
u64 pagesize = 0;
|
u64 pagesize = 0;
|
||||||
|
|
||||||
/* validate_map/unmap_op ensures a single pagesize flag */
|
/* validate map/unmap_op ensures a single pagesize flag */
|
||||||
if (op->flags & NVGPU_VM_REMAP_OP_FLAGS_PAGESIZE_4K)
|
if (op->flags & NVGPU_VM_REMAP_OP_FLAGS_PAGESIZE_4K) {
|
||||||
pagesize = SZ_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;
|
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;
|
pagesize = SZ_128K;
|
||||||
|
}
|
||||||
|
|
||||||
nvgpu_assert(pagesize);
|
nvgpu_assert(pagesize);
|
||||||
return 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.
|
* This structure describes a virtual memory pool.
|
||||||
* There is one virtual memory pool for each sparse VM area allocation.
|
* There is one virtual memory pool for each sparse VM area allocation.
|
||||||
|
|||||||
Reference in New Issue
Block a user