Blob Blame History Raw
From 9a9829e9eb8bc4b4e870ce15a8904a32991608d5 Mon Sep 17 00:00:00 2001
From: Zhi Wang <zhi.a.wang@intel.com>
Date: Sun, 10 Sep 2017 20:28:09 +0800
Subject: [PATCH] drm/i915/gvt: Move workload cache init/clean into intel_vgpu_{setup, clean}_submission()
Git-commit: 9a9829e9eb8bc4b4e870ce15a8904a32991608d5
Patch-mainline: v4.16-rc1
References: FATE#322643 bsc#1055900

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>
Acked-by: Takashi Iwai <tiwai@suse.de>

---
 drivers/gpu/drm/i915/gvt/execlist.c  |   15 +--------------
 drivers/gpu/drm/i915/gvt/scheduler.c |   24 +++++++++++++++++++++++-
 2 files changed, 24 insertions(+), 15 deletions(-)

--- a/drivers/gpu/drm/i915/gvt/execlist.c
+++ b/drivers/gpu/drm/i915/gvt/execlist.c
@@ -862,14 +862,12 @@ void intel_vgpu_clean_execlist(struct in
 	struct intel_engine_cs *engine;
 
 	clean_workloads(vgpu, ALL_ENGINES);
-	kmem_cache_destroy(vgpu->workloads);
 
 	for_each_engine(engine, vgpu->gvt->dev_priv, i) {
 		kfree(vgpu->reserve_ring_buffer_va[i]);
 		vgpu->reserve_ring_buffer_va[i] = NULL;
 		vgpu->reserve_ring_buffer_size[i] = 0;
 	}
-
 }
 
 #define RESERVE_RING_BUFFER_SIZE		((1 * PAGE_SIZE)/8)
@@ -878,19 +876,8 @@ int intel_vgpu_init_execlist(struct inte
 	enum intel_engine_id i;
 	struct intel_engine_cs *engine;
 
-	/* each ring has a virtual execlist engine */
-	for_each_engine(engine, vgpu->gvt->dev_priv, i) {
+	for_each_engine(engine, vgpu->gvt->dev_priv, i)
 		init_vgpu_execlist(vgpu, i);
-		INIT_LIST_HEAD(&vgpu->workload_q_head[i]);
-	}
-
-	vgpu->workloads = kmem_cache_create("gvt-g_vgpu_workload",
-			sizeof(struct intel_vgpu_workload), 0,
-			SLAB_HWCACHE_ALIGN,
-			NULL);
-
-	if (!vgpu->workloads)
-		return -ENOMEM;
 
 	/* each ring has a shadow ring buffer until vgpu destroyed */
 	for_each_engine(engine, vgpu->gvt->dev_priv, i) {
--- a/drivers/gpu/drm/i915/gvt/scheduler.c
+++ b/drivers/gpu/drm/i915/gvt/scheduler.c
@@ -753,6 +753,7 @@ err:
 void intel_vgpu_clean_submission(struct intel_vgpu *vgpu)
 {
 	i915_gem_context_put(vgpu->shadow_ctx);
+	kmem_cache_destroy(vgpu->workloads);
 }
 
 /**
@@ -767,7 +768,9 @@ void intel_vgpu_clean_submission(struct
  */
 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);
@@ -776,5 +779,24 @@ int intel_vgpu_setup_submission(struct i
 
 	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;
 }