[alsa-devel] Polling issues with the PCM multi plugin

Takashi Iwai tiwai at suse.de
Thu Dec 13 07:34:15 CET 2012

At Wed, 12 Dec 2012 21:57:56 -0800,
Devin Anderson wrote:
> Hi all,
> On the jack-devel list, we've been having a discussion about the ALSA
> PCM multi plugin:
>     http://thread.gmane.org/gmane.comp.audio.jackit/26571/focus=26571
> I've been having some issues with setting up my 2 Echo Layla 3Gs as a
> PCM multi.  In particular, I've found that there are times when
> polling the file descriptors of the multi when poll() returns, but
> there isn't actually a period of data available for capture/playback,
> even though the poll descriptors indicate that the data should be
> available.  After some debugging and learning about the PCM multi
> driver:
> 1.) The PCM multi driver only returns poll descriptors for one of the
> devices that makes up the multi
> 2.) When this happens, the device that's actually being polled *does*
> have data available
> 3.) When this happens, the device that's not being polled does not yet
> have a period's worth of data available
> After making sure that I had word clock enabled and that my word clock
> cable was working properly, I started delving into the problem some
> more.  From what I can gather, the PCM multi device uses the function
> `snd_pcm_link()` to sync its devices, and, for start, stop, drain,
> pause, suspend, resume, reset, and prepare operations, this appears to
> work fine; however, I can't find any evidence that a PCM device checks
> to make sure that all of its linked slave devices have their poll
> descriptors ready with events before indicating that events are
> available.
> Questions:
> 1.) Should `snd_pcm_link` make I/O availability indication dependent
> on I/O availability of its linked slave devices?

The PCM stream link has nothing to do with the poll descriptors.
It's basically only for performing the synchronized trigger.

> 2.) If not, how should this operation be handled?  I'm sure it *can*
> be handled in userspace by bypassing the multi and polling the file
> descriptors of all sound cards directly, but duplicating this code for
> each application that wants to poll multiple sound cards seems wrong.

Actually there were multiple poll descriptors for multi plugin in the
early version of alsa-lib.  But this was changed to a single fd by
some reason I don't remember.  I thought there were too many broken
apps doing wrong for multiple fds.

Maybe as a compromised solution, we'd need to introduce a config
option to multi plugin for allowing multiple fds.


More information about the Alsa-devel mailing list