Skip to content
  • Liam Girdwood's avatar
    [ALSA] ASoC force running of delayed PM work at suspend() and remove() · 965ac42c
    Liam Girdwood authored
    
    
    This patch fixes a bug whereby the power management delayed work would
    never be run at driver suspend() or module remove(). Delayed work would
    be created (after audio had finished) with a long delay (~5 secs) and
    was sometimes never queued before flush_scheduled_work() was being
    called at suspend or module remove. This caused the delayed work to
    queued after the module had been removed or after resume.
    This patch forces any delayed work to complete by cancelling it (timer
    cannot fire and add it to queue later), scheduling it for now and
    waiting on it's completion.
    This is something I probably would like to add to workqueue.c in the
    next merge window, however it's here atm because it can oops.
    
    Signed-off-by: default avatarLiam Girdwood <lg@opensource.wolfsonmicro.com>
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    Signed-off-by: default avatarJaroslav Kysela <perex@suse.cz>
    965ac42c