diff mbox

[v2,10/12] drm/i915: Move the magical deferred context allocation into the request

Message ID 1461066053-30072-11-git-send-email-chris@chris-wilson.co.uk (mailing list archive)
State New, archived
Headers show

Commit Message

Chris Wilson April 19, 2016, 11:40 a.m. UTC
We can hide more details of execlists from higher level code by removing
the explicit call to create an execlist context from execbuffer and
into its first use by execlists.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
---
 drivers/gpu/drm/i915/i915_gem_execbuffer.c |  8 --------
 drivers/gpu/drm/i915/intel_lrc.c           | 21 ++++++++++++++-------
 drivers/gpu/drm/i915/intel_lrc.h           |  2 --
 3 files changed, 14 insertions(+), 17 deletions(-)

Comments

kernel test robot April 19, 2016, 12:40 p.m. UTC | #1
Hi,

[auto build test WARNING on drm-intel/for-linux-next]
[also build test WARNING on next-20160419]
[cannot apply to v4.6-rc4]
[if your patch is applied to the wrong git tree, please drop us a note to help improving the system]

url:    https://github.com/0day-ci/linux/commits/Chris-Wilson/drm-i915-Mark-the-current-context-as-lost-on-suspend/20160419-194400
base:   git://anongit.freedesktop.org/drm-intel for-linux-next
reproduce: make htmldocs

