On Tue, 16 Jun 2020 15:17:42 +0200, Mark Hills wrote: > > The function uses chip->comm_page which needs locking against > other use at the same time. > > Signed-off-by: Mark Hills <mark@xxxxxxxx> > --- > sound/pci/echoaudio/echoaudio.c | 15 ++++++++++++++- > 1 file changed, 14 insertions(+), 1 deletion(-) > > diff --git a/sound/pci/echoaudio/echoaudio.c b/sound/pci/echoaudio/echoaudio.c > index 82a49dfd2384..8cf08988959f 100644 > --- a/sound/pci/echoaudio/echoaudio.c > +++ b/sound/pci/echoaudio/echoaudio.c > @@ -711,9 +711,22 @@ static int pcm_prepare(struct snd_pcm_substream *substream) > > if (snd_BUG_ON(pipe_index >= px_num(chip))) > return -EINVAL; > - if (snd_BUG_ON(!is_pipe_allocated(chip, pipe_index))) > + > + /* > + * We passed checks we can do independently; now take > + * exclusive control > + */ > + > + spin_lock(&chip->lock); You need spin_lock_irq() and spin_unlock_irq(), as the prepare callback in in sleepable context. thanks, Takashi