Lines Matching full:scheduler

37  * DOC: Scheduler
64 * FW-scheduler, we use the 1:1 entity:scheduler mode, such that each
65 * entity has its own job scheduler. When a job is ready to be executed
149 * struct panthor_scheduler - Object used to manage the scheduler
156 * @wq: Workqueue used by our internal scheduler logic and
159 * Used for the scheduler tick, group update or other kind of FW
170 * blocking the rest of the scheduler if the allocation tries to
194 * FW event processing to the scheduler workqueue.
221 * @lock: Lock protecting access to all the scheduler fields.
293 /** @has_ref: True if the scheduler owns a runtime PM reference. */
357 /** @scheduler: DRM scheduler used for this queue. */
358 struct drm_gpu_scheduler scheduler;
718 * Grabs a ref and queue a work item to the scheduler workqueue. If
726 if (!queue_work((group)->ptdev->scheduler->wq, &(group)->wname ## _work)) \
731 * sched_queue_work() - Queue a scheduler work.
732 * @sched: Scheduler object.
735 * Conditionally queues a scheduler work if no reset is pending/in-progress.
745 * sched_queue_delayed_work() - Queue a scheduler delayed work.
746 * @sched: Scheduler object.
750 * Conditionally queues a scheduler delayed work if no reset is
892 if (queue->scheduler.ops)
893 drm_sched_fini(&queue->scheduler);
968 lockdep_assert_held(&ptdev->scheduler->lock);
971 ptdev->scheduler->csg_slots[csg_id].group))
978 csg_slot = &ptdev->scheduler->csg_slots[csg_id];
1009 lockdep_assert_held(&ptdev->scheduler->lock);
1017 slot = &ptdev->scheduler->csg_slots[group->csg_id];
1048 struct panthor_queue *queue = ptdev->scheduler->csg_slots[csg_id].group->queues[cs_id];
1051 lockdep_assert_held(&ptdev->scheduler->lock);
1073 drm_sched_resume_timeout(&queue->scheduler, queue->remaining_time);
1093 struct panthor_group *group = ptdev->scheduler->csg_slots[csg_id].group;
1096 lockdep_assert_held(&ptdev->scheduler->lock);
1106 queue->remaining_time = drm_sched_suspend_timeout(&queue->scheduler);
1126 struct panthor_csg_slot *csg_slot = &ptdev->scheduler->csg_slots[csg_id];
1129 lockdep_assert_held(&ptdev->scheduler->lock);
1146 struct panthor_group *group = ptdev->scheduler->csg_slots[csg_id].group;
1163 &group->ptdev->scheduler->groups.waiting);
1197 struct panthor_csg_slot *csg_slot = &ptdev->scheduler->csg_slots[csg_id];
1201 lockdep_assert_held(&ptdev->scheduler->lock);
1215 struct panthor_csg_slot *csg_slot = &ptdev->scheduler->csg_slots[csg_id];
1221 lockdep_assert_held(&ptdev->scheduler->lock);
1293 lockdep_assert_held(&ptdev->scheduler->lock);
1301 csg_slot = &ptdev->scheduler->csg_slots[csg_id];
1345 struct panthor_scheduler *sched = ptdev->scheduler;
1387 struct panthor_scheduler *sched = ptdev->scheduler;
1434 struct panthor_scheduler *sched = ptdev->scheduler;
1466 /* We do the allocation without holding the scheduler lock to avoid
1537 struct panthor_scheduler *sched = ptdev->scheduler;
1562 lockdep_assert_held(&ptdev->scheduler->lock);
1588 struct panthor_csg_slot *csg_slot = &ptdev->scheduler->csg_slots[csg_id];
1591 lockdep_assert_held(&ptdev->scheduler->lock);
1599 struct panthor_scheduler *sched = ptdev->scheduler;
1615 struct panthor_csg_slot *csg_slot = &ptdev->scheduler->csg_slots[csg_id];
1618 lockdep_assert_held(&ptdev->scheduler->lock);
1623 sched_queue_work(ptdev->scheduler, sync_upd);
1629 struct panthor_scheduler *sched = ptdev->scheduler;
1650 lockdep_assert_held(&ptdev->scheduler->lock);
1652 if (drm_WARN_ON(&ptdev->base, csg_id >= ptdev->scheduler->csg_slot_count))
1708 lockdep_assert_held(&ptdev->scheduler->lock);
1712 sched_queue_delayed_work(ptdev->scheduler, tick, 0);
1724 lockdep_assert_held(&ptdev->scheduler->lock);
1759 * panthor_sched_report_fw_events() - Report FW events to the scheduler.
1763 if (!ptdev->scheduler)
1766 atomic_or(events, &ptdev->scheduler->fw_events);
1767 sched_queue_work(ptdev->scheduler, fw_events);
1804 drm_WARN_ON(&ptdev->base, csg_id >= ptdev->scheduler->csg_slot_count))
1815 struct panthor_scheduler *sched = ptdev->scheduler;
1898 return ptdev->scheduler->csg_slots[group->csg_id].idle;
2089 sched_queue_work(group->ptdev->scheduler, sync_upd);
2335 * keep the scheduler ticking, otherwise, we'll just wait for
2533 struct panthor_scheduler *sched = ptdev->scheduler;
2542 /* All updated queues are blocked, no need to wake up the scheduler. */
2570 /* Scheduler is ticking, nothing to do. */
2579 /* Scheduler tick was off, recalculate the resched_target based on the
2580 * last tick event, and queue the scheduler work.
2594 drm_sched_stop(&queue->scheduler, bad_job ? &bad_job->base : NULL);
2602 list_for_each_entry(job, &queue->scheduler.pending_list, base.list)
2605 drm_sched_start(&queue->scheduler, 0);
2610 struct panthor_scheduler *sched = group->ptdev->scheduler;
2623 struct panthor_scheduler *sched = group->ptdev->scheduler;
2625 lockdep_assert_held(&group->ptdev->scheduler->reset.lock);
2646 struct panthor_scheduler *sched = ptdev->scheduler;
2652 * panthor_sched_report_mmu_fault() - Report MMU faults to the scheduler.
2657 if (ptdev->scheduler)
2669 struct panthor_scheduler *sched = ptdev->scheduler;
2779 /* We don't bother stopping the scheduler if the group is
2792 struct panthor_scheduler *sched = ptdev->scheduler;
2799 /* Cancel all scheduler works. Once this is done, these works can't be
2827 struct panthor_scheduler *sched = ptdev->scheduler;
2843 * kick the scheduler.
2990 struct panthor_scheduler *sched = ptdev->scheduler;
3119 struct panthor_scheduler *sched = ptdev->scheduler;
3183 queue->remaining_time = drm_sched_suspend_timeout(&queue->scheduler);
3218 struct panthor_scheduler *sched = ptdev->scheduler;
3230 sched_queue_delayed_work(ptdev->scheduler, tick, 0);
3232 /* Remove from the run queues, so the scheduler can't
3292 .submit_wq = group->ptdev->scheduler->wq,
3378 ret = drm_sched_init(&queue->scheduler, &sched_args);
3382 drm_sched = &queue->scheduler;
3423 struct panthor_scheduler *sched = ptdev->scheduler;
3554 struct panthor_scheduler *sched = ptdev->scheduler;
3572 /* Remove from the run queues, so the scheduler can't
3603 struct panthor_scheduler *sched = ptdev->scheduler;
3828 struct panthor_scheduler *sched = ptdev->scheduler;
3882 /* The FW-side scheduler might deadlock if two groups with the same
3936 * the scheduler because works queued by the scheduler are in
3961 ptdev->scheduler = sched;