All warnings (new ones prefixed by >>):

   include/drm/drmP.h:280: warning: No description found for parameter 'ioctl'
   include/drm/drmP.h:280: warning: No description found for parameter '_func'
   include/drm/drmP.h:280: warning: No description found for parameter '_flags'
   include/drm/drmP.h:362: warning: cannot understand function prototype: 'struct drm_lock_data '
   include/drm/drmP.h:415: warning: cannot understand function prototype: 'struct drm_driver '
   include/drm/drmP.h:672: warning: cannot understand function prototype: 'struct drm_info_list '
   include/drm/drmP.h:682: warning: cannot understand function prototype: 'struct drm_info_node '
   include/drm/drmP.h:692: warning: cannot understand function prototype: 'struct drm_minor '
   include/drm/drmP.h:740: warning: cannot understand function prototype: 'struct drm_device '
   drivers/gpu/drm/i915/intel_runtime_pm.c:2356: warning: No description found for parameter 'resume'
   drivers/gpu/drm/i915/intel_runtime_pm.c:2356: warning: No description found for parameter 'resume'
   drivers/gpu/drm/i915/i915_irq.c:2722: warning: No description found for parameter 'fmt'
   drivers/gpu/drm/i915/i915_irq.c:2722: warning: No description found for parameter 'fmt'
   drivers/gpu/drm/i915/i915_irq.c:2722: warning: No description found for parameter 'fmt'
   drivers/gpu/drm/i915/i915_irq.c:2722: warning: No description found for parameter 'fmt'
   drivers/gpu/drm/i915/i915_gem.c:416: warning: No description found for parameter 'dev'
   drivers/gpu/drm/i915/i915_gem.c:416: warning: No description found for parameter 'data'
   drivers/gpu/drm/i915/i915_gem.c:416: warning: No description found for parameter 'file'
   drivers/gpu/drm/i915/i915_gem.c:681: warning: No description found for parameter 'dev'
   drivers/gpu/drm/i915/i915_gem.c:681: warning: No description found for parameter 'data'
   drivers/gpu/drm/i915/i915_gem.c:681: warning: No description found for parameter 'file'
   drivers/gpu/drm/i915/i915_gem.c:762: warning: No description found for parameter 'dev'
   drivers/gpu/drm/i915/i915_gem.c:762: warning: No description found for parameter 'obj'
   drivers/gpu/drm/i915/i915_gem.c:762: warning: No description found for parameter 'args'
   drivers/gpu/drm/i915/i915_gem.c:762: warning: No description found for parameter 'file'
   drivers/gpu/drm/i915/i915_gem.c:1025: warning: No description found for parameter 'dev'
   drivers/gpu/drm/i915/i915_gem.c:1025: warning: No description found for parameter 'data'
   drivers/gpu/drm/i915/i915_gem.c:1025: warning: No description found for parameter 'file'
   drivers/gpu/drm/i915/i915_gem.c:1231: warning: No description found for parameter 'rps'
   drivers/gpu/drm/i915/i915_gem.c:1446: warning: No description found for parameter 'req'
   drivers/gpu/drm/i915/i915_gem.c:1475: warning: No description found for parameter 'obj'
   drivers/gpu/drm/i915/i915_gem.c:1475: warning: No description found for parameter 'readonly'
   drivers/gpu/drm/i915/i915_gem.c:1591: warning: No description found for parameter 'dev'
   drivers/gpu/drm/i915/i915_gem.c:1591: warning: No description found for parameter 'data'
   drivers/gpu/drm/i915/i915_gem.c:1591: warning: No description found for parameter 'file'
   drivers/gpu/drm/i915/i915_gem.c:1654: warning: No description found for parameter 'dev'
   drivers/gpu/drm/i915/i915_gem.c:1654: warning: No description found for parameter 'data'
   drivers/gpu/drm/i915/i915_gem.c:1654: warning: No description found for parameter 'file'
   drivers/gpu/drm/i915/i915_gem.c:1699: warning: No description found for parameter 'dev'
   drivers/gpu/drm/i915/i915_gem.c:1699: warning: No description found for parameter 'data'
   drivers/gpu/drm/i915/i915_gem.c:1699: warning: No description found for parameter 'file'
   drivers/gpu/drm/i915/i915_gem.c:2004: warning: No description found for parameter 'dev'
   drivers/gpu/drm/i915/i915_gem.c:2004: warning: No description found for parameter 'size'
   drivers/gpu/drm/i915/i915_gem.c:2004: warning: No description found for parameter 'tiling_mode'
   drivers/gpu/drm/i915/i915_gem.c:2004: warning: No description found for parameter 'fenced'
   drivers/gpu/drm/i915/i915_gem.c:2004: warning: Excess function parameter 'obj' description in 'i915_gem_get_gtt_alignment'
   drivers/gpu/drm/i915/i915_gem.c:2961: warning: No description found for parameter 'engine'
   drivers/gpu/drm/i915/i915_gem.c:3087: warning: No description found for parameter 'obj'
   drivers/gpu/drm/i915/i915_gem.c:3137: warning: No description found for parameter 'dev'
   drivers/gpu/drm/i915/i915_gem.c:3137: warning: No description found for parameter 'data'
   drivers/gpu/drm/i915/i915_gem.c:3137: warning: No description found for parameter 'file'
   drivers/gpu/drm/i915/i915_gem.c:3137: warning: Excess function parameter 'DRM_IOCTL_ARGS' description in 'i915_gem_wait_ioctl'
   drivers/gpu/drm/i915/i915_gem.c:3499: warning: No description found for parameter 'obj'
   drivers/gpu/drm/i915/i915_gem.c:3499: warning: No description found for parameter 'vm'
   drivers/gpu/drm/i915/i915_gem.c:3499: warning: No description found for parameter 'ggtt_view'
   drivers/gpu/drm/i915/i915_gem.c:3499: warning: No description found for parameter 'alignment'
   drivers/gpu/drm/i915/i915_gem.c:3499: warning: No description found for parameter 'flags'
   drivers/gpu/drm/i915/i915_gem.c:3755: warning: No description found for parameter 'obj'
   drivers/gpu/drm/i915/i915_gem.c:3755: warning: No description found for parameter 'write'
   drivers/gpu/drm/i915/i915_gem.c:3833: warning: No description found for parameter 'obj'
   drivers/gpu/drm/i915/i915_gem.c:3833: warning: No description found for parameter 'cache_level'
   drivers/gpu/drm/i915/i915_gem.c:4107: warning: No description found for parameter 'obj'
   drivers/gpu/drm/i915/i915_gem.c:4107: warning: No description found for parameter 'write'
   drivers/gpu/drm/i915/i915_cmd_parser.c:748: warning: No description found for parameter 'engine'
   drivers/gpu/drm/i915/i915_cmd_parser.c:748: warning: Excess function parameter 'ring' description in 'i915_cmd_parser_init_ring'
   drivers/gpu/drm/i915/i915_cmd_parser.c:838: warning: No description found for parameter 'engine'
   drivers/gpu/drm/i915/i915_cmd_parser.c:838: warning: Excess function parameter 'ring' description in 'i915_cmd_parser_fini_ring'
   drivers/gpu/drm/i915/i915_cmd_parser.c:1034: warning: No description found for parameter 'engine'
   drivers/gpu/drm/i915/i915_cmd_parser.c:1034: warning: Excess function parameter 'ring' description in 'i915_needs_cmd_parser'
   drivers/gpu/drm/i915/i915_cmd_parser.c:1186: warning: No description found for parameter 'engine'
   drivers/gpu/drm/i915/i915_cmd_parser.c:1186: warning: Excess function parameter 'ring' description in 'i915_parse_cmds'
   drivers/gpu/drm/i915/i915_cmd_parser.c:748: warning: No description found for parameter 'engine'
   drivers/gpu/drm/i915/i915_cmd_parser.c:748: warning: Excess function parameter 'ring' description in 'i915_cmd_parser_init_ring'
   drivers/gpu/drm/i915/i915_cmd_parser.c:838: warning: No description found for parameter 'engine'
   drivers/gpu/drm/i915/i915_cmd_parser.c:838: warning: Excess function parameter 'ring' description in 'i915_cmd_parser_fini_ring'
   drivers/gpu/drm/i915/i915_cmd_parser.c:1034: warning: No description found for parameter 'engine'
   drivers/gpu/drm/i915/i915_cmd_parser.c:1034: warning: Excess function parameter 'ring' description in 'i915_needs_cmd_parser'
   drivers/gpu/drm/i915/i915_cmd_parser.c:1186: warning: No description found for parameter 'engine'
   drivers/gpu/drm/i915/i915_cmd_parser.c:1186: warning: Excess function parameter 'ring' description in 'i915_parse_cmds'
   drivers/gpu/drm/i915/intel_lrc.c:318: warning: No description found for parameter 'engine'
   drivers/gpu/drm/i915/intel_lrc.c:318: warning: Excess function parameter 'ring' description in 'intel_lr_context_descriptor_update'
   drivers/gpu/drm/i915/intel_lrc.c:522: warning: No description found for parameter 'data'
   drivers/gpu/drm/i915/intel_lrc.c:522: warning: Excess function parameter 'engine' description in 'intel_lrc_irq_handler'
   drivers/gpu/drm/i915/intel_lrc.c:929: warning: No description found for parameter 'params'
   drivers/gpu/drm/i915/intel_lrc.c:929: warning: Excess function parameter 'dev' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:929: warning: Excess function parameter 'file' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:929: warning: Excess function parameter 'ring' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:929: warning: Excess function parameter 'ctx' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:929: warning: Excess function parameter 'batch_obj' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:929: warning: Excess function parameter 'exec_start' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:929: warning: Excess function parameter 'dispatch_flags' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:1302: warning: No description found for parameter 'engine'
   drivers/gpu/drm/i915/intel_lrc.c:1302: warning: Excess function parameter 'ring' description in 'gen8_init_indirectctx_bb'
   drivers/gpu/drm/i915/intel_lrc.c:1365: warning: No description found for parameter 'engine'
   drivers/gpu/drm/i915/intel_lrc.c:1365: warning: Excess function parameter 'ring' description in 'gen8_init_perctx_bb'
   drivers/gpu/drm/i915/intel_lrc.c:2008: warning: No description found for parameter 'engine'
   drivers/gpu/drm/i915/intel_lrc.c:2008: warning: Excess function parameter 'ring' description in 'intel_logical_ring_cleanup'
   drivers/gpu/drm/i915/intel_lrc.c:2587: warning: No description found for parameter 'engine'
   drivers/gpu/drm/i915/intel_lrc.c:2587: warning: Excess function parameter 'ring' description in 'intel_lr_context_size'
   drivers/gpu/drm/i915/intel_lrc.c:2625: warning: No description found for parameter 'engine'
