Lines Matching refs:parser
473 static void amdgpu_cs_parser_fini(struct amdgpu_cs_parser *parser, int error, bool backoff) in amdgpu_cs_parser_fini() argument
488 list_sort(NULL, &parser->validated, cmp_size_smaller_first); in amdgpu_cs_parser_fini()
490 ttm_eu_fence_buffer_objects(&parser->ticket, in amdgpu_cs_parser_fini()
491 &parser->validated, in amdgpu_cs_parser_fini()
492 parser->fence); in amdgpu_cs_parser_fini()
494 ttm_eu_backoff_reservation(&parser->ticket, in amdgpu_cs_parser_fini()
495 &parser->validated); in amdgpu_cs_parser_fini()
497 fence_put(parser->fence); in amdgpu_cs_parser_fini()
499 if (parser->ctx) in amdgpu_cs_parser_fini()
500 amdgpu_ctx_put(parser->ctx); in amdgpu_cs_parser_fini()
501 if (parser->bo_list) in amdgpu_cs_parser_fini()
502 amdgpu_bo_list_put(parser->bo_list); in amdgpu_cs_parser_fini()
504 drm_free_large(parser->vm_bos); in amdgpu_cs_parser_fini()
505 for (i = 0; i < parser->nchunks; i++) in amdgpu_cs_parser_fini()
506 drm_free_large(parser->chunks[i].kdata); in amdgpu_cs_parser_fini()
507 kfree(parser->chunks); in amdgpu_cs_parser_fini()
508 if (parser->ibs) in amdgpu_cs_parser_fini()
509 for (i = 0; i < parser->num_ibs; i++) in amdgpu_cs_parser_fini()
510 amdgpu_ib_free(parser->adev, &parser->ibs[i]); in amdgpu_cs_parser_fini()
511 kfree(parser->ibs); in amdgpu_cs_parser_fini()
512 amdgpu_bo_unref(&parser->uf.bo); in amdgpu_cs_parser_fini()
513 amdgpu_bo_unref(&parser->uf_entry.robj); in amdgpu_cs_parser_fini()
579 struct amdgpu_cs_parser *parser) in amdgpu_cs_ib_vm_chunk() argument
581 struct amdgpu_fpriv *fpriv = parser->filp->driver_priv; in amdgpu_cs_ib_vm_chunk()
586 if (parser->num_ibs == 0) in amdgpu_cs_ib_vm_chunk()
590 for (i = 0; i < parser->num_ibs; i++) { in amdgpu_cs_ib_vm_chunk()
591 ring = parser->ibs[i].ring; in amdgpu_cs_ib_vm_chunk()
593 r = amdgpu_ring_parse_cs(ring, parser, i); in amdgpu_cs_ib_vm_chunk()
599 r = amdgpu_bo_vm_update_pte(parser, vm); in amdgpu_cs_ib_vm_chunk()
601 amdgpu_cs_sync_rings(parser); in amdgpu_cs_ib_vm_chunk()
617 struct amdgpu_cs_parser *parser) in amdgpu_cs_ib_fill() argument
619 struct amdgpu_fpriv *fpriv = parser->filp->driver_priv; in amdgpu_cs_ib_fill()
624 for (i = 0, j = 0; i < parser->nchunks && j < parser->num_ibs; i++) { in amdgpu_cs_ib_fill()
630 chunk = &parser->chunks[i]; in amdgpu_cs_ib_fill()
631 ib = &parser->ibs[j]; in amdgpu_cs_ib_fill()
649 m = amdgpu_cs_find_mapping(parser, chunk_ib->va_start, in amdgpu_cs_ib_fill()
691 ib->ctx = parser->ctx; in amdgpu_cs_ib_fill()
695 if (!parser->num_ibs) in amdgpu_cs_ib_fill()
699 if (parser->bo_list) { in amdgpu_cs_ib_fill()
700 struct amdgpu_bo *gds = parser->bo_list->gds_obj; in amdgpu_cs_ib_fill()
701 struct amdgpu_bo *gws = parser->bo_list->gws_obj; in amdgpu_cs_ib_fill()
702 struct amdgpu_bo *oa = parser->bo_list->oa_obj; in amdgpu_cs_ib_fill()
703 struct amdgpu_ib *ib = &parser->ibs[0]; in amdgpu_cs_ib_fill()
719 if (parser->uf.bo) { in amdgpu_cs_ib_fill()
720 struct amdgpu_ib *ib = &parser->ibs[parser->num_ibs - 1]; in amdgpu_cs_ib_fill()
727 ib->user = &parser->uf; in amdgpu_cs_ib_fill()
810 struct amdgpu_cs_parser parser = {}; in amdgpu_cs_ioctl() local
817 parser.adev = adev; in amdgpu_cs_ioctl()
818 parser.filp = filp; in amdgpu_cs_ioctl()
820 r = amdgpu_cs_parser_init(&parser, data); in amdgpu_cs_ioctl()
823 amdgpu_cs_parser_fini(&parser, r, false); in amdgpu_cs_ioctl()
827 r = amdgpu_cs_parser_relocs(&parser); in amdgpu_cs_ioctl()
834 r = amdgpu_cs_ib_fill(adev, &parser); in amdgpu_cs_ioctl()
838 r = amdgpu_cs_dependencies(adev, &parser); in amdgpu_cs_ioctl()
846 for (i = 0; i < parser.num_ibs; i++) in amdgpu_cs_ioctl()
847 trace_amdgpu_cs(&parser, i); in amdgpu_cs_ioctl()
849 r = amdgpu_cs_ib_vm_chunk(adev, &parser); in amdgpu_cs_ioctl()
853 if (amdgpu_enable_scheduler && parser.num_ibs) { in amdgpu_cs_ioctl()
854 struct amdgpu_ring * ring = parser.ibs->ring; in amdgpu_cs_ioctl()
865 job->base.s_entity = &parser.ctx->rings[ring->idx].entity; in amdgpu_cs_ioctl()
866 job->adev = parser.adev; in amdgpu_cs_ioctl()
867 job->owner = parser.filp; in amdgpu_cs_ioctl()
870 job->ibs = parser.ibs; in amdgpu_cs_ioctl()
871 job->num_ibs = parser.num_ibs; in amdgpu_cs_ioctl()
872 parser.ibs = NULL; in amdgpu_cs_ioctl()
873 parser.num_ibs = 0; in amdgpu_cs_ioctl()
876 job->uf = parser.uf; in amdgpu_cs_ioctl()
878 parser.uf.bo = NULL; in amdgpu_cs_ioctl()
882 parser.filp); in amdgpu_cs_ioctl()
890 parser.fence = fence_get(&fence->base); in amdgpu_cs_ioctl()
892 cs->out.handle = amdgpu_ctx_add_fence(parser.ctx, ring, in amdgpu_cs_ioctl()
902 r = amdgpu_ib_schedule(adev, parser.num_ibs, parser.ibs, in amdgpu_cs_ioctl()
903 parser.filp); in amdgpu_cs_ioctl()
904 fence = parser.ibs[parser.num_ibs - 1].fence; in amdgpu_cs_ioctl()
905 parser.fence = fence_get(&fence->base); in amdgpu_cs_ioctl()
906 cs->out.handle = parser.ibs[parser.num_ibs - 1].sequence; in amdgpu_cs_ioctl()
910 amdgpu_cs_parser_fini(&parser, r, reserved_buffers); in amdgpu_cs_ioctl()
975 amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser, in amdgpu_cs_find_mapping() argument
983 list_for_each_entry(reloc, &parser->validated, tv.head) { in amdgpu_cs_find_mapping()