Lines Matching refs:bind_op
185 static int pvr_vm_bind_op_exec(struct pvr_vm_bind_op *bind_op) in pvr_vm_bind_op_exec() argument
187 switch (bind_op->type) { in pvr_vm_bind_op_exec()
189 return drm_gpuvm_sm_map(&bind_op->vm_ctx->gpuvm_mgr, in pvr_vm_bind_op_exec()
190 bind_op, bind_op->device_addr, in pvr_vm_bind_op_exec()
191 bind_op->size, in pvr_vm_bind_op_exec()
192 gem_from_pvr_gem(bind_op->pvr_obj), in pvr_vm_bind_op_exec()
193 bind_op->offset); in pvr_vm_bind_op_exec()
196 return drm_gpuvm_sm_unmap(&bind_op->vm_ctx->gpuvm_mgr, in pvr_vm_bind_op_exec()
197 bind_op, bind_op->device_addr, in pvr_vm_bind_op_exec()
198 bind_op->size); in pvr_vm_bind_op_exec()
209 static void pvr_vm_bind_op_fini(struct pvr_vm_bind_op *bind_op) in pvr_vm_bind_op_fini() argument
211 drm_gpuvm_bo_put(bind_op->gpuvm_bo); in pvr_vm_bind_op_fini()
213 kfree(bind_op->new_va); in pvr_vm_bind_op_fini()
214 kfree(bind_op->prev_va); in pvr_vm_bind_op_fini()
215 kfree(bind_op->next_va); in pvr_vm_bind_op_fini()
217 if (bind_op->pvr_obj) in pvr_vm_bind_op_fini()
218 pvr_gem_object_put(bind_op->pvr_obj); in pvr_vm_bind_op_fini()
220 if (bind_op->mmu_op_ctx) in pvr_vm_bind_op_fini()
221 pvr_mmu_op_context_destroy(bind_op->mmu_op_ctx); in pvr_vm_bind_op_fini()
225 pvr_vm_bind_op_map_init(struct pvr_vm_bind_op *bind_op, in pvr_vm_bind_op_map_init() argument
250 bind_op->type = PVR_VM_BIND_TYPE_MAP; 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()
255 if (IS_ERR(bind_op->gpuvm_bo)) in pvr_vm_bind_op_map_init()
256 return PTR_ERR(bind_op->gpuvm_bo); in pvr_vm_bind_op_map_init()
258 bind_op->new_va = kzalloc(sizeof(*bind_op->new_va), GFP_KERNEL); in pvr_vm_bind_op_map_init()
259 bind_op->prev_va = kzalloc(sizeof(*bind_op->prev_va), GFP_KERNEL); in pvr_vm_bind_op_map_init()
260 bind_op->next_va = kzalloc(sizeof(*bind_op->next_va), GFP_KERNEL); in pvr_vm_bind_op_map_init()
261 if (!bind_op->new_va || !bind_op->prev_va || !bind_op->next_va) { in pvr_vm_bind_op_map_init()
272 bind_op->mmu_op_ctx = in pvr_vm_bind_op_map_init()
274 err = PTR_ERR_OR_ZERO(bind_op->mmu_op_ctx); in pvr_vm_bind_op_map_init()
276 bind_op->mmu_op_ctx = NULL; in pvr_vm_bind_op_map_init()
280 bind_op->pvr_obj = pvr_obj; in pvr_vm_bind_op_map_init()
281 bind_op->vm_ctx = vm_ctx; in pvr_vm_bind_op_map_init()
282 bind_op->device_addr = device_addr; in pvr_vm_bind_op_map_init()
283 bind_op->size = size; in pvr_vm_bind_op_map_init()
284 bind_op->offset = offset; in pvr_vm_bind_op_map_init()
289 pvr_vm_bind_op_fini(bind_op); in pvr_vm_bind_op_map_init()
295 pvr_vm_bind_op_unmap_init(struct pvr_vm_bind_op *bind_op, in pvr_vm_bind_op_unmap_init() argument
304 bind_op->type = PVR_VM_BIND_TYPE_UNMAP; in pvr_vm_bind_op_unmap_init()
306 bind_op->prev_va = kzalloc(sizeof(*bind_op->prev_va), GFP_KERNEL); in pvr_vm_bind_op_unmap_init()
307 bind_op->next_va = kzalloc(sizeof(*bind_op->next_va), GFP_KERNEL); in pvr_vm_bind_op_unmap_init()
308 if (!bind_op->prev_va || !bind_op->next_va) { in pvr_vm_bind_op_unmap_init()
313 bind_op->mmu_op_ctx = in pvr_vm_bind_op_unmap_init()
315 err = PTR_ERR_OR_ZERO(bind_op->mmu_op_ctx); in pvr_vm_bind_op_unmap_init()
317 bind_op->mmu_op_ctx = NULL; in pvr_vm_bind_op_unmap_init()
321 bind_op->vm_ctx = vm_ctx; in pvr_vm_bind_op_unmap_init()
322 bind_op->device_addr = device_addr; in pvr_vm_bind_op_unmap_init()
323 bind_op->size = size; in pvr_vm_bind_op_unmap_init()
328 pvr_vm_bind_op_fini(bind_op); in pvr_vm_bind_op_unmap_init()
705 struct pvr_vm_bind_op *bind_op = vm_exec->extra.priv; in pvr_vm_lock_extra() local
706 struct pvr_gem_object *pvr_obj = bind_op->pvr_obj; in pvr_vm_lock_extra()
742 struct pvr_vm_bind_op bind_op = {0}; in pvr_vm_map() local
749 .priv = &bind_op, in pvr_vm_map()
753 int err = pvr_vm_bind_op_map_init(&bind_op, vm_ctx, pvr_obj, in pvr_vm_map()
766 err = pvr_vm_bind_op_exec(&bind_op); in pvr_vm_map()
771 pvr_vm_bind_op_fini(&bind_op); in pvr_vm_map()
793 struct pvr_vm_bind_op bind_op = {0}; in pvr_vm_unmap() local
800 .priv = &bind_op, in pvr_vm_unmap()
804 int err = pvr_vm_bind_op_unmap_init(&bind_op, vm_ctx, device_addr, in pvr_vm_unmap()
813 err = pvr_vm_bind_op_exec(&bind_op); in pvr_vm_unmap()
818 pvr_vm_bind_op_fini(&bind_op); in pvr_vm_unmap()