summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/gvt/scheduler.c
diff options
context:
space:
mode:
authorPing Gao2017-06-29 06:22:43 +0200
committerZhenyu Wang2017-08-10 04:26:07 +0200
commitd0302e74003bf1f0fc41c06948b745204c4704ea (patch)
tree937393c462eae58aaa09657d927682bf48926c6e /drivers/gpu/drm/i915/gvt/scheduler.c
parentdrm/i915/gvt: Factor out scan and shadow from workload dispatch (diff)
downloadkernel-qcow2-linux-d0302e74003bf1f0fc41c06948b745204c4704ea.tar.gz
kernel-qcow2-linux-d0302e74003bf1f0fc41c06948b745204c4704ea.tar.xz
kernel-qcow2-linux-d0302e74003bf1f0fc41c06948b745204c4704ea.zip
drm/i915/gvt: Audit and shadow workload during ELSP writing
Let the workload audit and shadow ahead of vGPU scheduling, that will eliminate GPU idle time and improve performance for multi-VM. The performance of Heaven running simultaneously in 3VMs has improved 20% after this patch. v2:Remove condition current->vgpu==vgpu when shadow during ELSP writing. Signed-off-by: Ping Gao <ping.a.gao@intel.com> Reviewed-by: Zhi Wang <zhi.a.wang@intel.com> Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
Diffstat (limited to 'drivers/gpu/drm/i915/gvt/scheduler.c')
-rw-r--r--drivers/gpu/drm/i915/gvt/scheduler.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/gvt/scheduler.c b/drivers/gpu/drm/i915/gvt/scheduler.c
index 7929c0285d1d..bd59c6d09319 100644
--- a/drivers/gpu/drm/i915/gvt/scheduler.c
+++ b/drivers/gpu/drm/i915/gvt/scheduler.c
@@ -201,6 +201,9 @@ int intel_gvt_scan_and_shadow_workload(struct intel_vgpu_workload *workload)
struct intel_vgpu *vgpu = workload->vgpu;
int ret;
+ if (workload->shadowed)
+ return 0;
+
shadow_ctx->desc_template &= ~(0x3 << GEN8_CTX_ADDRESSING_MODE_SHIFT);
shadow_ctx->desc_template |= workload->ctx_desc.addressing_mode <<
GEN8_CTX_ADDRESSING_MODE_SHIFT;
@@ -228,6 +231,10 @@ int intel_gvt_scan_and_shadow_workload(struct intel_vgpu_workload *workload)
}
ret = populate_shadow_context(workload);
+ if (ret)
+ goto out;
+
+ workload->shadowed = true;
out:
return ret;