>> drivers/gpu/drm/i915/intel_lrc.c:2625: warning: Excess function parameter 'ring' description in 'execlists_context_deferred_alloc'
   drivers/gpu/drm/i915/intel_lrc.c:318: warning: No description found for parameter 'engine'
   drivers/gpu/drm/i915/intel_lrc.c:318: warning: Excess function parameter 'ring' description in 'intel_lr_context_descriptor_update'
   drivers/gpu/drm/i915/intel_lrc.c:522: warning: No description found for parameter 'data'
   drivers/gpu/drm/i915/intel_lrc.c:522: warning: Excess function parameter 'engine' description in 'intel_lrc_irq_handler'
   drivers/gpu/drm/i915/intel_lrc.c:929: warning: No description found for parameter 'params'
   drivers/gpu/drm/i915/intel_lrc.c:929: warning: Excess function parameter 'dev' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:929: warning: Excess function parameter 'file' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:929: warning: Excess function parameter 'ring' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:929: warning: Excess function parameter 'ctx' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:929: warning: Excess function parameter 'batch_obj' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:929: warning: Excess function parameter 'exec_start' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:929: warning: Excess function parameter 'dispatch_flags' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:1302: warning: No description found for parameter 'engine'
   drivers/gpu/drm/i915/intel_lrc.c:1302: warning: Excess function parameter 'ring' description in 'gen8_init_indirectctx_bb'
   drivers/gpu/drm/i915/intel_lrc.c:1365: warning: No description found for parameter 'engine'
   drivers/gpu/drm/i915/intel_lrc.c:1365: warning: Excess function parameter 'ring' description in 'gen8_init_perctx_bb'
   drivers/gpu/drm/i915/intel_lrc.c:2008: warning: No description found for parameter 'engine'
   drivers/gpu/drm/i915/intel_lrc.c:2008: warning: Excess function parameter 'ring' description in 'intel_logical_ring_cleanup'
   drivers/gpu/drm/i915/intel_lrc.c:2587: warning: No description found for parameter 'engine'
   drivers/gpu/drm/i915/intel_lrc.c:2587: warning: Excess function parameter 'ring' description in 'intel_lr_context_size'
   drivers/gpu/drm/i915/intel_lrc.c:2625: warning: No description found for parameter 'engine'
