mirror of
https://github.com/torvalds/linux.git
synced 2026-06-07 22:14:04 +02:00
ALSA: PCM: check if ops are defined before suspending PCM
BE dai links only have internal PCM's and their substream ops may
not be set. Suspending these PCM's will result in their
ops->trigger() being invoked and cause a kernel oops.
So skip suspending PCM's if their ops are NULL.
[ NOTE: this change is required now for following the recent PCM core
change to get rid of snd_pcm_suspend() call. Since DPCM BE takes
the runtime carried from FE while keeping NULL ops, it can hit this
bug. See details at:
https://github.com/thesofproject/linux/pull/582
-- tiwai ]
Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
(cherry picked from commit d9c0b2afe8)
(cherry picked from commit 1bde5ed6fa67c1ee48fa59d257f860fb290b33e3)
This commit is contained in:
parent
29b936309e
commit
0dce3b5433
|
|
@ -1506,6 +1506,14 @@ int snd_pcm_suspend_all(struct snd_pcm *pcm)
|
|||
/* FIXME: the open/close code should lock this as well */
|
||||
if (substream->runtime == NULL)
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Skip BE dai link PCM's that are internal and may
|
||||
* not have their substream ops set.
|
||||
*/
|
||||
if (!substream->ops)
|
||||
continue;
|
||||
|
||||
err = snd_pcm_suspend(substream);
|
||||
if (err < 0 && err != -EBUSY)
|
||||
return err;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user