ALSA: pcm: Block the release until the system resume finishes
authorTakashi Iwai <tiwai@suse.de>
Sun, 23 May 2021 09:09:20 +0000 (11:09 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 25 May 2021 06:49:55 +0000 (08:49 +0200)
The normal PCM operations are already blocked during the card power
off state in the PCM common ioctl handler, but the release isn't
covered.  As the PCM stream release may also access the hardware,
let's block the release until the card power turns on.

Reviewed-by: Jaroslav Kysela <perex@perex.cz>
Link: https://lore.kernel.org/r/20210523090920.15345-7-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/core/pcm_native.c

index 82f80d0c068b948e72e167533b6a0a692d82db21..11acea02bc74bbde62de8054aca81c914c13764b 100644 (file)
@@ -2799,6 +2799,10 @@ static int snd_pcm_release(struct inode *inode, struct file *file)
        if (snd_BUG_ON(!substream))
                return -ENXIO;
        pcm = substream->pcm;
+
+       /* block until the device gets woken up as it may touch the hardware */
+       snd_power_wait(pcm->card);
+
        mutex_lock(&pcm->open_mutex);
        snd_pcm_release_substream(substream);
        kfree(pcm_file);