Lines Matching refs:submit

39 	struct msm_gem_submit *submit;  in submit_create()  local
40 int sz = sizeof(*submit) + (nr * sizeof(submit->bos[0])); in submit_create()
42 submit = kmalloc(sz, GFP_TEMPORARY | __GFP_NOWARN | __GFP_NORETRY); in submit_create()
43 if (submit) { in submit_create()
44 submit->dev = dev; in submit_create()
45 submit->gpu = gpu; in submit_create()
48 submit->nr_bos = 0; in submit_create()
49 submit->nr_cmds = 0; in submit_create()
51 INIT_LIST_HEAD(&submit->bo_list); in submit_create()
52 ww_acquire_init(&submit->ticket, &reservation_ww_class); in submit_create()
55 return submit; in submit_create()
58 static int submit_lookup_objects(struct msm_gem_submit *submit, in submit_lookup_objects() argument
85 submit->bos[i].flags = submit_bo.flags; in submit_lookup_objects()
87 submit->bos[i].iova = submit_bo.presumed; in submit_lookup_objects()
110 submit->bos[i].obj = msm_obj; in submit_lookup_objects()
112 list_add_tail(&msm_obj->submit_entry, &submit->bo_list); in submit_lookup_objects()
116 submit->nr_bos = i; in submit_lookup_objects()
122 static void submit_unlock_unpin_bo(struct msm_gem_submit *submit, int i) in submit_unlock_unpin_bo() argument
124 struct msm_gem_object *msm_obj = submit->bos[i].obj; in submit_unlock_unpin_bo()
126 if (submit->bos[i].flags & BO_PINNED) in submit_unlock_unpin_bo()
127 msm_gem_put_iova(&msm_obj->base, submit->gpu->id); in submit_unlock_unpin_bo()
129 if (submit->bos[i].flags & BO_LOCKED) in submit_unlock_unpin_bo()
132 if (!(submit->bos[i].flags & BO_VALID)) in submit_unlock_unpin_bo()
133 submit->bos[i].iova = 0; in submit_unlock_unpin_bo()
135 submit->bos[i].flags &= ~(BO_LOCKED | BO_PINNED); in submit_unlock_unpin_bo()
139 static int submit_validate_objects(struct msm_gem_submit *submit) in submit_validate_objects() argument
144 submit->valid = true; in submit_validate_objects()
146 for (i = 0; i < submit->nr_bos; i++) { in submit_validate_objects()
147 struct msm_gem_object *msm_obj = submit->bos[i].obj; in submit_validate_objects()
155 if (!(submit->bos[i].flags & BO_LOCKED)) { in submit_validate_objects()
157 &submit->ticket); in submit_validate_objects()
160 submit->bos[i].flags |= BO_LOCKED; in submit_validate_objects()
166 submit->gpu->id, &iova); in submit_validate_objects()
177 submit->bos[i].flags |= BO_PINNED; in submit_validate_objects()
179 if (iova == submit->bos[i].iova) { in submit_validate_objects()
180 submit->bos[i].flags |= BO_VALID; in submit_validate_objects()
182 submit->bos[i].iova = iova; in submit_validate_objects()
183 submit->bos[i].flags &= ~BO_VALID; in submit_validate_objects()
184 submit->valid = false; in submit_validate_objects()
188 ww_acquire_done(&submit->ticket); in submit_validate_objects()
194 submit_unlock_unpin_bo(submit, i); in submit_validate_objects()
197 submit_unlock_unpin_bo(submit, slow_locked); in submit_validate_objects()
200 struct msm_gem_object *msm_obj = submit->bos[contended].obj; in submit_validate_objects()
203 &submit->ticket); in submit_validate_objects()
205 submit->bos[contended].flags |= BO_LOCKED; in submit_validate_objects()
214 static int submit_bo(struct msm_gem_submit *submit, uint32_t idx, in submit_bo() argument
217 if (idx >= submit->nr_bos) { in submit_bo()
219 idx, submit->nr_bos); in submit_bo()
224 *obj = submit->bos[idx].obj; in submit_bo()
226 *iova = submit->bos[idx].iova; in submit_bo()
228 *valid = !!(submit->bos[idx].flags & BO_VALID); in submit_bo()
234 static int submit_reloc(struct msm_gem_submit *submit, struct msm_gem_object *obj, in submit_reloc() argument
283 ret = submit_bo(submit, submit_reloc.reloc_idx, NULL, &iova, &valid); in submit_reloc()
305 static void submit_cleanup(struct msm_gem_submit *submit, bool fail) in submit_cleanup() argument
309 for (i = 0; i < submit->nr_bos; i++) { in submit_cleanup()
310 struct msm_gem_object *msm_obj = submit->bos[i].obj; in submit_cleanup()
311 submit_unlock_unpin_bo(submit, i); in submit_cleanup()
316 ww_acquire_fini(&submit->ticket); in submit_cleanup()
325 struct msm_gem_submit *submit; in msm_ioctl_gem_submit() local
343 submit = submit_create(dev, gpu, args->nr_bos); in msm_ioctl_gem_submit()
344 if (!submit) { in msm_ioctl_gem_submit()
349 ret = submit_lookup_objects(submit, args, file); in msm_ioctl_gem_submit()
353 ret = submit_validate_objects(submit); in msm_ioctl_gem_submit()
382 ret = submit_bo(submit, submit_cmd.submit_idx, in msm_ioctl_gem_submit()
401 submit->cmd[i].type = submit_cmd.type; in msm_ioctl_gem_submit()
402 submit->cmd[i].size = submit_cmd.size / 4; in msm_ioctl_gem_submit()
403 submit->cmd[i].iova = iova + submit_cmd.submit_offset; in msm_ioctl_gem_submit()
404 submit->cmd[i].idx = submit_cmd.submit_idx; in msm_ioctl_gem_submit()
406 if (submit->valid) in msm_ioctl_gem_submit()
409 ret = submit_reloc(submit, msm_obj, submit_cmd.submit_offset, in msm_ioctl_gem_submit()
415 submit->nr_cmds = i; in msm_ioctl_gem_submit()
417 ret = msm_gpu_submit(gpu, submit, ctx); in msm_ioctl_gem_submit()
419 args->fence = submit->fence; in msm_ioctl_gem_submit()
422 if (submit) in msm_ioctl_gem_submit()
423 submit_cleanup(submit, !!ret); in msm_ioctl_gem_submit()