mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-28 20:02:17 +00:00
ALSA: Update document about PCM nonatomic ops
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
3b73cfe559
commit
941a74ca9e
1 changed files with 23 additions and 5 deletions
|
@ -2742,7 +2742,9 @@ struct _snd_pcm_runtime {
|
|||
|
||||
<para>
|
||||
Another note is that this callback is non-atomic
|
||||
(schedulable). This is important, because the
|
||||
(schedulable) as default, i.e. when no
|
||||
<structfield>nonatomic</structfield> flag set.
|
||||
This is important, because the
|
||||
<structfield>trigger</structfield> callback
|
||||
is atomic (non-schedulable). That is, mutexes or any
|
||||
schedule-related functions are not available in
|
||||
|
@ -2900,8 +2902,9 @@ struct _snd_pcm_runtime {
|
|||
</para>
|
||||
|
||||
<para>
|
||||
As mentioned, this callback is atomic. You cannot call
|
||||
functions which may sleep.
|
||||
As mentioned, this callback is atomic as default unless
|
||||
<structfield>nonatomic</structfield> flag set, and
|
||||
you cannot call functions which may sleep.
|
||||
The trigger callback should be as minimal as possible,
|
||||
just really triggering the DMA. The other stuff should be
|
||||
initialized hw_params and prepare callbacks properly
|
||||
|
@ -2936,7 +2939,7 @@ struct _snd_pcm_runtime {
|
|||
</para>
|
||||
|
||||
<para>
|
||||
This callback is also atomic.
|
||||
This callback is also atomic as default.
|
||||
</para>
|
||||
</section>
|
||||
|
||||
|
@ -2972,7 +2975,7 @@ struct _snd_pcm_runtime {
|
|||
is useful only for such a purpose.
|
||||
</para>
|
||||
<para>
|
||||
This callback is atomic.
|
||||
This callback is atomic as default.
|
||||
</para>
|
||||
</section>
|
||||
|
||||
|
@ -3175,6 +3178,21 @@ struct _snd_pcm_runtime {
|
|||
called with local interrupts disabled.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The recent changes in PCM core code, however, allow all PCM
|
||||
operations to be non-atomic. This assumes that the all caller
|
||||
sides are in non-atomic contexts. For example, the function
|
||||
<function>snd_pcm_period_elapsed()</function> is called
|
||||
typically from the interrupt handler. But, if you set up the
|
||||
driver to use a threaded interrupt handler, this call can be in
|
||||
non-atomic context, too. In such a case, you can set
|
||||
<structfield>nonatomic</structfield> filed of
|
||||
<structname>snd_pcm</structname> object after creating it.
|
||||
When this flag is set, mutex and rwsem are used internally in
|
||||
the PCM core instead of spin and rwlocks, so that you can call
|
||||
all PCM functions safely in a non-atomic context.
|
||||
</para>
|
||||
|
||||
</section>
|
||||
<section id="pcm-interface-constraints">
|
||||
<title>Constraints</title>
|
||||
|
|
Loading…
Reference in a new issue