Re: [Intel-gfx] [PATCH 20/29] drm/i915: Split engine setup/init into two phases

2019-04-10 Thread Tvrtko Ursulin


On 08/04/2019 10:17, Chris Wilson wrote:

In the next patch, we require the engine vfuncs setup prior to
initialising the pinned kernel contexts, so split the vfunc setup from
the engine initialisation and call it earlier.

Signed-off-by: Chris Wilson 
---
  drivers/gpu/drm/i915/gt/intel_engine.h|   8 +-
  drivers/gpu/drm/i915/gt/intel_engine_cs.c |  99 
  drivers/gpu/drm/i915/gt/intel_lrc.c   |  74 ++
  drivers/gpu/drm/i915/gt/intel_lrc.h   |   5 +-
  drivers/gpu/drm/i915/gt/intel_ringbuffer.c| 232 +-
  drivers/gpu/drm/i915/gt/intel_workarounds.c   |   3 +-
  drivers/gpu/drm/i915/gt/mock_engine.c |  48 ++--
  drivers/gpu/drm/i915/gt/mock_engine.h |   2 +
  drivers/gpu/drm/i915/i915_gem.c   |   6 +
  .../gpu/drm/i915/selftests/mock_gem_device.c  |  12 +-
  10 files changed, 245 insertions(+), 244 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_engine.h 
b/drivers/gpu/drm/i915/gt/intel_engine.h
index a17152e96bf8..a8dc2740ba2f 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine.h
+++ b/drivers/gpu/drm/i915/gt/intel_engine.h
@@ -362,14 +362,12 @@ __intel_ring_space(unsigned int head, unsigned int tail, 
unsigned int size)
return (head - tail - CACHELINE_BYTES) & (size - 1);
  }
  
-int intel_engine_setup_common(struct intel_engine_cs *engine);

+int intel_engines_setup(struct drm_i915_private *i915);
  int intel_engine_init_common(struct intel_engine_cs *engine);
  void intel_engine_cleanup_common(struct intel_engine_cs *engine);
  
-int intel_init_render_ring_buffer(struct intel_engine_cs *engine);

-int intel_init_bsd_ring_buffer(struct intel_engine_cs *engine);
-int intel_init_blt_ring_buffer(struct intel_engine_cs *engine);
-int intel_init_vebox_ring_buffer(struct intel_engine_cs *engine);
+int intel_ring_submission_setup(struct intel_engine_cs *engine);
+int intel_ring_submission_init(struct intel_engine_cs *engine);
  
  int intel_engine_stop_cs(struct intel_engine_cs *engine);

  void intel_engine_cancel_stop_cs(struct intel_engine_cs *engine);
diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c 
b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
index f6828c0276eb..3f794bc71958 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
@@ -50,35 +50,24 @@
  
  struct engine_class_info {

const char *name;
-   int (*init_legacy)(struct intel_engine_cs *engine);
-   int (*init_execlists)(struct intel_engine_cs *engine);
-
u8 uabi_class;
  };
  
  static const struct engine_class_info intel_engine_classes[] = {

[RENDER_CLASS] = {
.name = "rcs",
-   .init_execlists = logical_render_ring_init,
-   .init_legacy = intel_init_render_ring_buffer,
.uabi_class = I915_ENGINE_CLASS_RENDER,
},
[COPY_ENGINE_CLASS] = {
.name = "bcs",
-   .init_execlists = logical_xcs_ring_init,
-   .init_legacy = intel_init_blt_ring_buffer,
.uabi_class = I915_ENGINE_CLASS_COPY,
},
[VIDEO_DECODE_CLASS] = {
.name = "vcs",
-   .init_execlists = logical_xcs_ring_init,
-   .init_legacy = intel_init_bsd_ring_buffer,
.uabi_class = I915_ENGINE_CLASS_VIDEO,
},
[VIDEO_ENHANCEMENT_CLASS] = {
.name = "vecs",
-   .init_execlists = logical_xcs_ring_init,
-   .init_legacy = intel_init_vebox_ring_buffer,
.uabi_class = I915_ENGINE_CLASS_VIDEO_ENHANCE,
},
  };
@@ -400,48 +389,39 @@ int intel_engines_init_mmio(struct drm_i915_private 
*dev_priv)
  
  /**

   * intel_engines_init() - init the Engine Command Streamers
- * @dev_priv: i915 device private
+ * @i915: i915 device private
   *
   * Return: non-zero if the initialization failed.
   */
