All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chris Wilson <chris@chris-wilson.co.uk>
To: Ben Widawsky <ben@bwidawsk.net>, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 2/4] drm/i915: fix rc6 initialization on Ironlake
Date: Sat, 19 Mar 2011 07:55:01 +0000	[thread overview]
Message-ID: <0d30dc$lgdgge@orsmga001.jf.intel.com> (raw)
In-Reply-To: <1300489968-8574-3-git-send-email-ben@bwidawsk.net>

On Fri, 18 Mar 2011 16:12:46 -0700, Ben Widawsky <ben@bwidawsk.net> wrote:
> There is a race condition between setting PWRCTXA and executing
> MI_SET_CONTEXT. PWRCTXA must not be set until a valid context has been
> written (or else the GPU could possible go into rc6, and return to an
> invalid context).
> 
> Reported-and-Tested-by: Gu Rui <chaos.proton@gmail.com>
> Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=28582
> Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
> ---
>  drivers/gpu/drm/i915/intel_display.c |   32 +++++++++++++++++++++++++++++---
>  1 files changed, 29 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 790af25..c1e9c30 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -6603,14 +6603,27 @@ static int ironlake_setup_rc6(struct drm_device *dev)
>  	return 0;
>  }
>  
> +static int ironlake_wait_set_context(struct drm_device *dev)
> +{
> +	struct drm_i915_private *dev_priv = dev->dev_private;
> +	struct intel_ring_buffer *ring = LP_RING(dev_priv);
> +	int ret = -EAGAIN;
> +
> +	ret = wait_for((I915_READ_HEAD(ring) == I915_READ_TAIL(ring)), 1000);
> +	if (ret && atomic_read(&dev_priv->mm.wedged)) {
> +		ret = -EIO;
> +	} else if (!ret) { /* head == tail */
> +		ret = 0;
> +	}
> +
> +	return ret;
> +}

Let's make this a more generic function because it does look useful.

static inline int intel_ring_wait_idle(struct intel_ring_buffer *ring)
{
	return intel_wait_ring_buffer(ring, ring->space - 8);
}

> +
>  void ironlake_enable_rc6(struct drm_device *dev)
>  {
>  	struct drm_i915_private *dev_priv = dev->dev_private;
>  	int ret;
>  
> -	/* rc6 disabled by default due to repeated reports of hanging during
> -	 * boot and resume.
> -	 */
>  	if (!i915_enable_rc6)
>  		return;
>  
> @@ -6640,6 +6653,19 @@ void ironlake_enable_rc6(struct drm_device *dev)
>  	OUT_RING(MI_FLUSH);
>  	ADVANCE_LP_RING();
>  
> +	/*
> +	 * Wait for the command parser to advance past MI_SET_CONTEXT. The HW
> +	 * does an implicit flush, combined with MI_FLUSH above, it should be
> +	 * safe to assume that renderctx is valid
> +	 */
> +	ret = ironlake_wait_set_context(dev);
> +	if (ret) {
> +		if (ret == -EAGAIN)
> +			DRM_ERROR("rc6 switch took too long, freeing the bo");

Just report the failure in all cases and avoid jargon (if possible)!

if (intel_ring_wait_idle(LP_RING(dev_priv))) {
	DRM_ERROR("failed to enable automatic power saving\n");
	return;
}

-- 
Chris Wilson, Intel Open Source Technology Centre

  reply	other threads:[~2011-03-19  7:55 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-18 23:12 [PATCH 0/4] Re-enable RC6 on Ironlake Ben Widawsky
2011-03-18 23:12 ` [PATCH 1/4] drm/i915: fix ilk rc6 teardown locking Ben Widawsky
2011-03-19  7:44   ` Chris Wilson
2011-03-19 18:38     ` [PATCH v2 " Ben Widawsky
2011-03-19 18:46     ` [PATCH " Keith Packard
2011-03-20  1:14     ` [PATCH v2 1/5] " Ben Widawsky
2011-03-20  1:14     ` [PATCH v2 2/5] drm/1915: ringbuffer wait for idle function Ben Widawsky
2011-03-20  1:14     ` [PATCH v2 3/5] drm/i915: fix rc6 initialization on Ironlake Ben Widawsky
2011-03-20  1:14     ` [PATCH v2 4/5] drm/i915: debugfs for context information Ben Widawsky
2011-03-20  1:14     ` [PATCH v2 5/5] drm/i915: re-enable rc6 for ironlake Ben Widawsky
2011-03-18 23:12 ` [PATCH 2/4] drm/i915: fix rc6 initialization on Ironlake Ben Widawsky
2011-03-19  7:55   ` Chris Wilson [this message]
2011-03-20  0:07     ` Ben Widawsky
2011-03-18 23:12 ` [PATCH 3/4] drm/i915: debugfs for context information Ben Widawsky
2011-03-18 23:12 ` [PATCH 4/4] drm/i915: re-enable rc6 for ironlake Ben Widawsky
2011-04-27  7:49   ` Chris Wilson
2011-04-27 21:20     ` Jesse Barnes
2011-04-27 22:03       ` Chris Wilson
2011-04-27 22:49         ` Jesse Barnes
2011-04-28 17:10           ` Ben Widawsky

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='0d30dc$lgdgge@orsmga001.jf.intel.com' \
    --to=chris@chris-wilson.co.uk \
    --cc=ben@bwidawsk.net \
    --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.