scheduler
int scheduler;
if (!(ctx->i915->caps.scheduler & I915_SCHEDULER_CAP_PREEMPTION))
if (!(i915->caps.scheduler & I915_SCHEDULER_CAP_PRIORITY))
if (!(i915->caps.scheduler & I915_SCHEDULER_CAP_PREEMPTION))
i915->caps.scheduler = enabled & ~disabled;
if (!(i915->caps.scheduler & I915_SCHEDULER_CAP_ENABLED))
i915->caps.scheduler = 0;
i915->caps.scheduler = enabled & ~disabled;
if (!(i915->caps.scheduler & I915_SCHEDULER_CAP_ENABLED))
i915->caps.scheduler = 0;
if (!(gt->i915->caps.scheduler & I915_SCHEDULER_CAP_PRIORITY))
spin_unlock_bh(&gvt->scheduler.mmio_context_lock);
spin_lock_bh(&gvt->scheduler.mmio_context_lock);
struct intel_gvt_workload_scheduler scheduler;
vgpu == gvt->scheduler.engine_owner[engine->id] ||
spin_lock_init(&gvt->scheduler.mmio_context_lock);
struct intel_gvt_workload_scheduler *scheduler = &gvt->scheduler;
if (scheduler->next_vgpu == scheduler->current_vgpu) {
scheduler->next_vgpu = NULL;
scheduler->need_reschedule = true;
if (scheduler->current_workload[engine->id])
vgpu_update_timeslice(scheduler->current_vgpu, cur_time);
vgpu_data = scheduler->next_vgpu->sched_data;
scheduler->current_vgpu = scheduler->next_vgpu;
scheduler->next_vgpu = NULL;
scheduler->need_reschedule = false;
wake_up(&scheduler->waitq[engine->id]);
struct intel_gvt_workload_scheduler *scheduler = &gvt->scheduler;
if (list_empty(&sched_data->lru_runq_head) || scheduler->next_vgpu)
scheduler->next_vgpu = vgpu;
scheduler->next_vgpu = gvt->idle_vgpu;
if (scheduler->next_vgpu)
struct gvt_sched_data *sched_data = gvt->scheduler.sched_data;
vgpu_update_timeslice(gvt->scheduler.current_vgpu, cur_time);
struct intel_gvt_workload_scheduler *scheduler =
&gvt->scheduler;
scheduler->sched_data = data;
struct intel_gvt_workload_scheduler *scheduler =
&gvt->scheduler;
struct gvt_sched_data *data = scheduler->sched_data;
scheduler->sched_data = NULL;
struct gvt_sched_data *sched_data = gvt->scheduler.sched_data;
struct gvt_sched_data *sched_data = vgpu->gvt->scheduler.sched_data;
gvt->scheduler.sched_ops = &tbs_schedule_ops;
ret = gvt->scheduler.sched_ops->init(gvt);
gvt->scheduler.sched_ops->clean(gvt);
ret = vgpu->gvt->scheduler.sched_ops->init_vgpu(vgpu);
vgpu->gvt->scheduler.sched_ops->clean_vgpu(vgpu);
vgpu->gvt->scheduler.sched_ops->start_schedule(vgpu);
struct intel_gvt_workload_scheduler *scheduler =
&vgpu->gvt->scheduler;
scheduler->sched_ops->stop_schedule(vgpu);
if (scheduler->next_vgpu == vgpu)
scheduler->next_vgpu = NULL;
if (scheduler->current_vgpu == vgpu) {
scheduler->need_reschedule = true;
scheduler->current_vgpu = NULL;
spin_lock_bh(&scheduler->mmio_context_lock);
if (scheduler->engine_owner[engine->id] == vgpu) {
scheduler->engine_owner[engine->id] = NULL;
spin_unlock_bh(&scheduler->mmio_context_lock);
struct intel_gvt_workload_scheduler *scheduler = &gvt->scheduler;
scheduler->current_workload[ring_id];
scheduler->current_workload[ring_id] = NULL;
wake_up(&scheduler->workload_complete_wq);
if (gvt->scheduler.need_reschedule)
struct intel_gvt_workload_scheduler *scheduler = &gvt->scheduler;
add_wait_queue(&scheduler->waitq[engine->id], &wait);
remove_wait_queue(&scheduler->waitq[engine->id], &wait);
struct intel_gvt_workload_scheduler *scheduler = &gvt->scheduler;
wait_event(scheduler->workload_complete_wq,
struct intel_gvt_workload_scheduler *scheduler = &gvt->scheduler;
kthread_stop(scheduler->thread[i]);
struct intel_gvt_workload_scheduler *scheduler = &gvt->scheduler;
init_waitqueue_head(&scheduler->workload_complete_wq);
init_waitqueue_head(&scheduler->waitq[i]);
scheduler->thread[i] = kthread_run(workload_thread, engine,
if (IS_ERR(scheduler->thread[i])) {
ret = PTR_ERR(scheduler->thread[i]);
wake_up(&workload->vgpu->gvt->scheduler.waitq[workload->engine->id]);
struct intel_gvt_workload_scheduler *scheduler = &gvt->scheduler;
spin_lock_irqsave(&scheduler->mmio_context_lock, flags);
scheduler->engine_owner[ring_id]) {
intel_gvt_switch_mmio(scheduler->engine_owner[ring_id],
scheduler->engine_owner[ring_id] = NULL;
spin_unlock_irqrestore(&scheduler->mmio_context_lock, flags);
workload = scheduler->current_workload[ring_id];
spin_lock_irqsave(&scheduler->mmio_context_lock, flags);
if (workload->vgpu != scheduler->engine_owner[ring_id]) {
intel_gvt_switch_mmio(scheduler->engine_owner[ring_id],
scheduler->engine_owner[ring_id] = workload->vgpu;
spin_unlock_irqrestore(&scheduler->mmio_context_lock, flags);
struct intel_gvt_workload_scheduler *scheduler = &gvt->scheduler;
if (!scheduler->current_vgpu) {
if (scheduler->need_reschedule) {
scheduler->current_vgpu->status) ||
list_empty(workload_q_head(scheduler->current_vgpu, engine)))
if (scheduler->current_workload[engine->id]) {
workload = scheduler->current_workload[engine->id];
scheduler->current_workload[engine->id] =
list_first_entry(workload_q_head(scheduler->current_vgpu,
workload = scheduler->current_workload[engine->id];
struct intel_gvt_workload_scheduler *scheduler = &gvt->scheduler;
if (scheduler->current_vgpu == NULL) {
value = i915->caps.scheduler;
value = !!(i915->caps.scheduler & I915_SCHEDULER_CAP_SEMAPHORES);
if (i915->caps.scheduler & I915_SCHEDULER_CAP_ENGINE_BUSY_STATS)
drm_printf(p, "scheduler: 0x%x\n", caps->scheduler);
unsigned int scheduler;
#define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/scheduler
| grammar scheduler '\n'
scheduler:
return scheduler();
int scheduler(void);