All of lore.kernel.org
 help / color / mirror / Atom feed
From: Liam Girdwood <lrg@slimlogic.co.uk>
To: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cc: Sascha Hauer <s.hauer@pengutronix.de>,
	alsa-devel@alsa-project.org,
	Valentin Longchamp <valentin.longchamp@epfl.ch>
Subject: Re: [PATCH 3/3] imx-ssi: Use a hrtimer in FIQ mode
Date: Thu, 08 Apr 2010 16:14:29 +0100	[thread overview]
Message-ID: <1270739669.3248.591.camel@odin> (raw)
In-Reply-To: <20100408140329.GB14241@sirena.org.uk>

On Thu, 2010-04-08 at 15:03 +0100, Mark Brown wrote:
> On Thu, Apr 08, 2010 at 03:13:53PM +0200, Sascha Hauer wrote:
> > On Thu, Apr 08, 2010 at 10:53:25AM +0100, Mark Brown wrote:
> 
> > > Hrm, this looks like it's going to have an issue with clock drift -
> > > we're now unconditionally advancing the timer every period, even if the
> > > data transfer hasn't pushed through a period of data.  This will cause
> > > problems on lengthy playbacks (and shorter ones if the clocks are
> > > sufficiently out of sync).
> 
> > We are calling snd_pcm_period_elapsed when at least one period is over.
> > As I see it the worst thing that could happen is that we have not
> > transfered enough data for one period in the timer callback and thus we
> > call snd_pcm_period_elapsed in the next timer callback, so about one
> > period too late, but the comment in sound/core/pcm_lib.c says:
> 
> > Even if more than one periods have elapsed since the last call, you
> > have to call this only once.
> 
> > So I think this should be save.
> 
> The risk here is fragility caused by delaying the notification.
> 
> The issue is that if the period is long enough and/or the application is
> running too close to where the hardware is then the delay of what's
> likely to be almost an entire period is likely to glitch - you can end
> up with a situation where you're essentially notifying immediately
> before the end of the next period rather than immediately after the end
> of the current period.
> 
> Consider, for example what happens if the hrtimer runs slightly faster
> than the audio clock.  Eventually you'll get:
> 
>  - The timer runs, period A has a frame or two to go still.
>  - Period A completes, period A' begins.
>  - The timer fires again - period A is notified, period A' is almost
>    complete.
> 
> In this situation the completion notifications lag the actual completion
> of the frame by almost a period (though this lag will go down over time).
> Most of the time this will still be fine and everything will work OK but
> I would expect this to cause issues with some applications, especially
> if they're trying to be latency sensitive.

I agree this will drift but I _think_ we are probably workable here for
most latency sensitive apps as long as the worst case notification delay
is 1 period, pointer() is accurate to a few frames and there is a least
> 3 or 4 period buffers available for use in our driver buffer (for each
direction). 

Currently the min periods for this driver is 2, so I would probably
change to 4 to reduce drift related glitches.

Liam

-- 
Freelance Developer, SlimLogic Ltd
ASoC and Voltage Regulator Maintainer.
http://www.slimlogic.co.uk

  reply	other threads:[~2010-04-08 15:14 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-04-08  9:31 imx-ssi fixes Sascha Hauer
2010-04-08  9:31 ` [PATCH 1/3] imx-ssi: honor IMX_SSI_DMA flag Sascha Hauer
2010-04-08  9:31 ` [PATCH 2/3] imx-pcm-dma-mx2: restart DMA after an error Sascha Hauer
2010-04-08  9:31 ` [PATCH 3/3] imx-ssi: Use a hrtimer in FIQ mode Sascha Hauer
2010-04-08  9:53   ` Mark Brown
2010-04-08 13:13     ` Sascha Hauer
2010-04-08 13:30       ` Liam Girdwood
2010-04-08 15:40         ` Sascha Hauer
2010-04-08 14:03       ` Mark Brown
2010-04-08 15:14         ` Liam Girdwood [this message]
2010-04-08 15:45           ` Mark Brown
2010-04-08 15:29   ` Valentin Longchamp
2010-04-08 14:47 ` imx-ssi fixes Mark Brown
2010-04-08 15:51   ` Sascha Hauer
2010-04-08 15:54     ` Mark Brown

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=1270739669.3248.591.camel@odin \
    --to=lrg@slimlogic.co.uk \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@opensource.wolfsonmicro.com \
    --cc=s.hauer@pengutronix.de \
    --cc=valentin.longchamp@epfl.ch \
    /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.