Lines Matching full:scheduler

15 rve_scheduler_get_pending_job_list(struct rve_scheduler_t *scheduler)  in rve_scheduler_get_pending_job_list()  argument
20 spin_lock_irqsave(&scheduler->irq_lock, flags); in rve_scheduler_get_pending_job_list()
22 job = list_first_entry_or_null(&scheduler->todo_list, in rve_scheduler_get_pending_job_list()
25 spin_unlock_irqrestore(&scheduler->irq_lock, flags); in rve_scheduler_get_pending_job_list()
31 rve_scheduler_get_running_job(struct rve_scheduler_t *scheduler) in rve_scheduler_get_running_job() argument
36 spin_lock_irqsave(&scheduler->irq_lock, flags); in rve_scheduler_get_running_job()
38 job = scheduler->running_job; in rve_scheduler_get_running_job()
40 spin_unlock_irqrestore(&scheduler->irq_lock, flags); in rve_scheduler_get_running_job()
47 struct rve_scheduler_t *scheduler; in rve_scheduler_set_pid_info() local
52 scheduler = rve_job_get_scheduler(job); in rve_scheduler_set_pid_info()
55 if (scheduler->session.pid_info[i].pid == 0) in rve_scheduler_set_pid_info()
56 scheduler->session.pid_info[i].pid = job->pid; in rve_scheduler_set_pid_info()
58 if (scheduler->session.pid_info[i].pid == job->pid) { in rve_scheduler_set_pid_info()
60 scheduler->session.pid_info[i].hw_time_total += in rve_scheduler_set_pid_info()
69 tmp = scheduler->session.pid_info[i].hw_time_total; in rve_scheduler_set_pid_info()
73 if (tmp > scheduler->session.pid_info[i].hw_time_total) in rve_scheduler_set_pid_info()
77 scheduler->session.pid_info[pid_mark].pid = job->pid; in rve_scheduler_set_pid_info()
78 scheduler->session.pid_info[pid_mark].hw_time_total += in rve_scheduler_set_pid_info()
85 return job->scheduler; in rve_job_get_scheduler()
118 struct rve_scheduler_t *scheduler = NULL; in rve_job_session_destroy() local
125 scheduler = rve_drvdata->scheduler[i]; in rve_job_session_destroy()
127 spin_lock_irqsave(&scheduler->irq_lock, flags); in rve_job_session_destroy()
129 list_for_each_entry_safe(job_pos, job_q, &scheduler->todo_list, head) { in rve_job_session_destroy()
133 spin_unlock_irqrestore(&scheduler->irq_lock, flags); in rve_job_session_destroy()
137 spin_lock_irqsave(&scheduler->irq_lock, flags); in rve_job_session_destroy()
141 spin_unlock_irqrestore(&scheduler->irq_lock, flags); in rve_job_session_destroy()
162 job->scheduler = rve_drvdata->scheduler[0]; in rve_job_alloc()
163 job->core = rve_drvdata->scheduler[0]->core; in rve_job_alloc()
165 ctx->scheduler = job->scheduler; in rve_job_alloc()
186 struct rve_scheduler_t *scheduler; in rve_job_run() local
189 scheduler = rve_job_get_scheduler(job); in rve_job_run()
193 ret = rve_power_enable(scheduler); in rve_job_run()
200 ret = scheduler->ops->init_reg(job); in rve_job_run()
206 ret = scheduler->ops->set_reg(job, scheduler); in rve_job_run()
220 rve_power_disable(scheduler); in rve_job_run()
226 static void rve_job_next(struct rve_scheduler_t *scheduler) in rve_job_next() argument
232 spin_lock_irqsave(&scheduler->irq_lock, flags); in rve_job_next()
234 if (scheduler->running_job || in rve_job_next()
235 list_empty(&scheduler->todo_list)) { in rve_job_next()
236 spin_unlock_irqrestore(&scheduler->irq_lock, flags); in rve_job_next()
240 job = list_first_entry(&scheduler->todo_list, struct rve_job, head); in rve_job_next()
244 scheduler->job_count--; in rve_job_next()
246 scheduler->running_job = job; in rve_job_next()
248 spin_unlock_irqrestore(&scheduler->irq_lock, flags); in rve_job_next()
257 spin_lock_irqsave(&scheduler->irq_lock, flags); in rve_job_next()
259 scheduler->running_job = NULL; in rve_job_next()
261 spin_unlock_irqrestore(&scheduler->irq_lock, flags); in rve_job_next()
272 struct rve_scheduler_t *scheduler; in rve_job_finish_and_next() local
276 scheduler = rve_job_get_scheduler(job); in rve_job_finish_and_next()
286 rve_job_next(scheduler); in rve_job_finish_and_next()
289 rve_power_disable(scheduler); in rve_job_finish_and_next()
293 void rve_job_done(struct rve_scheduler_t *scheduler, int ret) in rve_job_done() argument
303 spin_lock_irqsave(&scheduler->irq_lock, flags); in rve_job_done()
305 job = scheduler->running_job; in rve_job_done()
306 scheduler->running_job = NULL; in rve_job_done()
308 scheduler->timer.busy_time += ktime_us_delta(now, job->hw_recoder_time); in rve_job_done()
312 spin_unlock_irqrestore(&scheduler->irq_lock, flags); in rve_job_done()
328 cmd_reg[18 + i] = rve_read(RVE_CFG_REG + i * 4, scheduler); in rve_job_done()
330 error_flag = rve_read(RVE_SWREG6_IVE_WORK_STA, scheduler); in rve_job_done()
338 rve_write(0, RVE_SWLTB3_ENABLE, scheduler); in rve_job_done()
343 static void rve_job_timeout_clean(struct rve_scheduler_t *scheduler) in rve_job_timeout_clean() argument
349 spin_lock_irqsave(&scheduler->irq_lock, flags); in rve_job_timeout_clean()
351 job = scheduler->running_job; in rve_job_timeout_clean()
354 scheduler->running_job = NULL; in rve_job_timeout_clean()
356 spin_unlock_irqrestore(&scheduler->irq_lock, flags); in rve_job_timeout_clean()
358 scheduler->ops->soft_reset(scheduler); in rve_job_timeout_clean()
363 rve_power_disable(scheduler); in rve_job_timeout_clean()
366 spin_unlock_irqrestore(&scheduler->irq_lock, flags); in rve_job_timeout_clean()
373 struct rve_scheduler_t *scheduler = NULL; in rve_job_schedule() local
377 scheduler = rve_job_get_scheduler(job); in rve_job_schedule()
378 if (scheduler == NULL) { in rve_job_schedule()
379 pr_err("failed to get scheduler, %s(%d)\n", __func__, __LINE__); in rve_job_schedule()
384 rve_job_timeout_clean(scheduler); in rve_job_schedule()
386 spin_lock_irqsave(&scheduler->irq_lock, flags); in rve_job_schedule()
389 if (list_empty(&scheduler->todo_list) in rve_job_schedule()
391 list_add_tail(&job->head, &scheduler->todo_list); in rve_job_schedule()
393 list_for_each_entry(job_pos, &scheduler->todo_list, head) { in rve_job_schedule()
409 list_add_tail(&job->head, &scheduler->todo_list); in rve_job_schedule()
412 scheduler->job_count++; in rve_job_schedule()
414 spin_unlock_irqrestore(&scheduler->irq_lock, flags); in rve_job_schedule()
416 rve_job_next(scheduler); in rve_job_schedule()
418 return scheduler; in rve_job_schedule()
424 struct rve_scheduler_t *scheduler; in rve_job_abort_running() local
426 scheduler = rve_job_get_scheduler(job); in rve_job_abort_running()
428 spin_lock_irqsave(&scheduler->irq_lock, flags); in rve_job_abort_running()
431 if (job == scheduler->running_job) in rve_job_abort_running()
432 scheduler->running_job = NULL; in rve_job_abort_running()
434 spin_unlock_irqrestore(&scheduler->irq_lock, flags); in rve_job_abort_running()
446 struct rve_scheduler_t *scheduler; in rve_job_wait() local
452 scheduler = rve_job_get_scheduler(job); in rve_job_wait()
454 left_time = wait_event_timeout(scheduler->job_done_wq, in rve_job_wait()
461 scheduler->ops->soft_reset(scheduler); in rve_job_wait()
486 struct rve_scheduler_t *scheduler = NULL; in rve_job_input_fence_signaled() local
496 scheduler = rve_job_schedule(waiter->job); in rve_job_input_fence_signaled()
498 if (scheduler == NULL) in rve_job_input_fence_signaled()
499 pr_err("failed to get scheduler, %s(%d)\n", __func__, __LINE__); in rve_job_input_fence_signaled()
648 struct rve_scheduler_t *scheduler = NULL; in rve_job_commit() local
699 scheduler = rve_job_schedule(job); in rve_job_commit()
701 if (scheduler == NULL) { in rve_job_commit()
702 pr_err("failed to get scheduler, %s(%d)\n", in rve_job_commit()
722 scheduler = rve_job_schedule(job); in rve_job_commit()
724 if (scheduler == NULL) { in rve_job_commit()
725 pr_err("failed to get scheduler, %s(%d)\n", in rve_job_commit()
739 scheduler = rve_job_schedule(job); in rve_job_commit()
741 if (scheduler == NULL) { in rve_job_commit()
742 pr_err("failed to get scheduler, %s(%d)\n", __func__, in rve_job_commit()
825 struct rve_scheduler_t *scheduler; in rve_internal_ctx_signal() local
829 scheduler = rve_job_get_scheduler(job); in rve_internal_ctx_signal()
830 if (scheduler == NULL) { in rve_internal_ctx_signal()
831 pr_err("failed to get scheduler, %s(%d)\n", __func__, __LINE__); in rve_internal_ctx_signal()
857 wake_up(&scheduler->job_done_wq); in rve_internal_ctx_signal()
936 struct rve_scheduler_t *scheduler = NULL; in rve_internal_ctx_kref_release() local
953 scheduler = rve_drvdata->scheduler[i]; in rve_internal_ctx_kref_release()
955 spin_lock_irqsave(&scheduler->irq_lock, flags); in rve_internal_ctx_kref_release()
957 list_for_each_entry_safe(job_pos, job_q, &scheduler->todo_list, head) { in rve_internal_ctx_kref_release()
962 scheduler->job_count--; in rve_internal_ctx_kref_release()
967 if (scheduler->running_job) { in rve_internal_ctx_kref_release()
968 job = scheduler->running_job; in rve_internal_ctx_kref_release()
971 scheduler->running_job = NULL; in rve_internal_ctx_kref_release()
972 scheduler->timer.busy_time += ktime_us_delta(now, job->hw_recoder_time); in rve_internal_ctx_kref_release()
977 spin_unlock_irqrestore(&scheduler->irq_lock, flags); in rve_internal_ctx_kref_release()
980 pr_err("reset core[%d] by user cancel", scheduler->core); in rve_internal_ctx_kref_release()
981 scheduler->ops->soft_reset(scheduler); in rve_internal_ctx_kref_release()