From: Raymond Yau <superquad.vortex2@gmail.com>
To: alsa-devel@alsa-project.org
Subject: Re: safe support for rewind in ALSA
Date: Mon, 8 Feb 2010 09:22:56 +0800 [thread overview]
Message-ID: <4f3252891002071722g9055fe4s9602da49e7ab9d83@mail.gmail.com> (raw)
In-Reply-To: <6160a5131002031457h3b6f6ccev4acbd412841b25c8@mail.gmail.com>
2010/2/4 pl bossart <bossart.nospam@gmail.com>
> >> - the 'only' change is to make sure the hw_ptr reported in .pointer is
> >> NOT the number of samples pushed out to the interface. hw_ptr should
> >
> > although, I'm not entirely sure this still makes rewinds fully safe.
> After
> > driver has called period elapsed and hw_ptr jumps ahead one period worth
> of
> > samples, the DMA for the next burst/batch is already programmed and
> possibly
> > ongoing. And with some drivers the burst size (of a single DMA
> transaction)
> > may be fairly large, while some transfer sample at a time, at codec rate.
> >
> > This might lead to undefined behaviour when application rewinds upto
> hw_ptr
> > and starts to refill the segment of the ringbuffer just after hw_ptr,
> while
> > at the same time DMA engine is already transferring data out of that same
> > ringbuffer segment.
> >
> > So a safer bet would be to limit rewinds to hw_ptr+X, where X is highly
> > driver/hw specific. At the minimum, 'X >= dma_get_cache_alignment()' (see
> > linux/Documentation/DMA-API.txt) to get deterministic results on
> different
> > platforms. A sane convervative assumption is 'X >= period-size'.
>
> Well, we went from my interpretation that was completely broken to
> something that can still be broken at times...
> If you really want to be safe, you'd need a means to specify this X
> value for your system. Actually it would make a lot of sense to do so.
> On most embedded systems the DMA bursts and buffering in FIFOs can be
> programmed. It'd be nice to have the ability to set different values
> for DMA bursts and delay depending on the mode (low-power,
> low-latency, etc).
>
>
will your propsed hw_ptr move when underrun occur ?
>> if the 'only' change is to make sure the hw_ptr reported in .pointer is
NOT the number of >> samples pushed out to the interface.
>> hw_ptr should really represent the next read position in the ring buffer,
this isn't
>> uniform across drivers. This means for example that the HDAudio
>> implementation needs to modified so that the LPIB value is increased
>> with runtime->delay.
next prev parent reply other threads:[~2010-02-08 1:22 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-01 17:20 safe support for rewind in ALSA pl bossart
2010-02-01 18:00 ` Jaroslav Kysela
2010-02-01 22:40 ` pl bossart
2010-02-03 2:20 ` Raymond Yau
2010-02-03 18:03 ` Kai Vehmanen
2010-02-03 20:52 ` Kai Vehmanen
2010-02-03 22:57 ` pl bossart
2010-02-08 1:22 ` Raymond Yau [this message]
2010-02-02 2:53 ` Raymond Yau
2010-02-06 11:59 ` Raymond Yau
2010-02-17 15:30 ` Lennart Poettering
2010-02-18 1:31 ` Raymond Yau
2010-02-18 2:33 ` Lennart Poettering
2010-02-18 3:21 ` Raymond Yau
2010-02-01 18:01 ` Mark Brown
2010-02-01 18:05 ` Jaroslav Kysela
2010-02-01 21:28 ` Kai Vehmanen
2010-02-01 21:54 ` Kai Vehmanen
2010-02-08 22:59 ` Raymond Yau
2010-02-09 20:54 ` Kai Vehmanen
2010-02-10 13:19 ` Raymond Yau
2010-02-10 13:36 ` Clemens Ladisch
2010-02-11 6:52 ` Raymond Yau
2010-02-11 7:20 ` Clemens Ladisch
2010-02-11 7:27 ` Jaroslav Kysela
2010-02-15 3:03 ` Raymond Yau
2010-02-17 15:46 ` Lennart Poettering
2010-02-21 10:35 ` Kai Vehmanen
2010-02-22 9:07 ` Raymond Yau
[not found] ` <20100221203500.GH31800@tango.0pointer.de>
2010-02-22 19:15 ` semantics of SNDRV_PCM_INFO_BATCH (was: Re: safe support for rewind in ALSA) Kai Vehmanen
2010-02-23 7:02 ` Raymond Yau
2010-02-23 2:37 ` safe support for rewind in ALSA Raymond Yau
2010-02-23 2:44 ` Raymond Yau
2010-02-17 15:42 ` Lennart Poettering
2010-02-21 10:06 ` Kai Vehmanen
[not found] ` <20100221202144.GG31800@tango.0pointer.de>
2010-05-04 2:31 ` Raymond Yau
2010-02-17 15:39 ` Lennart Poettering
2010-02-17 15:36 ` Lennart Poettering
2010-02-17 15:35 ` Lennart Poettering
2010-02-01 22:10 ` Kai Vehmanen
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=4f3252891002071722g9055fe4s9602da49e7ab9d83@mail.gmail.com \
--to=superquad.vortex2@gmail.com \
--cc=alsa-devel@alsa-project.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).