Lines Matching refs:job
318 struct drm_sched_job *job; in drm_sched_job_timedout() local
325 job = list_first_entry_or_null(&sched->pending_list, in drm_sched_job_timedout()
328 if (job) { in drm_sched_job_timedout()
334 list_del_init(&job->list); in drm_sched_job_timedout()
337 status = job->sched->ops->timedout_job(job); in drm_sched_job_timedout()
344 job->sched->ops->free_job(job); in drm_sched_job_timedout()
586 int drm_sched_job_init(struct drm_sched_job *job, in drm_sched_job_init() argument
594 job->entity = entity; in drm_sched_job_init()
595 job->s_fence = drm_sched_fence_alloc(entity, owner); in drm_sched_job_init()
596 if (!job->s_fence) in drm_sched_job_init()
599 INIT_LIST_HEAD(&job->list); in drm_sched_job_init()
601 xa_init_flags(&job->dependencies, XA_FLAGS_ALLOC); in drm_sched_job_init()
620 void drm_sched_job_arm(struct drm_sched_job *job) in drm_sched_job_arm() argument
623 struct drm_sched_entity *entity = job->entity; in drm_sched_job_arm()
629 job->sched = sched; in drm_sched_job_arm()
630 job->s_priority = entity->rq - sched->sched_rq; in drm_sched_job_arm()
631 job->id = atomic64_inc_return(&sched->job_id_count); in drm_sched_job_arm()
633 drm_sched_fence_init(job->s_fence, job->entity); in drm_sched_job_arm()
647 int drm_sched_job_add_dependency(struct drm_sched_job *job, in drm_sched_job_add_dependency() argument
662 xa_for_each(&job->dependencies, index, entry) { in drm_sched_job_add_dependency()
668 xa_store(&job->dependencies, index, fence, GFP_KERNEL); in drm_sched_job_add_dependency()
675 ret = xa_alloc(&job->dependencies, &id, fence, xa_limit_32b, GFP_KERNEL); in drm_sched_job_add_dependency()
698 int drm_sched_job_add_implicit_dependencies(struct drm_sched_job *job, in drm_sched_job_add_implicit_dependencies() argument
709 ret = drm_sched_job_add_dependency(job, fence); in drm_sched_job_add_implicit_dependencies()
733 void drm_sched_job_cleanup(struct drm_sched_job *job) in drm_sched_job_cleanup() argument
738 if (kref_read(&job->s_fence->finished.refcount)) { in drm_sched_job_cleanup()
740 dma_fence_put(&job->s_fence->finished); in drm_sched_job_cleanup()
743 drm_sched_fence_free(job->s_fence); in drm_sched_job_cleanup()
746 job->s_fence = NULL; in drm_sched_job_cleanup()
748 xa_for_each(&job->dependencies, index, fence) { in drm_sched_job_cleanup()
751 xa_destroy(&job->dependencies); in drm_sched_job_cleanup()
818 struct drm_sched_job *job, *next; in drm_sched_get_cleanup_job() local
822 job = list_first_entry_or_null(&sched->pending_list, in drm_sched_get_cleanup_job()
825 if (job && dma_fence_is_signaled(&job->s_fence->finished)) { in drm_sched_get_cleanup_job()
827 list_del_init(&job->list); in drm_sched_get_cleanup_job()
837 job->s_fence->finished.timestamp; in drm_sched_get_cleanup_job()
842 job = NULL; in drm_sched_get_cleanup_job()
847 return job; in drm_sched_get_cleanup_job()