summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/gvt/scheduler.c
diff options
context:
space:
mode:
authorZhi Wang2017-09-10 14:28:09 +0200
committerZhenyu Wang2017-11-16 04:46:08 +0100
commit9a9829e9eb8bc4b4e870ce15a8904a32991608d5 (patch)
tree74e99c4f64a800c3619e9fad410f64087aab2910 /drivers/gpu/drm/i915/gvt/scheduler.c
parentdrm/i915/gvt: Rename intel_vgpu_{init, clean}_gvt_context() (diff)
downloadkernel-qcow2-linux-9a9829e9eb8bc4b4e870ce15a8904a32991608d5.tar.gz
kernel-qcow2-linux-9a9829e9eb8bc4b4e870ce15a8904a32991608d5.tar.xz
kernel-qcow2-linux-9a9829e9eb8bc4b4e870ce15a8904a32991608d5.zip
drm/i915/gvt: Move workload cache init/clean into intel_vgpu_{setup, clean}_submission()
Move vGPU workload cache initialization/de-initialization into intel_vgpu_{setup, clean}_submission() since they are not specific to execlist stuffs. Signed-off-by: Zhi Wang <zhi.a.wang@intel.com>
Diffstat (limited to 'drivers/gpu/drm/i915/gvt/scheduler.c')
-rw-r--r--drivers/gpu/drm/i915/gvt/scheduler.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/gvt/scheduler.c b/drivers/gpu/drm/i915/gvt/scheduler.c
index 5913bcb7b73e..81952139b00c 100644
--- a/drivers/gpu/drm/i915/gvt/scheduler.c
+++ b/drivers/gpu/drm/i915/gvt/scheduler.c
@@ -719,6 +719,7 @@ err:
void intel_vgpu_clean_submission(struct intel_vgpu *vgpu)
{
i915_gem_context_put(vgpu->shadow_ctx);
+ kmem_cache_destroy(vgpu->workloads);
}
/**
@@ -733,7 +734,9 @@ void intel_vgpu_clean_submission(struct intel_vgpu *vgpu)
*/
int intel_vgpu_setup_submission(struct intel_vgpu *vgpu)
{
- atomic_set(&vgpu->running_workload_num, 0);
+ enum intel_engine_id i;
+ struct intel_engine_cs *engine;
+ int ret;
vgpu->shadow_ctx = i915_gem_context_create_gvt(
&vgpu->gvt->dev_priv->drm);
@@ -742,5 +745,24 @@ int intel_vgpu_setup_submission(struct intel_vgpu *vgpu)
bitmap_zero(vgpu->shadow_ctx_desc_updated, I915_NUM_ENGINES);
+ vgpu->workloads = kmem_cache_create("gvt-g_vgpu_workload",
+ sizeof(struct intel_vgpu_workload), 0,
+ SLAB_HWCACHE_ALIGN,
+ NULL);
+
+ if (!vgpu->workloads) {
+ ret = -ENOMEM;
+ goto out_shadow_ctx;
+ }
+
+ for_each_engine(engine, vgpu->gvt->dev_priv, i)
+ INIT_LIST_HEAD(&vgpu->workload_q_head[i]);
+
+ atomic_set(&vgpu->running_workload_num, 0);
+
return 0;
+
+out_shadow_ctx:
+ i915_gem_context_put(vgpu->shadow_ctx);
+ return ret;
}