Lines Matching defs:bind_op
179 * @bind_op: Bind op context.
186 static int pvr_vm_bind_op_exec(struct pvr_vm_bind_op *bind_op)
188 switch (bind_op->type) {
191 .map.va.addr = bind_op->device_addr,
192 .map.va.range = bind_op->size,
193 .map.gem.obj = gem_from_pvr_gem(bind_op->pvr_obj),
194 .map.gem.offset = bind_op->offset,
197 return drm_gpuvm_sm_map(&bind_op->vm_ctx->gpuvm_mgr,
198 bind_op, &map_req);
202 return drm_gpuvm_sm_unmap(&bind_op->vm_ctx->gpuvm_mgr,
203 bind_op, bind_op->device_addr,
204 bind_op->size);
215 static void pvr_vm_bind_op_fini(struct pvr_vm_bind_op *bind_op)
217 drm_gpuvm_bo_put(bind_op->gpuvm_bo);
219 kfree(bind_op->new_va);
220 kfree(bind_op->prev_va);
221 kfree(bind_op->next_va);
223 if (bind_op->pvr_obj)
224 pvr_gem_object_put(bind_op->pvr_obj);
226 if (bind_op->mmu_op_ctx)
227 pvr_mmu_op_context_destroy(bind_op->mmu_op_ctx);
231 pvr_vm_bind_op_map_init(struct pvr_vm_bind_op *bind_op,
256 bind_op->type = PVR_VM_BIND_TYPE_MAP;
259 bind_op->gpuvm_bo = drm_gpuvm_bo_obtain_locked(&vm_ctx->gpuvm_mgr, obj);
261 if (IS_ERR(bind_op->gpuvm_bo))
262 return PTR_ERR(bind_op->gpuvm_bo);
264 bind_op->new_va = kzalloc_obj(*bind_op->new_va);
265 bind_op->prev_va = kzalloc_obj(*bind_op->prev_va);
266 bind_op->next_va = kzalloc_obj(*bind_op->next_va);
267 if (!bind_op->new_va || !bind_op->prev_va || !bind_op->next_va) {
278 bind_op->mmu_op_ctx =
280 err = PTR_ERR_OR_ZERO(bind_op->mmu_op_ctx);
282 bind_op->mmu_op_ctx = NULL;
286 bind_op->pvr_obj = pvr_obj;
287 bind_op->vm_ctx = vm_ctx;
288 bind_op->device_addr = device_addr;
289 bind_op->size = size;
290 bind_op->offset = offset;
295 pvr_vm_bind_op_fini(bind_op);
301 pvr_vm_bind_op_unmap_init(struct pvr_vm_bind_op *bind_op,
311 bind_op->type = PVR_VM_BIND_TYPE_UNMAP;
313 bind_op->prev_va = kzalloc_obj(*bind_op->prev_va);
314 bind_op->next_va = kzalloc_obj(*bind_op->next_va);
315 if (!bind_op->prev_va || !bind_op->next_va) {
320 bind_op->mmu_op_ctx =
322 err = PTR_ERR_OR_ZERO(bind_op->mmu_op_ctx);
324 bind_op->mmu_op_ctx = NULL;
328 bind_op->pvr_obj = pvr_obj;
329 bind_op->vm_ctx = vm_ctx;
330 bind_op->device_addr = device_addr;
331 bind_op->size = size;
336 pvr_vm_bind_op_fini(bind_op);
697 struct pvr_vm_bind_op *bind_op = vm_exec->extra.priv;
698 struct pvr_gem_object *pvr_obj = bind_op->pvr_obj;
730 struct pvr_vm_bind_op bind_op = {0};
737 .priv = &bind_op,
741 int err = pvr_vm_bind_op_map_init(&bind_op, vm_ctx, pvr_obj,
755 err = pvr_vm_bind_op_exec(&bind_op);
761 pvr_vm_bind_op_fini(&bind_op);
789 struct pvr_vm_bind_op bind_op = {0};
796 .priv = &bind_op,
800 int err = pvr_vm_bind_op_unmap_init(&bind_op, vm_ctx, pvr_obj,
811 err = pvr_vm_bind_op_exec(&bind_op);
816 pvr_vm_bind_op_fini(&bind_op);