Lines Matching refs:vm_ctx

74 struct pvr_vm_context *pvr_vm_context_get(struct pvr_vm_context *vm_ctx)  in pvr_vm_context_get()  argument
76 if (vm_ctx) in pvr_vm_context_get()
77 kref_get(&vm_ctx->ref_count); in pvr_vm_context_get()
79 return vm_ctx; in pvr_vm_context_get()
87 dma_addr_t pvr_vm_get_page_table_root_addr(struct pvr_vm_context *vm_ctx) in pvr_vm_get_page_table_root_addr() argument
89 return pvr_mmu_get_root_table_dma_addr(vm_ctx->mmu_ctx); in pvr_vm_get_page_table_root_addr()
101 struct dma_resv *pvr_vm_get_dma_resv(struct pvr_vm_context *vm_ctx) in pvr_vm_get_dma_resv() argument
103 return vm_ctx->dummy_gem.resv; in pvr_vm_get_dma_resv()
138 struct pvr_vm_context *vm_ctx; member
189 return drm_gpuvm_sm_map(&bind_op->vm_ctx->gpuvm_mgr, in pvr_vm_bind_op_exec()
196 return drm_gpuvm_sm_unmap(&bind_op->vm_ctx->gpuvm_mgr, in pvr_vm_bind_op_exec()
226 struct pvr_vm_context *vm_ctx, in pvr_vm_bind_op_map_init() argument
231 const bool is_user = vm_ctx != vm_ctx->pvr_dev->kernel_vm_ctx; in pvr_vm_bind_op_map_init()
241 !pvr_find_heap_containing(vm_ctx->pvr_dev, device_addr, size)) { in pvr_vm_bind_op_map_init()
245 if (!pvr_device_addr_and_size_are_valid(vm_ctx, device_addr, size) || in pvr_vm_bind_op_map_init()
253 bind_op->gpuvm_bo = drm_gpuvm_bo_obtain(&vm_ctx->gpuvm_mgr, obj); in pvr_vm_bind_op_map_init()
273 pvr_mmu_op_context_create(vm_ctx->mmu_ctx, sgt, offset, size); in pvr_vm_bind_op_map_init()
281 bind_op->vm_ctx = vm_ctx; in pvr_vm_bind_op_map_init()
296 struct pvr_vm_context *vm_ctx, in pvr_vm_bind_op_unmap_init() argument
302 if (!pvr_device_addr_and_size_are_valid(vm_ctx, device_addr, size)) in pvr_vm_bind_op_unmap_init()
315 pvr_mmu_op_context_create(vm_ctx->mmu_ctx, NULL, 0, 0); in pvr_vm_bind_op_unmap_init()
323 bind_op->vm_ctx = vm_ctx; in pvr_vm_bind_op_unmap_init()
362 drm_gpuva_map(&ctx->vm_ctx->gpuvm_mgr, &ctx->new_va->base, &op->map); in pvr_vm_gpuva_map()
492 pvr_device_addr_and_size_are_valid(struct pvr_vm_context *vm_ctx, in pvr_device_addr_and_size_are_valid() argument
496 drm_gpuvm_range_valid(&vm_ctx->gpuvm_mgr, device_addr, size) && in pvr_device_addr_and_size_are_valid()
517 struct pvr_vm_context *vm_ctx = priv; in fw_mem_context_init() local
519 fw_mem_ctx->pc_dev_paddr = pvr_vm_get_page_table_root_addr(vm_ctx); in fw_mem_context_init()
543 struct pvr_vm_context *vm_ctx; in pvr_vm_create_context() local
562 vm_ctx = kzalloc(sizeof(*vm_ctx), GFP_KERNEL); in pvr_vm_create_context()
563 if (!vm_ctx) in pvr_vm_create_context()
566 vm_ctx->pvr_dev = pvr_dev; in pvr_vm_create_context()
568 vm_ctx->mmu_ctx = pvr_mmu_context_create(pvr_dev); in pvr_vm_create_context()
569 err = PTR_ERR_OR_ZERO(vm_ctx->mmu_ctx); in pvr_vm_create_context()
576 fw_mem_context_init, vm_ctx, &vm_ctx->fw_mem_ctx_obj); in pvr_vm_create_context()
582 drm_gem_private_object_init(&pvr_dev->base, &vm_ctx->dummy_gem, 0); in pvr_vm_create_context()
583 drm_gpuvm_init(&vm_ctx->gpuvm_mgr, in pvr_vm_create_context()
585 0, &pvr_dev->base, &vm_ctx->dummy_gem, in pvr_vm_create_context()
588 mutex_init(&vm_ctx->lock); in pvr_vm_create_context()
589 kref_init(&vm_ctx->ref_count); in pvr_vm_create_context()
591 return vm_ctx; in pvr_vm_create_context()
594 pvr_mmu_context_destroy(vm_ctx->mmu_ctx); in pvr_vm_create_context()
597 kfree(vm_ctx); in pvr_vm_create_context()
612 struct pvr_vm_context *vm_ctx = in pvr_vm_context_release() local
615 if (vm_ctx->fw_mem_ctx_obj) in pvr_vm_context_release()
616 pvr_fw_object_destroy(vm_ctx->fw_mem_ctx_obj); in pvr_vm_context_release()
618 pvr_vm_unmap_all(vm_ctx); in pvr_vm_context_release()
620 pvr_mmu_context_destroy(vm_ctx->mmu_ctx); in pvr_vm_context_release()
621 drm_gem_private_object_fini(&vm_ctx->dummy_gem); in pvr_vm_context_release()
622 mutex_destroy(&vm_ctx->lock); in pvr_vm_context_release()
624 drm_gpuvm_put(&vm_ctx->gpuvm_mgr); in pvr_vm_context_release()
641 struct pvr_vm_context *vm_ctx; in pvr_vm_context_lookup() local
644 vm_ctx = xa_load(&pvr_file->vm_ctx_handles, handle); in pvr_vm_context_lookup()
645 pvr_vm_context_get(vm_ctx); in pvr_vm_context_lookup()
648 return vm_ctx; in pvr_vm_context_lookup()
660 pvr_vm_context_put(struct pvr_vm_context *vm_ctx) in pvr_vm_context_put() argument
662 if (vm_ctx) in pvr_vm_context_put()
663 return kref_put(&vm_ctx->ref_count, pvr_vm_context_release); in pvr_vm_context_put()
679 struct pvr_vm_context *vm_ctx; in pvr_destroy_vm_contexts_for_file() local
682 xa_for_each(&pvr_file->vm_ctx_handles, handle, vm_ctx) { in pvr_destroy_vm_contexts_for_file()
721 pvr_vm_map(struct pvr_vm_context *vm_ctx, struct pvr_gem_object *pvr_obj, in pvr_vm_map() argument
726 .vm = &vm_ctx->gpuvm_mgr, in pvr_vm_map()
735 int err = pvr_vm_bind_op_map_init(&bind_op, vm_ctx, pvr_obj, in pvr_vm_map()
777 pvr_vm_unmap_obj_locked(struct pvr_vm_context *vm_ctx, in pvr_vm_unmap_obj_locked() argument
783 .vm = &vm_ctx->gpuvm_mgr, in pvr_vm_unmap_obj_locked()
792 int err = pvr_vm_bind_op_unmap_init(&bind_op, vm_ctx, pvr_obj, in pvr_vm_unmap_obj_locked()
826 pvr_vm_unmap_obj(struct pvr_vm_context *vm_ctx, struct pvr_gem_object *pvr_obj, in pvr_vm_unmap_obj() argument
831 mutex_lock(&vm_ctx->lock); in pvr_vm_unmap_obj()
832 err = pvr_vm_unmap_obj_locked(vm_ctx, pvr_obj, device_addr, size); in pvr_vm_unmap_obj()
833 mutex_unlock(&vm_ctx->lock); in pvr_vm_unmap_obj()
850 pvr_vm_unmap(struct pvr_vm_context *vm_ctx, u64 device_addr, u64 size) in pvr_vm_unmap() argument
856 mutex_lock(&vm_ctx->lock); in pvr_vm_unmap()
858 va = drm_gpuva_find(&vm_ctx->gpuvm_mgr, device_addr, size); in pvr_vm_unmap()
861 err = pvr_vm_unmap_obj_locked(vm_ctx, pvr_obj, in pvr_vm_unmap()
867 mutex_unlock(&vm_ctx->lock); in pvr_vm_unmap()
880 pvr_vm_unmap_all(struct pvr_vm_context *vm_ctx) in pvr_vm_unmap_all() argument
882 mutex_lock(&vm_ctx->lock); in pvr_vm_unmap_all()
888 va = drm_gpuva_find_first(&vm_ctx->gpuvm_mgr, in pvr_vm_unmap_all()
889 vm_ctx->gpuvm_mgr.mm_start, in pvr_vm_unmap_all()
890 vm_ctx->gpuvm_mgr.mm_range); in pvr_vm_unmap_all()
896 WARN_ON(pvr_vm_unmap_obj_locked(vm_ctx, pvr_obj, in pvr_vm_unmap_all()
900 mutex_unlock(&vm_ctx->lock); in pvr_vm_unmap_all()
1146 pvr_vm_find_gem_object(struct pvr_vm_context *vm_ctx, u64 device_addr, in pvr_vm_find_gem_object() argument
1152 mutex_lock(&vm_ctx->lock); in pvr_vm_find_gem_object()
1154 va = drm_gpuva_find_first(&vm_ctx->gpuvm_mgr, device_addr, 1); in pvr_vm_find_gem_object()
1166 mutex_unlock(&vm_ctx->lock); in pvr_vm_find_gem_object()
1171 mutex_unlock(&vm_ctx->lock); in pvr_vm_find_gem_object()
1185 pvr_vm_get_fw_mem_context(struct pvr_vm_context *vm_ctx) in pvr_vm_get_fw_mem_context() argument
1187 return vm_ctx->fw_mem_ctx_obj; in pvr_vm_get_fw_mem_context()