JongHo Kim furmuwon at gmail.com
Thu Dec 12 07:08:11 CET 2013

I develop ALSA SOC Part and use the tinyalsa library on application space.
We recently used pause ioctl command(SNDRV_PCM_IOCTL_PAUSE)
because the music application was needed to pause and resume feature.
So the music application was achieved to want pause
and resume feature using the SNDRV_PCM_IOCTL_PAUSE.

but I found some problem in alsa kernel framework

The music application process on pause state wake up in 10 seconds
because the wait time is set by 10 seconds in wait_for_avail function.

I realized that if the 'runtime->no_period_wakeup' parameter is true,
the wait_time will be set by the MAX_SCHEDULE_TIMEOUT.

I had searched other kernel source and library source.
I added the SNDRV_PCM_INFO_NO_PERIOD_WAKEUP flag at my snd_pcm_hardware
and added the SNDRV_PCM_HW_PARAMS_NO_PERIOD_WAKEUP flag at music
application(use tinyalsa library)

Result was good!
The music application perfectly works the pause and resume feature.

but I have some worries
if DMA or I2S was stop on the running,
I can't more see the 'write error (DMA or IRQ trouble?)' message
and the music application process may be sleep eternally.

I cautiously recommend next code with a solution to the above worries.
diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
old mode 100644
new mode 100755
index 41b3dfe..3284940
--- a/sound/core/pcm_lib.c
+++ b/sound/core/pcm_lib.c
@@ -1936,6 +1936,8 @@ static int wait_for_avail(struct snd_pcm_substream
                case SNDRV_PCM_STATE_DISCONNECTED:
                        err = -EBADFD;
                        goto _endloop;
+               case SNDRV_PCM_STATE_PAUSED:
+                       continue;
                if (!tout) {
                        snd_printd("%s write error (DMA or IRQ trouble?)\n",

I tested code. code works good!
but I am concerned about the side effects
please review my idea.

More information about the Alsa-devel mailing list