>> drivers/gpu/drm/i915/intel_lrc.c:2625: warning: Excess function parameter 'ring' description in 'execlists_context_deferred_alloc'
   Warning: didn't use docs for i915_hotplug_interrupt_update
   Warning: didn't use docs for ilk_update_display_irq
   Warning: didn't use docs for ilk_update_gt_irq
   Warning: didn't use docs for snb_update_pm_irq
   Warning: didn't use docs for bdw_update_port_irq
   Warning: didn't use docs for bdw_update_pipe_irq
   Warning: didn't use docs for ibx_display_interrupt_update
   Warning: didn't use docs for i915_enable_asle_pipestat
   Warning: didn't use docs for ivybridge_parity_work
   Warning: didn't use docs for i915_reset_and_wakeup
   Warning: didn't use docs for i915_handle_error
   Warning: didn't use docs for intel_irq_install
   Warning: didn't use docs for intel_irq_uninstall

vim +2625 drivers/gpu/drm/i915/intel_lrc.c

ede7d42b Oscar Mateo    2014-07-24  2609  
73e4d07f Oscar Mateo    2014-07-24  2610  /**
92c1989f Chris Wilson   2016-04-19  2611   * execlists_context_deferred_alloc() - create the LRC specific bits of a context
73e4d07f Oscar Mateo    2014-07-24  2612   * @ctx: LR context to create.
73e4d07f Oscar Mateo    2014-07-24  2613   * @ring: engine to be used with the context.
73e4d07f Oscar Mateo    2014-07-24  2614   *
73e4d07f Oscar Mateo    2014-07-24  2615   * This function can be called more than once, with different engines, if we plan
73e4d07f Oscar Mateo    2014-07-24  2616   * to use the context with them. The context backing objects and the ringbuffers
73e4d07f Oscar Mateo    2014-07-24  2617   * (specially the ringbuffer backing objects) suck a lot of memory up, and that's why
73e4d07f Oscar Mateo    2014-07-24  2618   * the creation is a deferred call: it's better to make sure first that we need to use
73e4d07f Oscar Mateo    2014-07-24  2619   * a given ring with the context.
73e4d07f Oscar Mateo    2014-07-24  2620   *
32197aab Masanari Iida  2014-10-20  2621   * Return: non-zero on error.
73e4d07f Oscar Mateo    2014-07-24  2622   */
92c1989f Chris Wilson   2016-04-19  2623  static int execlists_context_deferred_alloc(struct intel_context *ctx,
0bc40be8 Tvrtko Ursulin 2016-03-16  2624  					    struct intel_engine_cs *engine)
ede7d42b Oscar Mateo    2014-07-24 @2625  {
0bc40be8 Tvrtko Ursulin 2016-03-16  2626  	struct drm_device *dev = engine->dev;
8c857917 Oscar Mateo    2014-07-24  2627  	struct drm_i915_gem_object *ctx_obj;
8c857917 Oscar Mateo    2014-07-24  2628  	uint32_t context_size;
84c2377f Oscar Mateo    2014-07-24  2629  	struct intel_ringbuffer *ringbuf;
8c857917 Oscar Mateo    2014-07-24  2630  	int ret;
8c857917 Oscar Mateo    2014-07-24  2631  
ede7d42b Oscar Mateo    2014-07-24  2632  	WARN_ON(ctx->legacy_hw_ctx.rcs_state != NULL);
0bc40be8 Tvrtko Ursulin 2016-03-16  2633  	WARN_ON(ctx->engine[engine->id].state);

:::::: The code at line 2625 was first introduced by commit
:::::: ede7d42baeece583c864badb6f9081f4cded6c32 drm/i915/bdw: Initialization for Logical Ring Contexts

:::::: TO: Oscar Mateo <oscar.mateo@intel.com>
:::::: CC: Daniel Vetter <daniel.vetter@ffwll.ch>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index 6f4f2a6cdf93..e0ee5d1ac372 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@ -1085,14 +1085,6 @@  i915_gem_validate_context(struct drm_device *dev, struct drm_file *file,
 		return ERR_PTR(-EIO);
 	}
 
-	if (i915.enable_execlists && !ctx->engine[engine->id].state) {
-		int ret = intel_lr_context_deferred_alloc(ctx, engine);
-		if (ret) {
-			DRM_DEBUG("Could not create LRC %u: %d\n", ctx_id, ret);
-			return ERR_PTR(ret);
-		}
-	}
-
 	return ctx;
 }
 
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index 897f3d4c32c6..2910866611b2 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -227,6 +227,8 @@  enum {
 #define GEN8_CTX_RCS_INDIRECT_CTX_OFFSET_DEFAULT	0x17
 #define GEN9_CTX_RCS_INDIRECT_CTX_OFFSET_DEFAULT	0x26
 
+static int execlists_context_deferred_alloc(struct intel_context *ctx,
+					    struct intel_engine_cs *engine);
 static int intel_lr_context_pin(struct intel_context *ctx,
 				struct intel_engine_cs *engine);
 
@@ -675,8 +677,6 @@  int intel_logical_ring_alloc_request_extras(struct drm_i915_gem_request *request
 	struct intel_engine_cs *engine = request->engine;
 	int ret;
 
-	request->ringbuf = request->ctx->engine[engine->id].ringbuf;
-
 	if (i915.enable_guc_submission) {
 		/*
 		 * Check that the GuC has space for the request before
@@ -690,6 +690,14 @@  int intel_logical_ring_alloc_request_extras(struct drm_i915_gem_request *request
 			return ret;
 	}
 
+	if (request->ctx->engine[engine->id].state == NULL) {
+		ret = execlists_context_deferred_alloc(request->ctx, engine);
+		if (ret)
+			return ret;
+	}
+
+	request->ringbuf = request->ctx->engine[engine->id].ringbuf;
+
 	ret = intel_lr_context_pin(request->ctx, engine);
 	if (ret)
 		return ret;
@@ -2126,7 +2134,7 @@  logical_ring_init(struct drm_device *dev, struct intel_engine_cs *engine)
 	if (ret)
 		goto error;
 
-	ret = intel_lr_context_deferred_alloc(dctx, engine);
+	ret = execlists_context_deferred_alloc(dctx, engine);
 	if (ret)
 		goto error;
 
@@ -2600,7 +2608,7 @@  uint32_t intel_lr_context_size(struct intel_engine_cs *engine)
 }
 
 /**
- * intel_lr_context_deferred_alloc() - create the LRC specific bits of a context
+ * execlists_context_deferred_alloc() - create the LRC specific bits of a context
  * @ctx: LR context to create.
  * @ring: engine to be used with the context.
  *
@@ -2612,9 +2620,8 @@  uint32_t intel_lr_context_size(struct intel_engine_cs *engine)
  *
  * Return: non-zero on error.
  */
-
-int intel_lr_context_deferred_alloc(struct intel_context *ctx,
-				    struct intel_engine_cs *engine)
+static int execlists_context_deferred_alloc(struct intel_context *ctx,
+					    struct intel_engine_cs *engine)
 {
 	struct drm_device *dev = engine->dev;
 	struct drm_i915_gem_object *ctx_obj;
diff --git a/drivers/gpu/drm/i915/intel_lrc.h b/drivers/gpu/drm/i915/intel_lrc.h
index b17ab79333aa..8bea937973f6 100644
--- a/drivers/gpu/drm/i915/intel_lrc.h
+++ b/drivers/gpu/drm/i915/intel_lrc.h
@@ -102,8 +102,6 @@  static inline void intel_logical_ring_emit_reg(struct intel_ringbuffer *ringbuf,
 
 void intel_lr_context_free(struct intel_context *ctx);
 uint32_t intel_lr_context_size(struct intel_engine_cs *engine);
-int intel_lr_context_deferred_alloc(struct intel_context *ctx,
-				    struct intel_engine_cs *engine);
 void intel_lr_context_unpin(struct intel_context *ctx,
 			    struct intel_engine_cs *engine);