Lines Matching refs:job

380 	struct drm_sched_job *job;  in drm_sched_job_timedout()  local
387 job = list_first_entry_or_null(&sched->pending_list, in drm_sched_job_timedout()
390 if (job) { in drm_sched_job_timedout()
396 list_del_init(&job->list); in drm_sched_job_timedout()
399 status = job->sched->ops->timedout_job(job); in drm_sched_job_timedout()
406 job->sched->ops->free_job(job); in drm_sched_job_timedout()
625 int drm_sched_job_init(struct drm_sched_job *job, in drm_sched_job_init() argument
632 job->entity = entity; in drm_sched_job_init()
633 job->s_fence = drm_sched_fence_alloc(entity, owner); in drm_sched_job_init()
634 if (!job->s_fence) in drm_sched_job_init()
637 INIT_LIST_HEAD(&job->list); in drm_sched_job_init()
639 xa_init_flags(&job->dependencies, XA_FLAGS_ALLOC); in drm_sched_job_init()
658 void drm_sched_job_arm(struct drm_sched_job *job) in drm_sched_job_arm() argument
661 struct drm_sched_entity *entity = job->entity; in drm_sched_job_arm()
667 job->sched = sched; in drm_sched_job_arm()
668 job->s_priority = entity->rq - sched->sched_rq; in drm_sched_job_arm()
669 job->id = atomic64_inc_return(&sched->job_id_count); in drm_sched_job_arm()
671 drm_sched_fence_init(job->s_fence, job->entity); in drm_sched_job_arm()
685 int drm_sched_job_add_dependency(struct drm_sched_job *job, in drm_sched_job_add_dependency() argument
700 xa_for_each(&job->dependencies, index, entry) { in drm_sched_job_add_dependency()
706 xa_store(&job->dependencies, index, fence, GFP_KERNEL); in drm_sched_job_add_dependency()
713 ret = xa_alloc(&job->dependencies, &id, fence, xa_limit_32b, GFP_KERNEL); in drm_sched_job_add_dependency()
733 int drm_sched_job_add_resv_dependencies(struct drm_sched_job *job, in drm_sched_job_add_resv_dependencies() argument
746 ret = drm_sched_job_add_dependency(job, fence); in drm_sched_job_add_resv_dependencies()
771 int drm_sched_job_add_implicit_dependencies(struct drm_sched_job *job, in drm_sched_job_add_implicit_dependencies() argument
775 return drm_sched_job_add_resv_dependencies(job, obj->resv, in drm_sched_job_add_implicit_dependencies()
793 void drm_sched_job_cleanup(struct drm_sched_job *job) in drm_sched_job_cleanup() argument
798 if (kref_read(&job->s_fence->finished.refcount)) { in drm_sched_job_cleanup()
800 dma_fence_put(&job->s_fence->finished); in drm_sched_job_cleanup()
803 drm_sched_fence_free(job->s_fence); in drm_sched_job_cleanup()
806 job->s_fence = NULL; in drm_sched_job_cleanup()
808 xa_for_each(&job->dependencies, index, fence) { in drm_sched_job_cleanup()
811 xa_destroy(&job->dependencies); in drm_sched_job_cleanup()
880 struct drm_sched_job *job, *next; in drm_sched_get_cleanup_job() local
884 job = list_first_entry_or_null(&sched->pending_list, in drm_sched_get_cleanup_job()
887 if (job && dma_fence_is_signaled(&job->s_fence->finished)) { in drm_sched_get_cleanup_job()
889 list_del_init(&job->list); in drm_sched_get_cleanup_job()
899 job->s_fence->finished.timestamp; in drm_sched_get_cleanup_job()
904 job = NULL; in drm_sched_get_cleanup_job()
909 if (job) { in drm_sched_get_cleanup_job()
910 job->entity->elapsed_ns += ktime_to_ns( in drm_sched_get_cleanup_job()
911 ktime_sub(job->s_fence->finished.timestamp, in drm_sched_get_cleanup_job()
912 job->s_fence->scheduled.timestamp)); in drm_sched_get_cleanup_job()
915 return job; in drm_sched_get_cleanup_job()