Lines Matching defs:bind_op

175  * @bind_op: Bind op context.
182 static int pvr_vm_bind_op_exec(struct pvr_vm_bind_op *bind_op)
184 switch (bind_op->type) {
186 return drm_gpuvm_sm_map(&bind_op->vm_ctx->gpuvm_mgr,
187 bind_op, bind_op->device_addr,
188 bind_op->size,
189 gem_from_pvr_gem(bind_op->pvr_obj),
190 bind_op->offset);
193 return drm_gpuvm_sm_unmap(&bind_op->vm_ctx->gpuvm_mgr,
194 bind_op, bind_op->device_addr,
195 bind_op->size);
206 static void pvr_vm_bind_op_fini(struct pvr_vm_bind_op *bind_op)
208 drm_gpuvm_bo_put(bind_op->gpuvm_bo);
210 kfree(bind_op->new_va);
211 kfree(bind_op->prev_va);
212 kfree(bind_op->next_va);
214 if (bind_op->pvr_obj)
215 pvr_gem_object_put(bind_op->pvr_obj);
217 if (bind_op->mmu_op_ctx)
218 pvr_mmu_op_context_destroy(bind_op->mmu_op_ctx);
222 pvr_vm_bind_op_map_init(struct pvr_vm_bind_op *bind_op,
247 bind_op->type = PVR_VM_BIND_TYPE_MAP;
250 bind_op->gpuvm_bo = drm_gpuvm_bo_obtain(&vm_ctx->gpuvm_mgr, obj);
252 if (IS_ERR(bind_op->gpuvm_bo))
253 return PTR_ERR(bind_op->gpuvm_bo);
255 bind_op->new_va = kzalloc(sizeof(*bind_op->new_va), GFP_KERNEL);
256 bind_op->prev_va = kzalloc(sizeof(*bind_op->prev_va), GFP_KERNEL);
257 bind_op->next_va = kzalloc(sizeof(*bind_op->next_va), GFP_KERNEL);
258 if (!bind_op->new_va || !bind_op->prev_va || !bind_op->next_va) {
269 bind_op->mmu_op_ctx =
271 err = PTR_ERR_OR_ZERO(bind_op->mmu_op_ctx);
273 bind_op->mmu_op_ctx = NULL;
277 bind_op->pvr_obj = pvr_obj;
278 bind_op->vm_ctx = vm_ctx;
279 bind_op->device_addr = device_addr;
280 bind_op->size = size;
281 bind_op->offset = offset;
286 pvr_vm_bind_op_fini(bind_op);
292 pvr_vm_bind_op_unmap_init(struct pvr_vm_bind_op *bind_op,
301 bind_op->type = PVR_VM_BIND_TYPE_UNMAP;
303 bind_op->prev_va = kzalloc(sizeof(*bind_op->prev_va), GFP_KERNEL);
304 bind_op->next_va = kzalloc(sizeof(*bind_op->next_va), GFP_KERNEL);
305 if (!bind_op->prev_va || !bind_op->next_va) {
310 bind_op->mmu_op_ctx =
312 err = PTR_ERR_OR_ZERO(bind_op->mmu_op_ctx);
314 bind_op->mmu_op_ctx = NULL;
318 bind_op->vm_ctx = vm_ctx;
319 bind_op->device_addr = device_addr;
320 bind_op->size = size;
325 pvr_vm_bind_op_fini(bind_op);
687 struct pvr_vm_bind_op *bind_op = vm_exec->extra.priv;
688 struct pvr_gem_object *pvr_obj = bind_op->pvr_obj;
724 struct pvr_vm_bind_op bind_op = {0};
731 .priv = &bind_op,
735 int err = pvr_vm_bind_op_map_init(&bind_op, vm_ctx, pvr_obj,
748 err = pvr_vm_bind_op_exec(&bind_op);
753 pvr_vm_bind_op_fini(&bind_op);
775 struct pvr_vm_bind_op bind_op = {0};
782 .priv = &bind_op,
786 int err = pvr_vm_bind_op_unmap_init(&bind_op, vm_ctx, device_addr,
795 err = pvr_vm_bind_op_exec(&bind_op);
800 pvr_vm_bind_op_fini(&bind_op);