• Charles Keepax's avatar
    ASoC: wm_adsp: Avoid calling snd_compr_stop_error from WDT expiry · aa612f2b
    Charles Keepax authored
    It is unsafe to call snd_compr_stop_error from outside of the
    compressed ops. Firstly the compressed device lock needs to be held
    and secondly it queues error work to issue a trigger stop which
    should not happen after the stream has been freed. To avoid these
    issues use the same trick used for the IRQ handling, simply send a
    snd_compr_fragment_elapsed to cause user-space to wake on the poll,
    then report the error when user-space issues the pointer request
    after it wakes.
    
    Fixes: a2bcbc1b ("ASoC: wm_adsp: Shutdown any compressed streams on DSP watchdog timeout")
    Signed-off-by: default avatarCharles Keepax <ckeepax@opensource.cirrus.com>
    Signed-off-by: default avatarMark Brown <broonie@kernel.org>
    Cc: stable@kernel.org
    aa612f2b
wm_adsp.c 110 KB