Lines Matching refs:vgpu

37 static bool vgpu_has_pending_workload(struct intel_vgpu *vgpu)
42 for_each_engine(engine, vgpu->gvt->gt, i) {
43 if (!list_empty(workload_q_head(vgpu, engine)))
55 struct intel_vgpu *vgpu;
75 static void vgpu_update_timeslice(struct intel_vgpu *vgpu, ktime_t cur_time)
80 if (!vgpu || vgpu == vgpu->gvt->idle_vgpu)
83 vgpu_data = vgpu->sched_data;
150 * stop dispatching workload for current vgpu
165 /* switch current vgpu */
179 struct intel_vgpu *vgpu = NULL;
183 /* search a vgpu with pending workload */
187 if (!vgpu_has_pending_workload(vgpu_data->vgpu))
192 vgpu = vgpu_data->vgpu;
200 vgpu = vgpu_data->vgpu;
205 return vgpu;
216 struct intel_vgpu *vgpu = NULL;
218 /* no active vgpu or has already had a target */
222 vgpu = find_busy_vgpu(sched_data);
223 if (vgpu) {
224 scheduler->next_vgpu = vgpu;
225 vgpu_data = vgpu->sched_data;
310 static int tbs_sched_init_vgpu(struct intel_vgpu *vgpu)
318 data->sched_ctl.weight = vgpu->sched_ctl.weight;
319 data->vgpu = vgpu;
322 vgpu->sched_data = data;
327 static void tbs_sched_clean_vgpu(struct intel_vgpu *vgpu)
329 struct intel_gvt *gvt = vgpu->gvt;
332 kfree(vgpu->sched_data);
333 vgpu->sched_data = NULL;
335 /* this vgpu id has been removed */
340 static void tbs_sched_start_schedule(struct intel_vgpu *vgpu)
342 struct gvt_sched_data *sched_data = vgpu->gvt->scheduler.sched_data;
343 struct vgpu_sched_data *vgpu_data = vgpu->sched_data;
362 static void tbs_sched_stop_schedule(struct intel_vgpu *vgpu)
364 struct vgpu_sched_data *vgpu_data = vgpu->sched_data;
398 /* for per-vgpu scheduler policy, there are 2 per-vgpu data:
405 int intel_vgpu_init_sched_policy(struct intel_vgpu *vgpu)
409 mutex_lock(&vgpu->gvt->sched_lock);
410 ret = vgpu->gvt->scheduler.sched_ops->init_vgpu(vgpu);
411 mutex_unlock(&vgpu->gvt->sched_lock);
416 void intel_vgpu_clean_sched_policy(struct intel_vgpu *vgpu)
418 mutex_lock(&vgpu->gvt->sched_lock);
419 vgpu->gvt->scheduler.sched_ops->clean_vgpu(vgpu);
420 mutex_unlock(&vgpu->gvt->sched_lock);
423 void intel_vgpu_start_schedule(struct intel_vgpu *vgpu)
425 struct vgpu_sched_data *vgpu_data = vgpu->sched_data;
427 mutex_lock(&vgpu->gvt->sched_lock);
429 gvt_dbg_core("vgpu%d: start schedule\n", vgpu->id);
430 vgpu->gvt->scheduler.sched_ops->start_schedule(vgpu);
432 mutex_unlock(&vgpu->gvt->sched_lock);
442 void intel_vgpu_stop_schedule(struct intel_vgpu *vgpu)
445 &vgpu->gvt->scheduler;
446 struct vgpu_sched_data *vgpu_data = vgpu->sched_data;
447 struct drm_i915_private *dev_priv = vgpu->gvt->gt->i915;
455 gvt_dbg_core("vgpu%d: stop schedule\n", vgpu->id);
457 mutex_lock(&vgpu->gvt->sched_lock);
458 scheduler->sched_ops->stop_schedule(vgpu);
460 if (scheduler->next_vgpu == vgpu)
463 if (scheduler->current_vgpu == vgpu) {
471 for_each_engine(engine, vgpu->gvt->gt, id) {
472 if (scheduler->engine_owner[engine->id] == vgpu) {
473 intel_gvt_switch_mmio(vgpu, NULL, engine);
479 mutex_unlock(&vgpu->gvt->sched_lock);