diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/mm_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c index b1d709f0..709f2fd2 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c | |||
@@ -1274,7 +1274,8 @@ static struct vm_reserved_va_node *addr_to_reservation(struct vm_gk20a *vm, | |||
1274 | u64 addr) | 1274 | u64 addr) |
1275 | { | 1275 | { |
1276 | struct vm_reserved_va_node *va_node; | 1276 | struct vm_reserved_va_node *va_node; |
1277 | list_for_each_entry(va_node, &vm->reserved_va_list, reserved_va_list) | 1277 | nvgpu_list_for_each_entry(va_node, &vm->reserved_va_list, |
1278 | vm_reserved_va_node, reserved_va_list) | ||
1278 | if (addr >= va_node->vaddr_start && | 1279 | if (addr >= va_node->vaddr_start && |
1279 | addr < (u64)va_node->vaddr_start + (u64)va_node->size) | 1280 | addr < (u64)va_node->vaddr_start + (u64)va_node->size) |
1280 | return va_node; | 1281 | return va_node; |
@@ -2429,7 +2430,7 @@ u64 gk20a_vm_map(struct vm_gk20a *vm, | |||
2429 | mapped_buffer->user_mapped = user_mapped ? 1 : 0; | 2430 | mapped_buffer->user_mapped = user_mapped ? 1 : 0; |
2430 | mapped_buffer->own_mem_ref = user_mapped; | 2431 | mapped_buffer->own_mem_ref = user_mapped; |
2431 | INIT_LIST_HEAD(&mapped_buffer->unmap_list); | 2432 | INIT_LIST_HEAD(&mapped_buffer->unmap_list); |
2432 | INIT_LIST_HEAD(&mapped_buffer->va_buffers_list); | 2433 | nvgpu_init_list_node(&mapped_buffer->va_buffers_list); |
2433 | kref_init(&mapped_buffer->ref); | 2434 | kref_init(&mapped_buffer->ref); |
2434 | 2435 | ||
2435 | err = insert_mapped_buffer(&vm->mapped_buffers, mapped_buffer); | 2436 | err = insert_mapped_buffer(&vm->mapped_buffers, mapped_buffer); |
@@ -2444,7 +2445,7 @@ u64 gk20a_vm_map(struct vm_gk20a *vm, | |||
2444 | gk20a_dbg_info("allocated va @ 0x%llx", map_offset); | 2445 | gk20a_dbg_info("allocated va @ 0x%llx", map_offset); |
2445 | 2446 | ||
2446 | if (va_node) { | 2447 | if (va_node) { |
2447 | list_add_tail(&mapped_buffer->va_buffers_list, | 2448 | nvgpu_list_add_tail(&mapped_buffer->va_buffers_list, |
2448 | &va_node->va_buffers_list); | 2449 | &va_node->va_buffers_list); |
2449 | mapped_buffer->va_node = va_node; | 2450 | mapped_buffer->va_node = va_node; |
2450 | } | 2451 | } |
@@ -3877,8 +3878,8 @@ void gk20a_vm_unmap_locked(struct mapped_buffer_node *mapped_buffer, | |||
3877 | 3878 | ||
3878 | /* remove from mapped buffer tree and remove list, free */ | 3879 | /* remove from mapped buffer tree and remove list, free */ |
3879 | rb_erase(&mapped_buffer->node, &vm->mapped_buffers); | 3880 | rb_erase(&mapped_buffer->node, &vm->mapped_buffers); |
3880 | if (!list_empty(&mapped_buffer->va_buffers_list)) | 3881 | if (!nvgpu_list_empty(&mapped_buffer->va_buffers_list)) |
3881 | list_del(&mapped_buffer->va_buffers_list); | 3882 | nvgpu_list_del(&mapped_buffer->va_buffers_list); |
3882 | 3883 | ||
3883 | /* keep track of mapped buffers */ | 3884 | /* keep track of mapped buffers */ |
3884 | if (mapped_buffer->user_mapped) | 3885 | if (mapped_buffer->user_mapped) |
@@ -3960,9 +3961,10 @@ static void gk20a_vm_remove_support_nofree(struct vm_gk20a *vm) | |||
3960 | } | 3961 | } |
3961 | 3962 | ||
3962 | /* destroy remaining reserved memory areas */ | 3963 | /* destroy remaining reserved memory areas */ |
3963 | list_for_each_entry_safe(va_node, va_node_tmp, &vm->reserved_va_list, | 3964 | nvgpu_list_for_each_entry_safe(va_node, va_node_tmp, |
3964 | reserved_va_list) { | 3965 | &vm->reserved_va_list, |
3965 | list_del(&va_node->reserved_va_list); | 3966 | vm_reserved_va_node, reserved_va_list) { |
3967 | nvgpu_list_del(&va_node->reserved_va_list); | ||
3966 | nvgpu_kfree(vm->mm->g, va_node); | 3968 | nvgpu_kfree(vm->mm->g, va_node); |
3967 | } | 3969 | } |
3968 | 3970 | ||
@@ -4395,7 +4397,7 @@ int gk20a_init_vm(struct mm_gk20a *mm, | |||
4395 | 4397 | ||
4396 | nvgpu_mutex_init(&vm->update_gmmu_lock); | 4398 | nvgpu_mutex_init(&vm->update_gmmu_lock); |
4397 | kref_init(&vm->ref); | 4399 | kref_init(&vm->ref); |
4398 | INIT_LIST_HEAD(&vm->reserved_va_list); | 4400 | nvgpu_init_list_node(&vm->reserved_va_list); |
4399 | 4401 | ||
4400 | /* | 4402 | /* |
4401 | * This is only necessary for channel address spaces. The best way to | 4403 | * This is only necessary for channel address spaces. The best way to |
@@ -4539,8 +4541,8 @@ int gk20a_vm_alloc_space(struct gk20a_as_share *as_share, | |||
4539 | va_node->vaddr_start = vaddr_start; | 4541 | va_node->vaddr_start = vaddr_start; |
4540 | va_node->size = (u64)args->page_size * (u64)args->pages; | 4542 | va_node->size = (u64)args->page_size * (u64)args->pages; |
4541 | va_node->pgsz_idx = pgsz_idx; | 4543 | va_node->pgsz_idx = pgsz_idx; |
4542 | INIT_LIST_HEAD(&va_node->va_buffers_list); | 4544 | nvgpu_init_list_node(&va_node->va_buffers_list); |
4543 | INIT_LIST_HEAD(&va_node->reserved_va_list); | 4545 | nvgpu_init_list_node(&va_node->reserved_va_list); |
4544 | 4546 | ||
4545 | nvgpu_mutex_acquire(&vm->update_gmmu_lock); | 4547 | nvgpu_mutex_acquire(&vm->update_gmmu_lock); |
4546 | 4548 | ||
@@ -4569,7 +4571,7 @@ int gk20a_vm_alloc_space(struct gk20a_as_share *as_share, | |||
4569 | 4571 | ||
4570 | va_node->sparse = true; | 4572 | va_node->sparse = true; |
4571 | } | 4573 | } |
4572 | list_add_tail(&va_node->reserved_va_list, &vm->reserved_va_list); | 4574 | nvgpu_list_add_tail(&va_node->reserved_va_list, &vm->reserved_va_list); |
4573 | 4575 | ||
4574 | nvgpu_mutex_release(&vm->update_gmmu_lock); | 4576 | nvgpu_mutex_release(&vm->update_gmmu_lock); |
4575 | 4577 | ||
@@ -4608,13 +4610,14 @@ int gk20a_vm_free_space(struct gk20a_as_share *as_share, | |||
4608 | /* Decrement the ref count on all buffers in this va_node. This | 4610 | /* Decrement the ref count on all buffers in this va_node. This |
4609 | * allows userspace to let the kernel free mappings that are | 4611 | * allows userspace to let the kernel free mappings that are |
4610 | * only used by this va_node. */ | 4612 | * only used by this va_node. */ |
4611 | list_for_each_entry_safe(buffer, n, | 4613 | nvgpu_list_for_each_entry_safe(buffer, n, |
4612 | &va_node->va_buffers_list, va_buffers_list) { | 4614 | &va_node->va_buffers_list, |
4613 | list_del_init(&buffer->va_buffers_list); | 4615 | mapped_buffer_node, va_buffers_list) { |
4616 | nvgpu_list_del(&buffer->va_buffers_list); | ||
4614 | kref_put(&buffer->ref, gk20a_vm_unmap_locked_kref); | 4617 | kref_put(&buffer->ref, gk20a_vm_unmap_locked_kref); |
4615 | } | 4618 | } |
4616 | 4619 | ||
4617 | list_del(&va_node->reserved_va_list); | 4620 | nvgpu_list_del(&va_node->reserved_va_list); |
4618 | 4621 | ||
4619 | /* if this was a sparse mapping, free the va */ | 4622 | /* if this was a sparse mapping, free the va */ |
4620 | if (va_node->sparse) | 4623 | if (va_node->sparse) |