aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPing Gao <ping.a.gao@intel.com>2017-03-29 12:36:40 -0400
committerZhenyu Wang <zhenyuw@linux.intel.com>2017-03-30 01:34:10 -0400
commitb35f34d1da4e77637869c8041a355da810f69fb6 (patch)
tree37a32fee445cb1875e7bd9bccb8a7a525b6af91b
parentafe04fbe6c522e73d5cc61a6660cce0e78630786 (diff)
drm/i915/gvt: control the scheduler by timeslice usage
The timeslice usage will determine vGPU whether has chance to schedule or not at every vGPU switch checkpoint. Signed-off-by: Ping Gao <ping.a.gao@intel.com> Reviewed-by: Kevin Tian <kevin.tian@intel.com> Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
-rw-r--r--drivers/gpu/drm/i915/gvt/sched_policy.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/gvt/sched_policy.c b/drivers/gpu/drm/i915/gvt/sched_policy.c
index dd5b38c3e4ed..f84959170674 100644
--- a/drivers/gpu/drm/i915/gvt/sched_policy.c
+++ b/drivers/gpu/drm/i915/gvt/sched_policy.c
@@ -187,8 +187,11 @@ static struct intel_vgpu *find_busy_vgpu(struct gvt_sched_data *sched_data)
187 if (!vgpu_has_pending_workload(vgpu_data->vgpu)) 187 if (!vgpu_has_pending_workload(vgpu_data->vgpu))
188 continue; 188 continue;
189 189
190 vgpu = vgpu_data->vgpu; 190 /* Return the vGPU only if it has time slice left */
191 break; 191 if (vgpu_data->left_ts > 0) {
192 vgpu = vgpu_data->vgpu;
193 break;
194 }
192 } 195 }
193 196
194 return vgpu; 197 return vgpu;
@@ -223,6 +226,8 @@ static void tbs_sched_func(struct gvt_sched_data *sched_data)
223 &sched_data->lru_runq_head); 226 &sched_data->lru_runq_head);
224 227
225 gvt_dbg_sched("pick next vgpu %d\n", vgpu->id); 228 gvt_dbg_sched("pick next vgpu %d\n", vgpu->id);
229 } else {
230 scheduler->next_vgpu = gvt->idle_vgpu;
226 } 231 }
227out: 232out:
228 if (scheduler->next_vgpu) { 233 if (scheduler->next_vgpu) {