All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mika Kuoppala <mika.kuoppala@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 2/2] drm/i915: Generalise wait for execlists to	be idle
Date: Fri, 03 Mar 2017 14:55:42 +0200	[thread overview]
Message-ID: <87tw7aa59t.fsf@gaia.fi.intel.com> (raw)
In-Reply-To: <20170303121947.20482-2-chris@chris-wilson.co.uk>

Chris Wilson <chris@chris-wilson.co.uk> writes:

> The code to check for execlists completion is generic, so move it to
> intel_engine_cs.c
>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com>

> ---
>  drivers/gpu/drm/i915/i915_gem.c                   |  8 +++----
>  drivers/gpu/drm/i915/intel_engine_cs.c            | 13 +++++++++++
>  drivers/gpu/drm/i915/intel_lrc.c                  | 28 -----------------------
>  drivers/gpu/drm/i915/intel_lrc.h                  |  1 -
>  drivers/gpu/drm/i915/intel_ringbuffer.h           |  1 +
>  drivers/gpu/drm/i915/selftests/i915_gem_request.c |  2 +-
>  6 files changed, 19 insertions(+), 34 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index 5efb18a229cc..7c20601fe1de 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -2959,8 +2959,8 @@ i915_gem_idle_work_handler(struct work_struct *work)
>  	 * new request is submitted.
>  	 */
>  	wait_for(READ_ONCE(dev_priv->gt.active_requests) ||
> -		 intel_execlists_idle(dev_priv), 10);
> -
> +		 intel_engines_are_idle(dev_priv),
> +		 10);
>  	if (READ_ONCE(dev_priv->gt.active_requests))
>  		return;
>  
> @@ -2985,7 +2985,7 @@ i915_gem_idle_work_handler(struct work_struct *work)
>  	if (dev_priv->gt.active_requests)
>  		goto out_unlock;
>  
> -	if (wait_for(intel_execlists_idle(dev_priv), 10))
> +	if (wait_for(intel_engines_are_idle(dev_priv), 10))
>  		DRM_ERROR("Timeout waiting for engines to idle\n");
>  
>  	for_each_engine(engine, dev_priv, id) {
> @@ -4287,7 +4287,7 @@ int i915_gem_suspend(struct drm_i915_private *dev_priv)
>  	 * reset the GPU back to its idle, low power state.
>  	 */
>  	WARN_ON(dev_priv->gt.awake);
> -	WARN_ON(!intel_execlists_idle(dev_priv));
> +	WARN_ON(!intel_engines_are_idle(dev_priv));
>  
>  	/*
>  	 * Neither the BIOS, ourselves or any other kernel
> diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
> index 53d65dc0c9fb..5fd4883db235 100644
> --- a/drivers/gpu/drm/i915/intel_engine_cs.c
> +++ b/drivers/gpu/drm/i915/intel_engine_cs.c
> @@ -1102,6 +1102,19 @@ bool intel_engine_is_idle(struct intel_engine_cs *engine)
>  	return true;
>  }
>  
> +bool intel_engines_are_idle(struct drm_i915_private *dev_priv)
> +{
> +	struct intel_engine_cs *engine;
> +	enum intel_engine_id id;
> +
> +	for_each_engine(engine, dev_priv, id) {
> +		if (!intel_engine_is_idle(engine))
> +			return false;
> +	}
> +
> +	return true;
> +}
> +
>  #if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
>  #include "selftests/mock_engine.c"
>  #endif
> diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
> index f9a8545474bc..3834a84fe084 100644
> --- a/drivers/gpu/drm/i915/intel_lrc.c
> +++ b/drivers/gpu/drm/i915/intel_lrc.c
> @@ -498,34 +498,6 @@ static bool execlists_elsp_idle(struct intel_engine_cs *engine)
>  	return !engine->execlist_port[0].request;
>  }
>  
> -/**
> - * intel_execlists_idle() - Determine if all engine submission ports are idle
> - * @dev_priv: i915 device private
> - *
> - * Return true if there are no requests pending on any of the submission ports
> - * of any engines.
> - */
> -bool intel_execlists_idle(struct drm_i915_private *dev_priv)
> -{
> -	struct intel_engine_cs *engine;
> -	enum intel_engine_id id;
> -
> -	if (!i915.enable_execlists)
> -		return true;
> -
> -	for_each_engine(engine, dev_priv, id) {
> -		/* Interrupt/tasklet pending? */
> -		if (test_bit(ENGINE_IRQ_EXECLIST, &engine->irq_posted))
> -			return false;
> -
> -		/* Both ports drained, no more ELSP submission? */
> -		if (!execlists_elsp_idle(engine))
> -			return false;
> -	}
> -
> -	return true;
> -}
> -
>  static bool execlists_elsp_ready(const struct intel_engine_cs *engine)
>  {
>  	const struct execlist_port *port = engine->execlist_port;
> diff --git a/drivers/gpu/drm/i915/intel_lrc.h b/drivers/gpu/drm/i915/intel_lrc.h
> index c8009c7bfbdd..5fc07761caff 100644
> --- a/drivers/gpu/drm/i915/intel_lrc.h
> +++ b/drivers/gpu/drm/i915/intel_lrc.h
> @@ -88,6 +88,5 @@ uint64_t intel_lr_context_descriptor(struct i915_gem_context *ctx,
>  int intel_sanitize_enable_execlists(struct drm_i915_private *dev_priv,
>  				    int enable_execlists);
>  void intel_execlists_enable_submission(struct drm_i915_private *dev_priv);
> -bool intel_execlists_idle(struct drm_i915_private *dev_priv);
>  
>  #endif /* _INTEL_LRC_H_ */
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h
> index 38580765bfd6..55a6a3f8274c 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.h
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
> @@ -665,5 +665,6 @@ static inline u32 *gen8_emit_pipe_control(u32 *batch, u32 flags, u32 offset)
>  }
>  
>  bool intel_engine_is_idle(struct intel_engine_cs *engine);
> +bool intel_engines_are_idle(struct drm_i915_private *dev_priv);
>  
>  #endif /* _INTEL_RINGBUFFER_H_ */
> diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_request.c b/drivers/gpu/drm/i915/selftests/i915_gem_request.c
> index 42bdeac93324..926b24c117d6 100644
> --- a/drivers/gpu/drm/i915/selftests/i915_gem_request.c
> +++ b/drivers/gpu/drm/i915/selftests/i915_gem_request.c
> @@ -303,7 +303,7 @@ static int end_live_test(struct live_test *t)
>  {
>  	struct drm_i915_private *i915 = t->i915;
>  
> -	if (wait_for(intel_execlists_idle(i915), 1)) {
> +	if (wait_for(intel_engines_are_idle(i915), 1)) {
>  		pr_err("%s(%s): GPU not idle\n", t->func, t->name);
>  		return -EIO;
>  	}
> -- 
> 2.11.0
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2017-03-03 12:57 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-03 12:19 [PATCH 1/2] drm/i915: Ensure the engine is idle before manually changing HWS Chris Wilson
2017-03-03 12:19 ` [PATCH 2/2] drm/i915: Generalise wait for execlists to be idle Chris Wilson
2017-03-03 12:55   ` Mika Kuoppala [this message]
2017-03-03 13:17 ` ✓ Fi.CI.BAT: success for series starting with [1/2] drm/i915: Ensure the engine is idle before manually changing HWS Patchwork
2017-03-03 13:30   ` Chris Wilson
2017-03-03 13:36     ` Mika Kuoppala

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87tw7aa59t.fsf@gaia.fi.intel.com \
    --to=mika.kuoppala@linux.intel.com \
    --cc=chris@chris-wilson.co.uk \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.