diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/mm_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 57 |
1 files changed, 3 insertions, 54 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c index 5051f028..2642a0b1 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c | |||
@@ -1192,57 +1192,6 @@ static void nvgpu_vm_unmap_user(struct vm_gk20a *vm, u64 offset, | |||
1192 | nvgpu_mutex_release(&vm->update_gmmu_lock); | 1192 | nvgpu_mutex_release(&vm->update_gmmu_lock); |
1193 | } | 1193 | } |
1194 | 1194 | ||
1195 | u64 gk20a_vm_alloc_va(struct vm_gk20a *vm, | ||
1196 | u64 size, | ||
1197 | enum gmmu_pgsz_gk20a gmmu_pgsz_idx) | ||
1198 | |||
1199 | { | ||
1200 | struct nvgpu_allocator *vma = vm->vma[gmmu_pgsz_idx]; | ||
1201 | u64 offset; | ||
1202 | u64 gmmu_page_size = vm->gmmu_page_sizes[gmmu_pgsz_idx]; | ||
1203 | struct gk20a *g = vm->mm->g; | ||
1204 | |||
1205 | if (gmmu_pgsz_idx >= gmmu_nr_page_sizes) { | ||
1206 | nvgpu_warn(g, | ||
1207 | "invalid page size requested in gk20a vm alloc"); | ||
1208 | return 0; | ||
1209 | } | ||
1210 | |||
1211 | if ((gmmu_pgsz_idx == gmmu_page_size_big) && !vm->big_pages) { | ||
1212 | nvgpu_warn(g, "unsupportd page size requested"); | ||
1213 | return 0; | ||
1214 | |||
1215 | } | ||
1216 | |||
1217 | /* Be certain we round up to gmmu_page_size if needed */ | ||
1218 | size = (size + ((u64)gmmu_page_size - 1)) & ~((u64)gmmu_page_size - 1); | ||
1219 | gk20a_dbg_info("size=0x%llx @ pgsz=%dKB", size, | ||
1220 | vm->gmmu_page_sizes[gmmu_pgsz_idx]>>10); | ||
1221 | |||
1222 | offset = nvgpu_alloc(vma, size); | ||
1223 | if (!offset) { | ||
1224 | nvgpu_err(vm->mm->g, | ||
1225 | "%s oom: sz=0x%llx", vma->name, size); | ||
1226 | return 0; | ||
1227 | } | ||
1228 | |||
1229 | gk20a_dbg_fn("%s found addr: 0x%llx", vma->name, offset); | ||
1230 | return offset; | ||
1231 | } | ||
1232 | |||
1233 | int gk20a_vm_free_va(struct vm_gk20a *vm, | ||
1234 | u64 offset, u64 size, | ||
1235 | enum gmmu_pgsz_gk20a pgsz_idx) | ||
1236 | { | ||
1237 | struct nvgpu_allocator *vma = vm->vma[pgsz_idx]; | ||
1238 | |||
1239 | gk20a_dbg_info("%s free addr=0x%llx, size=0x%llx", | ||
1240 | vma->name, offset, size); | ||
1241 | nvgpu_free(vma, offset); | ||
1242 | |||
1243 | return 0; | ||
1244 | } | ||
1245 | |||
1246 | int setup_buffer_kind_and_compression(struct vm_gk20a *vm, | 1195 | int setup_buffer_kind_and_compression(struct vm_gk20a *vm, |
1247 | u32 flags, | 1196 | u32 flags, |
1248 | struct buffer_attrs *bfr, | 1197 | struct buffer_attrs *bfr, |
@@ -1313,7 +1262,7 @@ u64 gk20a_locked_gmmu_map(struct vm_gk20a *vm, | |||
1313 | 1262 | ||
1314 | /* Allocate (or validate when map_offset != 0) the virtual address. */ | 1263 | /* Allocate (or validate when map_offset != 0) the virtual address. */ |
1315 | if (!map_offset) { | 1264 | if (!map_offset) { |
1316 | map_offset = gk20a_vm_alloc_va(vm, size, | 1265 | map_offset = __nvgpu_vm_alloc_va(vm, size, |
1317 | pgsz_idx); | 1266 | pgsz_idx); |
1318 | if (!map_offset) { | 1267 | if (!map_offset) { |
1319 | nvgpu_err(g, "failed to allocate va space"); | 1268 | nvgpu_err(g, "failed to allocate va space"); |
@@ -1364,7 +1313,7 @@ u64 gk20a_locked_gmmu_map(struct vm_gk20a *vm, | |||
1364 | return map_offset; | 1313 | return map_offset; |
1365 | fail_validate: | 1314 | fail_validate: |
1366 | if (allocated) | 1315 | if (allocated) |
1367 | gk20a_vm_free_va(vm, map_offset, size, pgsz_idx); | 1316 | __nvgpu_vm_free_va(vm, map_offset, pgsz_idx); |
1368 | fail_alloc: | 1317 | fail_alloc: |
1369 | nvgpu_err(g, "%s: failed with err=%d\n", __func__, err); | 1318 | nvgpu_err(g, "%s: failed with err=%d\n", __func__, err); |
1370 | return 0; | 1319 | return 0; |
@@ -1383,7 +1332,7 @@ void gk20a_locked_gmmu_unmap(struct vm_gk20a *vm, | |||
1383 | struct gk20a *g = gk20a_from_vm(vm); | 1332 | struct gk20a *g = gk20a_from_vm(vm); |
1384 | 1333 | ||
1385 | if (va_allocated) { | 1334 | if (va_allocated) { |
1386 | err = gk20a_vm_free_va(vm, vaddr, size, pgsz_idx); | 1335 | err = __nvgpu_vm_free_va(vm, vaddr, pgsz_idx); |
1387 | if (err) { | 1336 | if (err) { |
1388 | nvgpu_err(g, "failed to free va"); | 1337 | nvgpu_err(g, "failed to free va"); |
1389 | return; | 1338 | return; |