-int intel_engines_init(struct drm_i915_private *dev_priv)
+int intel_engines_init(struct drm_i915_private *i915)
  {
+   int (*init)(struct intel_engine_cs *engine);
struct intel_engine_cs *engine;
enum intel_engine_id id, err_id;
int err;
  
-	for_each_engine(engine, dev_priv, id) {

-   const struct engine_class_info *class_info =
-   _engine_classes[engine->class];
-   int (*init)(struct intel_engine_cs *engine);
-
-   if (HAS_EXECLISTS(dev_priv))
-   init = class_info->init_execlists;
-   else
-   init = class_info->init_legacy;
+   if (HAS_EXECLISTS(i915))
+   init = intel_execlists_submission_init;
+   else
+   init = intel_ring_submission_init;
  
-		err = -EINVAL;

+   for_each_engine(engine, i915, id) {
err_id = id;
  
-		if (GEM_DEBUG_WARN_ON(!init))

-   goto cleanup;
-
err = init(engine);
if (err)
  

[Intel-gfx] [PATCH 20/29] drm/i915: Split engine setup/init into two phases

2019-04-08 Thread Chris Wilson
In the next patch, we require the engine vfuncs setup prior to
initialising the pinned kernel contexts, so split the vfunc setup from
the engine initialisation and call it earlier.

Signed-off-by: Chris Wilson 
---
 drivers/gpu/drm/i915/gt/intel_engine.h|   8 +-
 drivers/gpu/drm/i915/gt/intel_engine_cs.c |  99 
 drivers/gpu/drm/i915/gt/intel_lrc.c   |  74 ++
 drivers/gpu/drm/i915/gt/intel_lrc.h   |   5 +-
 drivers/gpu/drm/i915/gt/intel_ringbuffer.c| 232 +-
 drivers/gpu/drm/i915/gt/intel_workarounds.c   |   3 +-
 drivers/gpu/drm/i915/gt/mock_engine.c |  48 ++--
 drivers/gpu/drm/i915/gt/mock_engine.h |   2 +
 drivers/gpu/drm/i915/i915_gem.c   |   6 +
 .../gpu/drm/i915/selftests/mock_gem_device.c  |  12 +-
 10 files changed, 245 insertions(+), 244 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_engine.h 
b/drivers/gpu/drm/i915/gt/intel_engine.h
index a17152e96bf8..a8dc2740ba2f 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine.h
+++ b/drivers/gpu/drm/i915/gt/intel_engine.h
@@ -362,14 +362,12 @@ __intel_ring_space(unsigned int head, unsigned int tail, 
unsigned int size)
return (head - tail - CACHELINE_BYTES) & (size - 1);
 }
 
-int intel_engine_setup_common(struct intel_engine_cs *engine);
+int intel_engines_setup(struct drm_i915_private *i915);
 int intel_engine_init_common(struct intel_engine_cs *engine);
 void intel_engine_cleanup_common(struct intel_engine_cs *engine);
 
-int intel_init_render_ring_buffer(struct intel_engine_cs *engine);
-int intel_init_bsd_ring_buffer(struct intel_engine_cs *engine);
-int intel_init_blt_ring_buffer(struct intel_engine_cs *engine);
-int intel_init_vebox_ring_buffer(struct intel_engine_cs *engine);
+int intel_ring_submission_setup(struct intel_engine_cs *engine);
+int intel_ring_submission_init(struct intel_engine_cs *engine);
 
 int intel_engine_stop_cs(struct intel_engine_cs *engine);
 void intel_engine_cancel_stop_cs(struct intel_engine_cs *engine);
diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c 
b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
index f6828c0276eb..3f794bc71958 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
@@ -50,35 +50,24 @@
 
 struct engine_class_info {
const char *name;
-   int (*init_legacy)(struct intel_engine_cs *engine);
-   int (*init_execlists)(struct intel_engine_cs *engine);
-
u8 uabi_class;
 };
 
 static const struct engine_class_info intel_engine_classes[] = {
[RENDER_CLASS] = {
.name = "rcs",
-   .init_execlists = logical_render_ring_init,
-   .init_legacy = intel_init_render_ring_buffer,
.uabi_class = I915_ENGINE_CLASS_RENDER,
},
[COPY_ENGINE_CLASS] = {
.name = "bcs",
-   .init_execlists = logical_xcs_ring_init,
-   .init_legacy = intel_init_blt_ring_buffer,
.uabi_class = I915_ENGINE_CLASS_COPY,
},
[VIDEO_DECODE_CLASS] = {
.name = "vcs",
-   .init_execlists = logical_xcs_ring_init,
-   .init_legacy = intel_init_bsd_ring_buffer,
.uabi_class = I915_ENGINE_CLASS_VIDEO,
},
[VIDEO_ENHANCEMENT_CLASS] = {
.name = "vecs",
-   .init_execlists = logical_xcs_ring_init,
-   .init_legacy = intel_init_vebox_ring_buffer,
.uabi_class = I915_ENGINE_CLASS_VIDEO_ENHANCE,
},
 };
@@ -400,48 +389,39 @@ int intel_engines_init_mmio(struct drm_i915_private 
*dev_priv)
 
 /**
  * intel_engines_init() - init the Engine Command Streamers
- * @dev_priv: i915 device private
+ * @i915: i915 device private
  *
  * Return: non-zero if the initialization failed.
  */
-int intel_engines_init(struct drm_i915_private *dev_priv)
+int intel_engines_init(struct drm_i915_private *i915)
 {
+   int (*init)(struct intel_engine_cs *engine);
struct intel_engine_cs *engine;
enum intel_engine_id id, err_id;
int err;
 
-   for_each_engine(engine, dev_priv, id) {
-   const struct engine_class_info *class_info =
-   _engine_classes[engine->class];
-   int (*init)(struct intel_engine_cs *engine);
-
-   if (HAS_EXECLISTS(dev_priv))
-   init = class_info->init_execlists;
-   else
-   init = class_info->init_legacy;
+   if (HAS_EXECLISTS(i915))
+   init = intel_execlists_submission_init;
+   else
+   init = intel_ring_submission_init;
 
-   err = -EINVAL;
+   for_each_engine(engine, i915, id) {
err_id = id;
 
-   if (GEM_DEBUG_WARN_ON(!init))
-   goto cleanup;
-
err = init(engine);
if (err)
goto cleanup;
-
-