All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chris Wilson <chris@chris-wilson.co.uk>
To: Daniel Vetter <daniel@ffwll.ch>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>,
	Intel Graphics Development <intel-gfx@lists.freedesktop.org>
Subject: Re: [PATCH 1/2] drm/i915: time out of load detect busy-waits
Date: Sat, 28 Apr 2012 22:00:29 +0100	[thread overview]
Message-ID: <1335646872_81002@CP5-2952> (raw)
In-Reply-To: <20120425192650.GG5079@phenom.ffwll.local>

On Wed, 25 Apr 2012 21:26:50 +0200, Daniel Vetter <daniel@ffwll.ch> wrote:
> On Wed, Apr 25, 2012 at 06:14:37PM +0100, Chris Wilson wrote:
> > On Fri, 20 Apr 2012 21:03:35 +0200, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> > > If we try to do that and the scanlines just wouldn't advance, we
> > > busy-hang the machine holding the modeset mutex. Not great for
> > > debugging.
> > > 
> > > References: https://bugzilla.kernel.org/show_bug.cgi?id=43020
> > > Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> > 
> > Reviewer hangs head in shame:
> > 
> > > +		if (wait_for(I915_READ(pipe_dsl_reg) >= vactive, 1000))
> > > +			DRM_ERROR("timed out waiting for vactive in "
> > > +				  "load_detect, scanline: %u\n",
> > > +				  I915_READ(pipe_dsl_reg));
> > > +		if (wait_for((dsl = I915_READ(pipe_dsl_reg)) <= vsample, 1000))
> > > +			DRM_ERROR("timed out waiting for vsample in "
> > > +				  "load_detect, scanline: %u\n",
> > > +				  I915_READ(pipe_dsl_reg));
> > 
> > wait_for() catches us out everytime we convert and existing while(),
> > because the predicate is when it stops. Perhaps if we had a wait_until,
> > but anyway the fix here is:
> > 
> > if (wait_for(I915_READ(pipe_dsl_reg) < vactive, 1000))
> >   ...
> > if (wait_for((dsl = I915_READ(pipe_dsl_reg)) > vsample, 1000))
> >   ...
> dinq rectified, it never happened. Thanks for catching this.

wait_for() has even more subtleties in store for us, the unwary coder.
By default, it uses a 1ms sleep between polling the register, chosen to
be kind whilst waiting for panel bits to power up which do take a fair
amount of time. Here, that extra delay causes us to sample the vsync
rather than the border. The quirk of the [vh]sync is that the monitor bit
of ST00 is always true. And since we always seem to pick that row to read
we always think there is a CRT present.

The choice is either to use the busy-polling variant, wait_for_atomic,
or restructure the entire block to use a single timeout with direct
reads. And whilst you are modifying the code, convert the polling reads
to I915_READ_NOTRACE().
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre

  reply	other threads:[~2012-04-28 21:01 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-20 19:03 [PATCH 1/2] drm/i915: time out of load detect busy-waits Daniel Vetter
2012-04-20 19:03 ` [PATCH 2/2] drm/i915: fixup load-detect on enabled, but not active pipe Daniel Vetter
2012-04-20 19:44   ` Chris Wilson
2012-04-22  9:17     ` Daniel Vetter
2012-04-20 19:25 ` [PATCH] drm/fixup: fixup tv load-detect on enabled but not active crtc Daniel Vetter
2012-04-20 19:42 ` [PATCH 1/2] drm/i915: time out of load detect busy-waits Chris Wilson
2012-04-25 17:14 ` Chris Wilson
2012-04-25 19:26   ` Daniel Vetter
2012-04-28 21:00     ` Chris Wilson [this message]
2012-05-01 17:26       ` Daniel Vetter

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=1335646872_81002@CP5-2952 \
    --to=chris@chris-wilson.co.uk \
    --cc=daniel.vetter@ffwll.ch \
    --cc=daniel@ffwll.ch \
    --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.