diff options
author | Ping Gao <ping.a.gao@intel.com> | 2017-03-29 12:36:40 -0400 |
---|---|---|
committer | Zhenyu Wang <zhenyuw@linux.intel.com> | 2017-03-30 01:34:10 -0400 |
commit | b35f34d1da4e77637869c8041a355da810f69fb6 (patch) | |
tree | 37a32fee445cb1875e7bd9bccb8a7a525b6af91b | |
parent | afe04fbe6c522e73d5cc61a6660cce0e78630786 (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.c | 9 |
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 | } |
227 | out: | 232 | out: |
228 | if (scheduler->next_vgpu) { | 233 | if (scheduler->next_vgpu) { |